Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. .DEF rd1l = R2 ; LSB 16-bit-number to be divided делимое младший
  2. .DEF rd1h = R1 ; MSB 16-bit-number to be divided делимое старший
  3. .DEF rd1u = R3 ; interim register
  4. .DEF rd2 = R4 ; 8-bit-number to divide with делитель
  5. .DEF rel = R6 ; LSB result результат младший
  6. .DEF reh = R5 ; MSB result результат старший
  7. div16:
  8. clr rd1u ; clear interim register
  9. clr reh ; clear result (the result registers
  10. clr rel ; are also used to count to 16 for the
  11. inc rel ; division steps, is set to 1 at start)
  12. div8a:
  13. clc ; clear carry-bit
  14. rol rd1l ; rotate the next-upper bit of the number
  15. rol rd1h ; to the interim register (multiply by 2)
  16. rol rd1u
  17. brcs div8b ; a one has rolled left, so subtract
  18. cp rd1u,rd2 ; Division result 1 or 0?
  19. brcs div8c ; jump over subtraction, if smaller
  20. div8b:
  21. sub rd1u,rd2; subtract number to divide with
  22. sec ; set carry-bit, result is a 1
  23. rjmp div8d ; jump to shift of the result bit
  24. div8c:
  25. clc ; clear carry-bit, resulting bit is a 0
  26. div8d:
  27. rol rel ; rotate carry-bit into result registers
  28. rol reh
  29. brcc div8a ; as long as zero rotate out of the result
  30. ; registers: go on with the division loop
  31. ; End of the division reached
  32. RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement