sli2.s 454 B

123456789101112131415161718192021222324252627282930313233
  1. .define .sli2
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! Shift 16 bits integer left
  8. ! Expects on stack: number of shifts
  9. ! number to be shifted
  10. ! Yields in de-reg: result
  11. .sli2: pop h
  12. shld .retadr
  13. pop d !de = number of shifts
  14. pop h !hl= number to be shifted
  15. mov a,d !if de>15 return zero
  16. ora a
  17. jnz 2f
  18. mov a,e
  19. cpi 16
  20. jnc 2f
  21. 1: dcr e
  22. jm 3f
  23. dad h
  24. jmp 1b
  25. 2: lxi h,0
  26. 3: xchg !result in de-registers
  27. lhld .retadr
  28. pchl