41 lines
591 B
ArmAsm
41 lines
591 B
ArmAsm
|
.define .exg
|
||
|
|
||
|
! Exchange top bytes of stack
|
||
|
! Expects in de-registers the number of bytes to be exchanged.
|
||
|
|
||
|
.exg: mov a,e
|
||
|
rar
|
||
|
cc eoddz !trap if numer of bytes is odd
|
||
|
pop h
|
||
|
shld .retadr
|
||
|
mov h,b
|
||
|
mov l,c
|
||
|
shld .bcreg
|
||
|
|
||
|
lxi h,0
|
||
|
dad sp
|
||
|
mov b,h
|
||
|
mov c,l !now bc points to first operand
|
||
|
dad d !and hl to the second
|
||
|
push d !place number of bytes on top of stack
|
||
|
1: mov d,m
|
||
|
ldax b
|
||
|
mov m,a
|
||
|
mov a,d
|
||
|
stax b
|
||
|
xthl !caused by a lack of registers
|
||
|
dcx h !decrement top of stack
|
||
|
mov a,h
|
||
|
ora l
|
||
|
xthl
|
||
|
inx h
|
||
|
inx b
|
||
|
jnz 1b
|
||
|
|
||
|
pop d
|
||
|
lhld .bcreg
|
||
|
mov b,h
|
||
|
mov c,l
|
||
|
lhld .retadr
|
||
|
pchl
|