09.12.35 Uppbygging tölva

Forritunarverkefni 4


Í şetta sinn eigiğ şiğ ağ leysa nokkur smærri forritunarverkefni í smalamáli. Dæmin eru flest gömul prófdæmi og eru lısindi fyrir şá smalamálsforritun sem şiğ şurfiğ ağ geta gert á prófi í şessu námskeiği.

Á prófinu hafiğ şiğ ekki ağgang ağ tölvu, şannig ağ şiğ skuluğ reyna fyrst ağ leysa dæmin á blaği, áğur en şiğ sláiğ şau inn og prófiğ.

  1. Skoğiğ eftirfarandi 8086-smalamálsbút:
                    clc
            upp:    mov     ax, [si]
                    adc     [di], ax
                    inc     si
                    inc     si
                    inc     di
                    inc     di
            loop    upp
      
    Svariğ eftirfarandi spurningum um forritsbútinn:

    a) Lısiğ hvağ búturinn gerir (meğ orğum eğa sauğakóda).

    b) Hvers vegna er skipunin inc notuğ til ağ hækka si og di, í stağ şess ağ leggja 2 viğ meğ skipuninni add?

  2. [Próf '98]
    1. Hér ağ neğan er forritsbútur til ağ afrita CX bæti frá DS:SI til ES:DI. Útskıriğ nákvæmlega tilgang hverrar skipunnar
      	shr       cx, 1
      	rep movsw
      	adc       cx, cx
      	rep movsb
         
    2. Útskıriğ hvağ eftirfarandi forritsbútur gerir. (Vísbending: Heildarstærğ skipananna frá L1 niğur ağ enda bútsins er 20 bæti)
      		lea	di, L1
      	L1:	mov	cx, 10
      		mov	bx, di
      	L2:	mov	ax, [cs:di]
      		mov	[cs:di+100], ax
      		add	di, 2
      		loop	L2
      		add	di, 80
      		jmp	bx
         

  3. [Próf 2000] Útskıriğ hvağ eftirfarandi 8086-forritsbútur gerir. Inntakiğ er í BX og úttakiğ í AX.
    		xor	ax, ax
    		mov	cx, 16
    	lyk:	ror	bx, 1
    		rcl	ax, 1
    		loop	lyk
      

  4. [Próf 2000] Skrifiğ for-lykkjuna í eftirfarandi C++ fall meğ şví ağ nota "inline" IA-32 smalamál í Visual C++. Ekki şarf ağ umrita haus fallsins, skilgreiningar, inntaksskipunina eğa skilaskipunina.
    	double fall( ) {
    	    double x;
    	
    	    cin >> x; 
    	    for(int i=0; i<100 && x<100.0; i++)
    	        x = 1.3 * x;
    	
    	    return x;
    	} 
      

  5. Skrifiğ eftirfarandi forritsbút í IA-32 smalamáli meğ fleytitöluskipunum, şannig ağ kódinn gæti fariğ "inline" í C++ forrit. Geriğ ráğ fyrir ağ a og b séu skilgreindar double-breytur:
    	if ( a <= 10.0 )
    	    b = 5.0*a;
    	else
    	    b = b - a/2.0;
      

Skiliğ svörum og útprentunum í hólf Páls í VR-II fimmtudaginn 8. nóvember.

hh (hja) hi.is, 31. október, 2001.