dvi2.s 546 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. .define .dvi2
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! 16-bit signed division
  8. ! parameters:
  9. ! bc: divisor
  10. ! de: dividend
  11. ! de: result (out)
  12. ! no check on overflow
  13. .dvi2:
  14. xor a
  15. ld h,a
  16. ld l,a
  17. sbc hl,bc
  18. jp m,1f
  19. ld b,h
  20. ld c,l
  21. cpl
  22. 1:
  23. or a
  24. ld hl,0
  25. sbc hl,de
  26. jp m,1f
  27. ex de,hl
  28. cpl
  29. 1:
  30. push af
  31. ld hl,0
  32. ld a,16
  33. 0:
  34. add hl,hl
  35. ex de,hl
  36. add hl,hl
  37. ex de,hl
  38. jr nc,1f
  39. inc hl
  40. or a
  41. 1:
  42. sbc hl,bc
  43. inc de
  44. jp p,2f
  45. add hl,bc
  46. dec de
  47. 2:
  48. dec a
  49. jr nz,0b
  50. pop af
  51. or a
  52. jr z,1f
  53. ld hl,0
  54. sbc hl,de
  55. ex de,hl
  56. 1:
  57. ret