--*- coding: utf-8; -*-- INF1070 L?sningsforslag oppgaver uke 8 2011 Oppgave 1 .globl mul10 mul10: movl 4(%esp),%eax # EAX = v addl %eax,%eax # EAX = 2v addl %eax,%eax # EAX = 4v addl 4(%esp),%eax # EAX = 5v addl %eax,%eax # EAX = 10v ret Oppgave 2 Funksjonen returnerer alltid 0. Den beregner v+2 i EAX 0-v-1-1 = -(v+2) i ECX f?r den summerer de to tallene og f?r 0. Moral: Dokumentasjon er viktig! Oppgave 3 Funksjonen er farlig fordi det ikke er noen sjekk p? om det er plass til den innleste linjen. Hvis brukeren gir en lang linje, vil linjen overskrive andre variable eller til og med programkode. Noen har brukt dette til ? bryte seg inn i datasystemer ved ? oppgi for eksempel passord p? flere tusen tegn. EOF er definert som # define EOF (-1) Funksjonen 'getchar' kan alts? returnere 257 ulike verdier: -1 til 255. Vi kan ikke lagre s? mange verdier i en char. Oppgave 4 #include #include static int digval (char c) { /* Hvilken verdi har sifferet ?c?? */ /* Returner -1 om ikke siffer 0-9, a-z eller A-Z. */ if ('0'<=c && c<='9') return c-'0'; if ('a'<=c && c<='z') return c-'a'+10; if ('A'<=c && c<='Z') return c-'A'+10; return -1; } int my_atoib (char s[], int base) { int sign = 1, ix = 0, res = 0; while (s[ix] && s[ix]!='-' && (digval(s[ix])<0 || digval(s[ix])>=base)) ++ix; if (s[ix] == '-') { sign = -1; ++ix; } while (digval(s[ix])>=0 && digval(s[ix])