3. Naloge: Podprogrami in pomiki
1. Napišite podprogram paser za 8-bitno paralelno serijsko pretvorbo. Podprogram naj preko registrov sprejme dva parametra:
r0 – število, ki ga pretvarjamo v serijski zapis,
r1 – kazalec na 8 bajtov, v katere se zapišejo posamezni biti.
Po izvajanju morajo biti v osmih zaporednih naslovih, od r1 dalje vrednosti, ki ustrezajo posameznim bitom števila, najprej najbolj pomembni bit.
Za preizkus uporabite vrednost 0b01011011.
mov r0, #0b01011011
ldr r1, =tab8
bl paser
V pomnilniškem bloku tab8 (tabela osmih bajtov) morajo biti po izvajanju naslednje vrednosti: 0, 1, 0, 1, 1, 0, 1, 1
Namig: uporabite zanko (8 obhodov), v kateri v vsakem obhodu iz števila v r0 dobite en bit (preverjanje stanja enega bita) in ga zapišete na naslov, ki je določen z r1.
2. Napišite podprogram ldbigend, ki v r0 prebere 32-bitno število, ki je v pomnilniku zapisano po pravilu debelega konca.
Naslov naj podprogram sprejme preko r1.
s1: .word 0x78563412
ldr r1, =s1
bl ldbigend
V r0 mora podprogram vrniti vrednost 0x12345678.
Namig: nalogo rešite brez uporabe zanke v štirih korakih – v vsakem koraku iz pomnilnika preberite en bajt, in ustrezno pomaknjenega prištejte k nekemu registru.
3. Napišite podprogram stbigend, ki 32-bitno število v pomnilnik zapiše po pravilu debelega konca. Število naj podprogram sprejme preko r0, naslov pa preko r1.
ldr r0, =0x12345678
ldr r1, =s1
bl stbigend
V pomnilniku, kjer je shranjena s1 (32-bitna spremenljivka) morajo biti po izvajanju naslednje vrednosti(šestnajstiško): 0x12, 0x34, 0x56, 0x78
Namig: nalogo rešite brez uporabe zanke v štirih korakih – v vsakem koraku v pomnilnik zapišite en bajt. Skupino osmih bitov, ki jo želite zapisati v pomnilnik, pomaknite v spodnjih 8 bitov nekega registra in uporabite ukaz strb.
4. Napišite podprogram avg8, ki izračuna povprečno vrednost osmih nepredznačenih števil. Števila so podana v tabeli:
tab8: .byte 15,120,112, 34, 55, 23, 3, 6
Podprogram naj v registru r0 dobi kazalec na tabelo. Po izvajanju naj bo v r0 povprečna vrednost števil (46), v r1 pa ostanek pri deljenju z 8.
Namig: v zanki seštejte vsa števila, ne pozabite, deljenje z 8 je pomik za 3 bite v desno. Ostanek je v treh bitih, ki pri pomikanju padejo ven.