INF1070 Oppgaver uke 14 (4.-8.4.2005) Oppgave 1 Hva gj?r funksjonen int f (unsigned int x) { int res = 0; while (x) { res += x&1; x = x >> 1; } return res; } ? Skriv funksjonen i x86-assembler. Oppgave 2 Denne funksjonen finner indeksen til verdien x i den sorterte vektoren a med n elementer ved benytte bin?rs?king. Oversett funksjonen til x86-kode. int binsok (int a[], int n, int x) { int lo = 0, hi = n-1; while (lo <= hi) { int mid = (lo+hi)/2; if (x < a[mid]) hi = mid-1; else if (x > a[mid]) lo = mid+1; else return mid; } return -1; } Oppgave 3 Skriv de to funksjonene strlen og strcpy i x86-kode med de spesielle tekstinstruksjonene nevnt p? forelesningen 4.4.2005. Oppgave 4 Funksjonen unsigned int upto16 (unsigned int v) runder av v oppover slik at svaret alltid er et multiplum av 16; eksempler er upto16(31) gir 32 upto16(32) gir 32 upto16(33) gir 48 Skriv funksjonen b?de i C og assembler uten ? bruke multiplikasjon og divisjon. Hint. Tenk bit-m?nstre. Oppgave 5 Denne kjente funksjonen finner fakultetet til et heltall: int fak (int n) { return n<=1 ? 1 : n*fak(n-1); } Oversett funksjonen til x86-kode.