--*- coding: utf-8; -*-- INF2270 L?sningsforslag til oppgaver uke 16 2013 Oppgave 1 .globl x2 # Navn: x2. # Synopsis: Dobler en float-verdi. # Signatur i C: float x2 (float x). x2: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. flds 8(%ebp) # Legg x p? x87-stakken. fld %st(0) # Legg p? en kopi. faddp # Add¨Śr de to. # Svaret ligger n? p? x87-stakken. popl %ebp # Standard ret # retur. Oppgave 2 ? doble et flyt-tall vil si ? ?ke eksponenten med 1. Men tallet 0.0 m? ikke endres. .globl x2 # Navn: x2. # Synopsis: Dobler en float-verdi. # Signatur i C: void x2 (float *px) # Teknikk: ?k eksponenten med 1. # Unntak: Tallet 0.0 skal ikke endres. x2: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. movl 8(%ebp),%edx # Hent adressen til float-en. cmpl $0,(%edx) # Hvis float-en er 0, je x2_x # skal ikke noe endres. addl $0x00800000,(%edx) # ?k eksponenten med 1. x2_x: popl %ebp # Standard ret #retur. Oppgave 3 4a. Parameteren 0x19 lagres slik i EAX: 00000000 00000000 00000000 00011001 S? roteres AL (og _bare_ det) 3 posisjoner mot venstre: 00000000 00000000 00000000 11001000 s? svaret blir c8, alts? alternativ 4. 4b. F?lgende skjer: 1. EAX xor EAX gir EAX = 0x00000000 2. EAX xor 0x123456 gir EAX = 0x00123456 3. EAX and 0xffff gir EAX = 0x00003456 4. EAX or 0x11111111 gir EAX = 0x11113557 s? riktig svar er alternativ 6. 4d. f4 beregner 1.0 + 1.0 og legger svaret (som en float) i f4val; dette (dvs en int bit-m?nsteret til 2.0) er resultatverdien. Det lagres slik: + eksponent mantisse 0 10000000 00000000000000000000000 s? alternativ 5 er rett.