INF2270 Oppgaver uke 11 (12.-16.3.2007) (Oppgave 4 er den viktigste denne uken. Oppgave 2 er sv?rt rask ? l?se n?r man f?rst har skj?nt hva man skal gj?re. Oppgave 1 Skriv om funksjonen `yellower? fra mandagens forelesning til ? behandle fargekomponentene i en l?kke som g?r tre ganger. Hint: Bruk instruksjonsnotasjonen for vektoraksess. Hint: Hvis du trenger flere registre enn EAX, EBX, EXC og EDX, kan du bruke ESI og EDI. Oppgave 1b (for spesielt interesserte) Trenger man virkelig ? konvertere til 16-bits ord? Oppgave 2 Skriv et lite program i C eller x86-assemblerspr?k som avgj?r om maskinen bruker little- eller big-endian. Oppgave 3 Standardfunksjonen i C char *strcat (char *a, char *b) utvider teksten a med b. Returverdien er rett og slett a. Skriv funksjonen i x86-kode. Den skal kalle p? `strlen? (vist p? forelesningen 26.2.2007) for ? f? vite hvor lang a er. Eksempel p? bruk: Testprogrammet #include #include extern char *mystrcat (char *a, char *b); char *data[] = { "", "a", "abc" }; int main (void) { int data_len = sizeof(data)/sizeof(char*), i1, i2; char c[20]; for (i1 = 0; i1 < data_len; ++i1) for (i2 = 0; i2 < data_len; ++i2) { strcpy(c, data[i1]); printf("strcat(\"%s\", \"%s\") = \"%s\"\n", data[i1], data[i2], mystrcat(c,data[i2])); } return 0; } skal skrive ut f?lgende: strcat("", "") = "" strcat("", "a") = "a" strcat("", "abc") = "abc" strcat("a", "") = "a" strcat("a", "a") = "aa" strcat("a", "abc") = "aabc" strcat("abc", "") = "abc" strcat("abc", "a") = "abca" strcat("abc", "abc") = "abcabc" Oppgave 4 Ta utgangspunkt i funksjonen `innforst? fra mandagens forelesning og skriv en `innsist? som setter inn et element sist i listen.