rmu4.s 844 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. .sect .text; .sect .rom; .sect .data; .sect .bss
  2. .sect .text
  3. .define .rmu4
  4. yl=6
  5. yh=8
  6. xl=10
  7. xh=12
  8. .rmu4:
  9. push si
  10. push di
  11. mov si,sp ! copy of sp
  12. mov bx,yl(si)
  13. mov ax,yh(si)
  14. or ax,ax
  15. jne 7f
  16. 1:
  17. xor dx,dx
  18. mov cx,xl(si)
  19. mov ax,xh(si)
  20. 2:
  21. div bx
  22. xchg ax,cx
  23. div bx
  24. xor bx,bx
  25. 9:
  26. ! bx is high order result
  27. ! dx is low order result
  28. mov ax,dx
  29. mov dx,bx
  30. pop di
  31. pop si
  32. ret 8 ! result in ax/dx
  33. 7:
  34. mov di,ax
  35. xor bx,bx
  36. mov ax,xl(si)
  37. mov dx,xh(si)
  38. mov cx,16
  39. 1:
  40. shl ax,1
  41. rcl dx,1
  42. rcl bx,1
  43. cmp di,bx
  44. ja 3f
  45. jb 2f
  46. cmp yl(si),dx
  47. jbe 2f
  48. 3:
  49. loop 1b
  50. ! dx=result(low), bx=result(high)
  51. jmp 9b
  52. 2:
  53. sub dx,yl(si)
  54. sbb bx,di
  55. inc ax
  56. loop 1b
  57. 1:
  58. ! dx=result(low), bx=result(high)
  59. jmp 9b