123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- .sect .text; .sect .rom; .sect .data; .sect .bss
- .sect .text
- .define .rmi4
- yl=6
- yh=8
- xl=10
- xh=12
- .rmi4:
- push si
- push di
- mov si,sp ! copy of sp
- mov bx,yl(si)
- mov ax,yh(si)
- cwd
- cmp dx,ax
- jne 7f
- and dx,dx
- jge 1f
- neg bx
- je 7f
- 1:
- xor dx,dx
- mov cx,xl(si)
- mov ax,xh(si)
- and ax,ax
- jge 2f
- neg ax
- neg cx
- sbb ax,dx
- 2:
- div bx
- xchg ax,cx
- div bx ! dx= result(low), 0=result(high)
- xor bx,bx
- 9:
- cmp xh(si),0
- jge 1f
- neg bx
- neg dx
- sbb bx,0
- 1:
- ! bx is high order result
- ! dx is low order result
- mov ax,dx
- mov dx,bx ! result in ax/dx
- pop di
- pop si
- ret 8
- 7:
- mov di,ax
- xor bx,bx
- and di,di
- jge 1f
- neg di
- neg yl(si)
- sbb di,bx
- 1:
- mov ax,xl(si)
- mov dx,xh(si)
- and dx,dx
- jge 1f
- neg dx
- neg ax
- sbb dx,bx
- 1:
- mov cx,16
- 1:
- shl ax,1
- rcl dx,1
- rcl bx,1
- cmp di,bx
- ja 3f
- jb 2f
- cmp yl(si),dx
- jbe 2f
- 3:
- loop 1b
- ! dx=result(low), bx=result(high)
- jmp 9b
- 2:
- sub dx,yl(si)
- sbb bx,di
- inc ax
- loop 1b
- 1:
- ! dx=result(low), bx=result(high)
- jmp 9b
|