--*- coding: utf-8; -*-- INF2270 Løsningsforslag oppgaver uke 12 2011 Oppgave 1 .globl arrayzeroes # Navn: arrayzeroes. # Synopsis: Finnet antall 0-er i en vektor. # C-signatur: int arrayzeroes (short a[], int n). # Registre: %eax: antallet så langt # %ecx: indeks til a (teller ned) # %edx: adressen til a arrayzeroes: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. movl $0,%eax # ant = 0. movl 8(%ebp),%edx # a. movl 12(%ebp),%ecx # ix = n. a_loop: decl %ecx # while (--ix js a_exit # >=0) { cmpw $0,(%edx,%ecx,2)# if (a[ix] jnz a_loop # ==0) incl %eax # ++ant; jmp a_loop # } a_exit: popl %ebp # return ant. ret # Oppgave 2 Feilen er at de to parametrene har omvendt rekkefølge i funksjonen og testprogrammet. Oppgave 3 Navnene (opprettet av strdup) blir ikke fjernet. Feilen rettes ved å skyte inn en linje i rydd_opp: void rydd_opp (struct node *p) { if (p->v) rydd_opp(p->v); if (p->h) rydd_opp(p->h); free(p->navn); if (p != &topp) free(p); }