--*- coding: utf-8; -*-- INF2270 L?sningsforslag til oppgaver uke 13 2012 Oppgave 1 .globl sumpar sumpar: pushl %ebp movl %esp,%ebp leal 8(%ebp),%edx movl $0,%eax s_loop: cmpl $0,(%edx) jz s_exit addl (%edx),%eax addl $4,%edx jmp s_loop s_exit: popl %ebp ret Oppgave 2 .globl setdata # Navn: setdata # Synopsis: Setter en verdi inn i bit-arrayen 'data'. # C-signatur: void setdata (unsigned int data[], int inx, int verdi) # Registre: EAX: 澳门葡京手机版app下载n til 'data' # ECX: Indeksen (til aktuelle int) # EDX: Bit-nummeret i aktuelle int setdata: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. movl 8(%ebp),%eax # EAX = &data[0]. movl 12(%ebp),%ecx # ECX = inx shrl $5,%ecx # / 32. movl 12(%ebp),%edx # EDX = inx andl $0x1f,%edx # % 32. testl $0x1,16(%ebp) # Test bit 0 i 'verdi'. jz set0 # Hvis det er 1, btsl %edx,0(%eax,%ecx,4) # sett riktig bit til 1 jmp setx # men hvis det er 0, set0: btrl %edx,0(%eax,%ecx,4) # sett riktig bit til 0. setx: popl %ebp # Retur. ret # .globl getdata # Navn: getdata # Synopsis: Henter en verdi i bit-arrayen 'data'. # C-signatur: int getdata(unsigned int data[], int inx) # Registre: EAX: 澳门葡京手机版app下载n til 'data' # ECX: Indeksen (til aktuelle int) # EDX: Bit-nummeret i aktuelle int getdata: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. movl 8(%ebp),%eax # EAX = &data[0]. movl 12(%ebp),%ecx # ECX = inx shrl $5,%ecx # / 32. movl 12(%ebp),%edx # EDX = inx andl $0x1f,%edx # % 32. btl %edx,0(%eax,%ecx,4) # Test bit-et (svar i C-flagg) movl $0,%eax # EAX = 0 adcl $0,%eax # + 0 + C. popl %ebp # Retur. ret #