Ha 16 biten vagy ennél nagyobb bit szélességen szeretnénk számolni, az utasítás készlet erre is fel lett készítve. Lássuk ezt egy mezei összeadásban.
.include "m16Adef.inc"
.def AH=r17
.def AL=r18
.def BH=r19
.def BL=r20
.org 0x0000
jmp init
.org 0x002A
init:
ldi AH, 0x10
ldi AL, 0x54
ldi BH, 0x22
ldi BL, 0xFE
add BL, AL
adc BH, AH
end:
jmp end
0x1054 + 0x22FE = 0x3352 és ezt fogjuk a BH, és BL regiszter tartalmából is látni.
Stack saját felhasználásra.
.include "m16Adef.inc"
.org 0x0000
jmp init
.org 0x002A
init:
ldi r21, HIGH(RAMEND)
out SPH, r21
ldi r21, LOW(RAMEND)
out SPL, r21
ldi r18, 0x45
push r18
clr r18
pop r18
end:
jmp end
Mint látható a stackben el tudtuk tárolni az adott regiszter tartalmát (többet is módunkban áll). Viszont figyelni kell arra, hogy a stack tulajdonképpen egy LIFO, ami pedig úgy működik, hogy amit először tettünk be, az fog a legutoljára megjelenni. Ha megszakítunk, vagy szubrutint hívunk, akkor ezek visszatérésig nem tudunk az általunk betett tartalmakhoz hozzá férni!!!
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!