INF1070 Oppgaver uke 11 (13.-17.3.2006) (Oppgave 3 er den viktigste denne uken. Oppgave 2 og 4 er svært raske å 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 2 Skriv et lite program i C eller x86-assemblerspråk som avgjør om maskinen bruker little- eller big-endian. Oppgave 3 Ta utgangspunkt i funksjonen `innforst´ fra mandagens forelesning og skriv en `innsist´ som setter inn et element sist i listen. Oppgave 4 Skriv x86-funksjonen int downcase (int c) som omformer en stor bokstav til den tilsvarende lille bokstaven. Små bokstaver skal forbli de samme. Vi antar at parameteren c alltid er en bokstav (dog ikke ß og ÿ). Hint: Det er nok med én instruksjon (foruten de som er med i alle funksjoner for å ta seg av registerinitiering og retur). Hint. Se på en oversikt over tegnsettet vi bruker (for eksempel ~dag/www_docs/ISO8859-table.pdf) og studer bit-mønsteret for for eksempel 'A' og 'a'. Eksempel: Programmet #include extern int downcase (int c); char data[] = { 'a', 'A', 'w', 'Æ', 'Ð' }; int main (void) { int data_len = sizeof(data)/sizeof(char), i; for (i = 0; i < data_len; ++i) printf("downcase('%c') = '%c'\n", data[i], downcase(data[i])); return 0; } skal skrive ut: downcase('a') = 'a' downcase('A') = 'a' downcase('w') = 'w' downcase('Æ') = 'æ' downcase('Ð') = 'ð'