Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mul_h_e_fixsigned:
- ; entrée h, e signed
- ; sortie a = h*e/64 signed
- ld a, e
- xor h
- rla
- push af
- ; abs(e), abs(h)
- xor a
- sub e
- ;jr z, mult_quit
- ; note : a est utilisé pour le resultat
- ret z
- jp m,$+4
- ld e, a
- xor a
- ; on en profite pour 0' l
- ld l, a
- sub h
- ;jr z, mult_quit
- ret z
- jp m, $+4
- ld h, a
- mult_h_e_loop:
- ld d, l
- sla h ; optimised 1st iteration
- jr nc, $+3
- ld l, e
- ld b, 7
- _loop:
- add hl, hl
- jr nc, $+3
- add hl, de
- djnz _loop
- ;divide by 64 (unsigned)
- ;note : *4/256, car ici on a au plus 64*64
- add hl, hl
- add hl, hl
- pop af
- ld a, h
- ret nc
- ;negate final result
- neg
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement