INF2270 Oppgaver uke 12 (16.-20.3.2009) (Oppgave 2 er den viktigste denne uken.) Oppgave 1 Funksjonen char *strcpy (char *to, char *from) er standard i C. Den kopierer teksten som 'from' peker p?, over til dit 'to' peker. Returverdien skal v?re pekeren 'to'. Oppgave 1a Skriv denne funksjonen i C. Oppgave 1b Skriv funksjonen som x86-assemblerkode. Oppgave 2 S?kalt ?run-length?-koding er en enkel komprimeringsmetode. Man angir bare en repetisjonsfaktor (0-9 i dette tilfellet) foran de tegn som skal gjentas; se eksemplet nedenfor. Oppgave 2a Skriv C-funksjonen void rlcopy (char *to, char *from) som kopierer en tekst fra 'from' til 'to' men som ekspanderer tegn med et ¨Śn-sifret tall foran. Her er et eksempel p? bruken: #include extern void rlcopy (char *to, char *from); char *data[] = { "", "Abc", "Hu2ra!", "Adj0x0x1?", "11 milliard er 1190" }; int main (void) { char res[200]; int n = sizeof(data)/sizeof(char*), i; for (i = 0; i < n; ++i) { rlcopy(res, data[i]); printf("rlcopy(\"%s\") -> \"%s\"\n", data[i], res); } return 0; } Resultatet at dette er rlcopy("") -> "" rlcopy("Abc") -> "Abc" rlcopy("Hu2ra!") -> "Hurra!" rlcopy("Adj0x0x1?") -> "Adj?" rlcopy("11 milliard er 1190") -> "1 milliard er 1000000000" Oppgave 2b Skriv funksjonen i x86-assemblerkode. Oppgave 3 (ukens n?tt) Det er mulig ? bytte om innholdet av to x86-registre ved ? bruke tre xorl-instruksjoner og uten ? bruke minnet eller andre registre. Skriv instruksjonene som bytter om EAX og EDX. Hint. Hva skjer om vi gj?r XOR to ganger med samme maske?