Øvelser i kapitel 3, "DAVID"


Øv 3.1:
Indtast maskinkoden på symbolsk form, idet "Lager"-vinduet sættes til at vise "Ass. koder".
Test programmet.
Løsning:     3-1.ddc


Øv 3.2:
Rens WinDavid med "Filer", "Ny".
Vælg "Værktøjer", "1-pass assembler". Ryk Assembler-vinduet, så Lager-vinduet kan ses samtidigt. Træk forneden i Lager-vinduet, så du kan se fra celle 0 til 31.
Indtast assemblerkoden i "Kildetekst"-området. Brug tabulator til indrykning, så koden står fint under hinanden.
Gem filen (file-ekstentsion er ".dvd").
Assembler med "Step", og følg med i, hvordan assembleren finder hvilke variable, der er tale om og placerer disse fra celle 31 og bagud. Ligeledes finder den, hvilke etiketter (labels), der er brugt og hvilken værdi de har. Assembleren fylder instruktionerne ind i de rette lagerceller.
Luk Assembler-vinduet, og slet alt incl. lager. Åben så "1-pass assembler" og hent filen igen. Få nu assembleret i et hug ved at bruge knappen "Assemb.". Luk Assembler-vinduet, og kør programmet. Det skullle gerne virke som i øvelse 2.5.
Løsning:     3-2.dvd
Rens det hele (lager osv.). Nu skal du så tilføje en ny linie (MULT t) i koden, gemme den, assemblere og teste.
Løsning:     3-2-2.dvd


Øv 3.3:
Indtast koden i "1-pass assembler".
Assembler med "Step"-knappen. Læg mærke til, hvordan placeringen og værdien af variablen "k" først kendes senere, således at lagercelle 3 først bliver korrekt til sidst!
Gem filen, og kør programmet. Det beregner og udskriver: y = x2 + k , hvor "x" er brugerens indtastede værdi på skærmen, og "k" er 5 ifølge koden.
Løsning:     3-3.dvd
Udvid programmet som vist i opgaven. Gem den og test den!
Løsning:     3-3-2.dvd


Øv 3.4: ((a-b)/(b+5))
Indtast koden i "1-pass assembler".
Test programmet - husk at der er tale om heltalsdivision, dvs. resten smides væk).
Løsning:     3-4.dvd


Øv 3.5:
Udbyg koden fra øv 3.4.
Test programmet.
Løsning:     3-5.dvd


Øv 3.6: (kvadrattal 1,4,9,16,125)
Indtast koden i "1-pass assembler".
Test programmet.
Prøv at ændre det, så der f.eks. udskrives de 8 første kvadrattal.
Løsning:     3-6.dvd


Øv 3.7: (q går op i p?)
Indtast koden i "1-pass assembler".
Test programmet.
Løsning:     3-7.dvd


Øv 3.8: (PASCAL-kode)
Indtast koden i "1-pass assembler".
Test programmet.
Løsning:     3-8.dvd


Øv 3.9: (numerisk værdi)
Et tal skal have ændret fortegn, hvis tallet er negativt.
Indtast koden i "1-pass assembler".
Test programmet.
Løsning:     3-9.dvd
Udvid programmet, så det virker med 2 tal.
Løsning:     3-9-2.dvd


Øv 3.10: (primtal?)
Indtast koden i "1-pass assembler".
Test programmet.
Løsning:     3-10.dvd


Øv 3.11: (Bootstrap-program)
Dette eksempel er meget vigtigt. Det forklarer, hvordan maskinen kan indlæse og køre et program!
Indtast koden i "1-pass assembler".
Løsning:     3-11.dvd

Indtast så følgende kode (decimalt) for at teste bootstrap'en:

DECIMAL MASKINKODE SYMBOLSK MASINKODE
0824
0825
0224
0425
0326
0926
0100
(9999)
IND 24
IND 25
HENT 24
ADD 25
GEM 26
UD 26
STOP

Fungerer ikke, hvis det indlæste program anvender lageradresser, som er i konflikt med sig selv!
For at se det, så indtast følgende kode fra øvelse 2.4:

DECIMAL MASKINKODE SYMBOLSK MASINKODE
0820
0821
0220
0421
0322
0922
0100
(9999)
IND 20
IND 21
HENT 20
ADD 21
GEM 22
UD 22
STOP