Advertisement
Guest User

MulHtimesE

a guest
Mar 19th, 2015
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mul_h_e_fixsigned:
  2. ; entrée h, e signed
  3. ; sortie a = h*e/64 signed
  4.  
  5.     ld  a, e
  6.     xor h
  7.     rla
  8.     push    af
  9. ; abs(e), abs(h)
  10.     xor a
  11.     sub e
  12.     ;jr z, mult_quit
  13. ; note : a est utilisé pour le resultat
  14.     ret z
  15.     jp  m,$+4
  16.     ld  e, a
  17.  
  18.     xor a
  19. ; on en profite pour 0' l
  20.     ld  l, a
  21.     sub h
  22.     ;jr z, mult_quit
  23.     ret z
  24.     jp  m, $+4
  25.     ld  h, a
  26.  
  27. mult_h_e_loop:
  28.         ld      d, l
  29.  
  30.         sla     h               ; optimised 1st iteration
  31.         jr      nc, $+3
  32.         ld      l, e
  33.    
  34.         ld b, 7
  35. _loop:
  36.         add     hl, hl          
  37.         jr      nc, $+3
  38.         add     hl, de
  39.    
  40.         djnz    _loop
  41.  
  42. ;divide by 64 (unsigned)
  43. ;note : *4/256, car ici on a au plus 64*64
  44.     add hl, hl
  45.     add hl, hl
  46.     pop af
  47.     ld  a, h
  48.     ret nc
  49. ;negate final result
  50.     neg
  51.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement