Denne uken jobber vi med noen enkle assembler-oppgaver for å komme igang og bli kjent med debuggeren. Les ASSEMBLER-siden for å komme i gang.
A22 Oversett følgende høynivåkode til et assembler-program:
int sum,i,j ,k = 5;
i = 0;
j = 2;
i++;
sum = i + j + k;
Ta gjerne utgangspunkt i oblig2.asm eller hallo.asm programmet. Pass på at du må skrive inn programmet i en editor som leverer ren ASCII-kode; DOS-editoren edit (skriv edit fra kommandolinjen) gjør det. Kjør programmet i debuggeren (td) og sjekk at registere og variable får de riktige verdiene (velg registers og variables fra view menyen).
A23 Oversett følgende høynivåkode til et assembler-program:
int a,b,c;
a = 5121;
b = 1300;
c = a*b;
Se på side 30 i kompendiet hvordan MUL virker. Hint: Prøv å finne ut fra avsnittet "Peker operatoren" på side 17/18 i kompendiet, hvordan man legger to 16-bits registere inn i en 32-bits variabel.
A24 Lag et assembler program som avgjør om A: 221 er delelig med 17 og om B: 39483 er delelig med 121. I hvert tilfelle skal programmet skrive ut en linje til skjermen som sier om divisjonene A og B gikk opp. Finn først ut hvordan DIV virker ved å lese i kompendiet.
A25
Deklarer en streng 'Dette er starten',13,10,'$' og 4 variable var1,
var2, var3, var4 som skal initialiseres til henholdsvis 11h,1234h, 12345678h
og 1234567890123456h. Deklarer til slutt en streng 'Her er slutten.' Gjør
innstruksjonene:
mov var1,5
mov var2,'H'
og skriv ut de to strengene. Kjør programmet i debuggeren og
velg view/dump fra menyen for å se på RAM.
a) Hva ligger i byte nummer 17 i datasegmentet rett etter at
variabelene er deklarert ?
b) Hva er adressen til denne byte'n ? (ds:0000 er adressen til
byte nr. 0 i datasegmentet, ds:0001 til nr. 1 etc.)
c) Hva ligger i byte nummer17 i datasegmentet etter at programmet
er ferdig ?
d) Forklar hvordan variable som er større enn en byte
blir lagret i minnet.