INF1070 Oppgaver uke 8 (20-25.2.2008) Oppgave 3 og 4 er viktigst denne uken. Oppgave 1 Skriv C-funksjonen int my_atoib (char s[], int base) som fungerer som `atoi? fra forrige uke, men hvor basen kan variere; den kan v?re fra 2 (bin?re tall) opp til 36 og sifrene kan v?re 0-9 og a-z eller A-Z. Tegn som ikke er lovlige sifre skal ignoreres. Eksempel: my_atoib("2de", 2) = 0 my_atoib("2de", 10) = 2 my_atoib("2de", 12) = 2 my_atoib("2de", 16) = 734 my_atoib("2de", 36) = 3074 my_atoib(" -13", 2) = -1 my_atoib(" -13", 10) = -13 my_atoib(" -13", 12) = -15 my_atoib(" -13", 16) = -19 my_atoib(" -13", 36) = -39 my_atoib(" 1FKZ ", 2) = 1 my_atoib(" 1FKZ ", 10) = 1 my_atoib(" 1FKZ ", 12) = 1 my_atoib(" 1FKZ ", 16) = 31 my_atoib(" 1FKZ ", 36) = 66851 my_atoib("z", 2) = 0 my_atoib("z", 10) = 0 my_atoib("z", 12) = 0 my_atoib("z", 16) = 0 my_atoib("z", 36) = 35 my_atoib("", 2) = 0 my_atoib("", 10) = 0 my_atoib("", 12) = 0 my_atoib("", 16) = 0 my_atoib("", 36) = 0 Oppgave 2 Skriv C-funksjonen char *my_itoa (int v, int base) som tilsvarende genererer sifrene i en gitt base. Eksempel my_itoab(212,2) = "11010100" my_itoab(212,10) = "212" my_itoab(212,12) = "158" my_itoab(212,16) = "d4" my_itoab(212,36) = "5w" my_itoab(-13,2) = "-1101" my_itoab(-13,10) = "-13" my_itoab(-13,12) = "-11" my_itoab(-13,16) = "-d" my_itoab(-13,36) = "-d" my_itoab(35,2) = "100011" my_itoab(35,10) = "35" my_itoab(35,12) = "2b" my_itoab(35,16) = "23" my_itoab(35,36) = "z" my_itoab(123177,2) = "11110000100101001" my_itoab(123177,10) = "123177" my_itoab(123177,12) = "5b349" my_itoab(123177,16) = "1e129" my_itoab(123177,36) = "2n1l" my_itoab(0,2) = "0" my_itoab(0,10) = "0" my_itoab(0,12) = "0" my_itoab(0,16) = "0" my_itoab(0,36) = "0" Oppgave 3 Skriv i assemblerspr?k funksjonen int mul10 (int v) som returnerer 10v. Du f?r bare bruke addl-instruksjoner til ? beregne svaret, og du b?r kunne klare deg med fire addl-er. Hint. Om %eax inneholder verdien v, hva kan du gj?re for at den skal bli 2v? Og om den er 4v, hva skal til for ? f? 5v? Oppgave 4 Hva gj?r denne assemblerfunksjonen? # Synopsis: ?? # C-signatur: int what (int v) .globl what what: movl 4(%esp),%eax movl $0,%ecx subl %eax,%ecx decl %ecx addl $2,%eax decl %ecx addl %ecx,%eax ret