--*- coding: utf-8; -*-- INF2270 Løsningsforslag oppgaver uke 10 2013 Oppgave 1 movl $0,%eax # 1 subl %eax,%eax # 2 imull $0,%eax # 3 andl $0,%eax # 4 xorl %eax,%eax # 5 Alle bortsett fra #1 endrer flaggene; noen ganger er dette av betydning. (For spesielt interesserte: Man kunne tro at sall $32,%eax shrl $32,%eax også ville fungert, men prosessoren gjør en AND 0x1F med antallet skift før start, så antallet utførte skiftinger kan ikke bli høyere enn 31.) Oppgave 2 orb $0x3,%al # 1 orw $0x3,%ax # 2 orl $0x3,%eax # 3 andb $0x3f,%al # 4 andw $0x3fff,%ax # 5 andl $0x3fffffff,%eax# 6 cmpb $0,%al # 7 jz Null jmp Annet andb $0xc0,%al # 8 cmpb $0x80,%al je Ja jmp Nei Oppgave 3 Vi kan beregne (0-a)-b som gir samme resultat. .globl f2 # Navn: f2 # Symopsis: Beregner formelen (-a)+(-b). # C-signatur: int f2 (int a, int b) # Registre: EAX - resultatet f2: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. movl $0,%eax # Beregn 0 subl 8(%esp),%eax # - a subl 12(%esp),%eax # - b. popl %ebp # Standard ret # retur. Oppgave 4 Den returnerer nederste byte av parameteren a. Testprogrammet skriver ut f(0x12345678) = 0x00000078