09.71.35 Stırikerfi I

Dæmi 5


  1. Útskıriğ nákvæmlega hvağ gerist í 8086-forritsbútinum hér ağ neğan (hvert er lokagildi BX?)
    		xor	bx, bx
    	aftur:	add	bl, al
    		addc	bh, 0
    		inc	byte ptr [cs:smb+1]
    	smb:	cmp	al, 0
    		ja	aftur
    

  2. Útskıriğ hvağ gerist í eftirfarandi 8086-smalamálsbútum.
                  mov cl, 0                 mov cx, ax
            lyk:  mov bx, ax          upp:  shr ax, 1
                  cmp bx, -1                cmp ax, 0
                  je ut                     je ut
                  inc bx                    sub cx, ax
                  or ax, bx                 jmp upp
                  inc cl              ut:
                  jmp lyk
            ut:
    
                  Bútur I                   Bútur II
                 ---------                 ----------
    
    Hvağa gildi hafa gistun ax og cx şegar lykkjurnar hætta? Beriğ saman ağferğirnar sem notağar eru í bútunum tveimur.

  3. Skrifiğ 8086-smalamálsfall sem reiknar út fall Ackermanns og er kallanlegt frá Borland C++. Fall Ackermanns er skilgreint á eftirfarandi hátt:
                             / n+1                ef m=0
                  A(m, n) = <  A(m-1, 1)          ef n=0
                             \ A(m-1, A(m, n-1))  annars
    

  4. Hér ağ neğan er forrit í 8086 smalamáli. Hvert er lokagildi gistisins CL og hvernig er şağ gildi almennt háğ upphafsgildi AX?
                      mov   ax, 0100010010110010b
                      sub   cl, cl
            Lykkja:   cmp   ax, 0
                      je    Ut
                      mov   bx, ax
                      neg   bx
                      and   bx, ax
                      xor   ax, bx
                      inc   cl
                      jmp   Lykkja
            Ut:
    

  5. Şağ er til ağferğ sem kallast "Duff's Device" til ağ afrúlla lykkjur. Hér ağ neğan er şessi tækni notuğ í C til ağ afrita vektorinn from yfir í vektorinn to og breytan count segir hversu mörg stök eigi ağ afrita. Lısiğ şví hvernig şessi tækni vinnur og sıniğ hvernig şetta væri gert í 8086 smalamáli.
    	n = (count + 7) / 8;  	/* count > 0 gefiğ */
    	switch (count % 8)
    	{
    	case 0:	   do { *to++ = *from++;
    	case 7:		*to++ = *from++;
    	case 6:		*to++ = *from++;
    	case 5:		*to++ = *from++;
    	case 4:		*to++ = *from++;
    	case 3:		*to++ = *from++;
    	case 2:		*to++ = *from++;
    	case 1:		*to++ = *from++;
    		      } while (--n > 0);
    	}
    

Skiliğ şessum dæmum şriğjudaginn 12. nóvember.
hh@rhi.hi.is, 5. nóvember, 1996.