gcdHL_DE.z80 562 B

12345678910111213141516171819202122232425262728293031
  1. gcdHL_DE:
  2. ;gcd(HL,DE)->HL
  3. ;binary GCD algorithm
  4. ld a,h \ or l \ ret z
  5. ex de,hl
  6. ld a,h \ or l \ ret z
  7. sbc hl,de
  8. jr z,step4
  9. add hl,de
  10. ld b,1
  11. ld a,e \ or l \ rra \ jr c,+_
  12. inc b
  13. rr h \ rr l
  14. rr d \ rr e
  15. ld a,e \ or l \ rra \ jr nc,$-12
  16. _:
  17. srl h \ rr l \ jr nc,$-4 \ adc hl,hl
  18. ex de,hl
  19. _:
  20. srl h \ rr l \ jr nc,$-4 \ adc hl,hl
  21. xor a \ sbc hl,de
  22. jr z,step4
  23. jr nc,-_ \ sub l \ ld l,a \ sbc a,a \ sub h \ ld h,a
  24. jp -_-1
  25. step4:
  26. ex de,hl
  27. dec b
  28. ret z
  29. add hl,hl
  30. djnz $-1
  31. ret