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ð.
- 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?
- [Próf '98]
- 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
- Ú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
- [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
- [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;
}
- 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.