1985-03-18 12:46:51 +00:00
|
|
|
.define .sri2
|
1987-01-28 18:57:04 +00:00
|
|
|
.sect .text
|
|
|
|
.sect .rom
|
|
|
|
.sect .data
|
|
|
|
.sect .bss
|
|
|
|
.sect .text
|
1985-03-18 12:46:51 +00:00
|
|
|
|
|
|
|
! Shift 16 bits signed or unsigned integer right
|
|
|
|
! Expects in a-reg.: 1 if signed integer
|
|
|
|
! 0 if unsigned integer
|
|
|
|
! Expects on stack: number of shifts
|
|
|
|
! number to be shifted
|
|
|
|
! Yields in de-reg.: result
|
|
|
|
|
|
|
|
.sri2: pop h
|
|
|
|
shld .retadr
|
|
|
|
|
|
|
|
pop h !hl = number of shifts
|
|
|
|
pop d !de = number to be shifted
|
|
|
|
mvi h,0
|
|
|
|
ora a
|
|
|
|
jz 1f !jump if unsigned integer
|
|
|
|
mov a,d
|
|
|
|
ral
|
|
|
|
jnc 1f !jump if positive signed integer
|
|
|
|
mvi h,255 !now h=1 if negative signed number, h=0 otherwise.
|
|
|
|
|
|
|
|
1: mov a,l !return 0 or -1 if hl>=16
|
|
|
|
cpi 16
|
|
|
|
jnc 3f
|
|
|
|
|
|
|
|
2: dcr l
|
|
|
|
jm 4f
|
|
|
|
mov a,h
|
|
|
|
rar !set carry bit correct
|
|
|
|
mov a,d
|
|
|
|
rar
|
|
|
|
mov d,a
|
|
|
|
mov a,e
|
|
|
|
rar
|
|
|
|
mov e,a
|
|
|
|
jmp 2b
|
|
|
|
|
|
|
|
3: mov d,h
|
|
|
|
mov e,h
|
|
|
|
|
|
|
|
4: lhld .retadr
|
|
|
|
pchl
|