.define .sri4 ! Shift 32 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 on stack: result .sri4: pop h shld .retadr mov h,b mov l,c shld .bcreg pop b !number of shifts pop d !low-order bytes of number to be shifted pop h !high-order bytes mvi b,0 ora a jz 1f !jump if unsigned integer mov a,h ral jnc 1f !jump if positive signed integer mvi b,255 1: mov a,c cpi 32 jnc 3f 2: dcr c jm 4f mov a,b rar mov a,h rar mov h,a mov a,l rar mov l,a mov a,d rar mov d,a mov a,e rar mov e,a jmp 2b 3: mov d,b mov e,b mov h,b mov l,b 4: push h push d lhld .bcreg mov b,h mov c,l lhld .retadr pchl