--*- coding: utf-8; -*-- INF2270 Oppgaver uke 10 (4.-8.3.2013) Oppgave 1 Skriv minst tre ulike instruksjoner som kan brukes til ? sette %EAX-registeret til 0. Hint. Tenk ogs? p? maske- og skift-operasjoner. Oppgave 2 Skriv x86-instruksjonssekvenser for ? 1. Sette (dvs sette til 1) de to nederste bit-ene i %AL 2. Sette de to nederste bit-ene i %AX 3. Sette de to nederste bit-ene i %EAX 4. Nulle ut de to ?verste bit-ene i %AL 5. Nulle ut de to ?verste bit-ene i %AX 6. Nulle ut de to ?verste bit-ene i %EAX 7. Sjekke om verdien i %AL er 0; hvis den er det, skal koden hoppe til Null, hvis ikke til Annet. 8. Sjekke om de to ?verste bit-ene i %AL er 1 og 0; hvis de er det, skal koden hoppe til Ja, hvis ikke til Nei. Oppgave 3 Oversett funksjonen int f2 (int a, int b) { return (-a) + (-b); } til x86-assemblerkode ved ? bruke kun disse instruksjonene: movl, addl, subl, incl, decl og ret. Hint: Er det mulig ? forenkle uttrykket? Oppgave 4 Hva gj?r denne funksjonen? .globl f f: pushl %ebp movl %esp,%ebp movl $0,%eax movl 8(%esp),%edx movb %dl,%al popl %ebp ret Her er et testprogram: #include extern int f (int a); int main (void) { unsigned int v = 0x12345678; printf("f(0x%08x) = 0x%08x\n", v, f(v)); }