Processen en processoren/Planning/Practica/Practicum 1/voorbeeld
De onderstaande programma's kun je gebruiken om de practicum-processor te testen. Heb je ook een voorbeeldprogramma? Voeg het dan onderaan deze pagina toe.
Als je de programma's buiten het vak Systeemarchitectuur 1 wilt gebruiken, vraag de betreffende auteur om toestemming.
Inhoud
Hello, world
Dit programma print "Hello, world!" op het scherm.
© 2010 David N. Jansen, Radboud Universiteit Nijmegen.
.ORG 0 MOVIFT R0, hello # hello is zo klein dat LOADHI niet nodig is. loop: READ R1, [R0] OR R1, R1 JZ end # als het gelezen woord 0 is, dan is het einde van de string bereikt. WRITE [-1], R1 ADDIFT R0, 1 JT loop end: HALT hello: .DATA "Hello, world!\n", 0
Dit programma als downloadbaar bestand.
Het geassembleerde programma als .rom-bestand.
Test de vlaggen en het RAM
Dit programma voert twee eenvoudige berekeningen uit en test of de vlaggen dan goed staan. Het schrijft ook een gegeven in het RAM en leest het terug.
© 2011 David N. Jansen, Radboud Universiteit Nijmegen.
.ORG 0 # plaats het programma op adres 0 LOADFLAG C # zet de carry-vlag ADDC R1, ~R1 # tel ~R1+1 bij R1 op, dat is: trek R1 van R1 af ADDIFT R1, 1 # R1 was 0, wordt 1 MOVIFT R2, 2 ADDC R2, R1 # carry-vlag was nog gezet van vorige additie. R2 wordt 4 LOADHI R7,0xff0 JZ error # test of de vlaggen goed werken JO error JN error JC error WRITE [R7], R2 # sla R2 op in het RAM READ R5, [R7] # en lees het weer terug LOADFLAG C ADDC R5, ~R2 # trek R2 van de gelezen waarde af. Het resultaat moet 0 zijn. JNZ error # test of de vlaggen goed gezet zijn. JO error JNC error JN error LOADHI R4, HI 'y' # voer de letter 'y' uit -- test is geslaagd ADDIFT R4, LO 'y' WRITE [-1], R4 JT end error: LOADHI R4, HI 'n' # voer de letter 'n' uit -- test is gefaald ADDIFT R4, LO 'n' WRITE [-1], R4 end: HALT # stop
Test zero-vlag
Dit programma print 'y' of 'n' op het scherm, afhankelijk ervan of de zero-vlag door OR gezet wordt of niet. Als jouw processor goed werkt, print het programma 'y'. © 2009 Wouter Geraedts. Aangepast aan de PenP-2011-practicum-assembly door David N. Jansen.
.ORG 0 MOVIFT R1, 0 OR R1, R1 JZ succes LOADHI R0, HI 'n' ADDIFT R0, LO 'n' WRITE [-1], R0 HALT succes: LOADHI R0, HI 'y' ADDIFT R0, LO 'y' WRITE [-1], R0 HALT
Test rotatie-werk vlaggen
© 2011 Patrick Uiterwijk, Radboud Universiteit Nijmegen.
.ORG 0 # Zet programma op plek 0 MOVIFT R0, 0 # Zet 0 in R0 ROL R0, 2 # Roteert 0 met 2 posities JNZ error # Het zou nog steeds 0 moeten zijn MOVIFT R0, 1 # Zet 1 in R0 ROL R0, 15 # Roteert 1 met 15 posities, zou nu 10...0 moeten zijn JNN error # MSB moet 1 zijn JNO error # MSB moet veranderd zijn (van 0 naar 1) ROL R0, 1 # Roteer door naar 00...01 JNC error # LSB moet 1 zijn LOADFLAG # Carry moet weer op 0 gezet worden, anders wordt die er door ADDC net zo hard weer bijgeteld ADDC R0, -1 # R0 moet nu 1 zijn JNZ error # R0 moet na optellen van -1 dus 0 zijn JT succes # We zijn door deze tests heen! succes: LOADHI R0, HI 'y' # Schrijf de MSB van 'y' naar R0 ADDIFT R0, LO 'y' # Schrijf de LSB van 'y' naar R0 WRITE [-1], R0 # Schrijf R0 naar Output HALT # Stop error: LOADHI R0, HI 'n' # Schrijf de MSB van 'n' naar R0 ADDIFT R0, LO 'n' # Schrijf de LSB van 'n' naar R0 WRITE [-1], R0 # Schrijf R0 naar Output HALT # Stop
Bereken de wortel
Dit programma berekent de (naar beneden afgeronde) wortel van het getal in R0. Het antwoord komt in R2 te staan. De uitkomst wordt berekend door middel van de verschilrij van n2 (1, 3, 5, 7, 9, ...). © 2011 Rob ten Berge.
.ORG 0 OR R0, R0 MOVIFL R2, -1 # wortel van een negatief getal: -1 om fout aan te geven. JL end MOVIFT R2, 0 # resultaat MOVIFT R1, -1 # eerste element van de verschilrij loop: LOADFLAG ADDC R0, R1 ADDIFGE R2, 1 ADDIFG R1, -2 # R1 wordt het volgende element van de verschilrij JG loop end: HALT