sli4.s 580 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. .define .sli4
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! Shift 32 bits integer left
  8. ! Expects on stack: number of shifts
  9. ! number to be shifted
  10. ! Yields on stack: result
  11. .sli4:
  12. pop h
  13. shld .retadr
  14. mov h,b
  15. mov l,c
  16. shld .bcreg
  17. pop b !number of shifts
  18. pop d !low-order bytes of number to be shifted
  19. pop h !high-order bytes
  20. mov a,b !if bc>=32 return 0
  21. ora a
  22. jnz 2f
  23. mov a,c
  24. cpi 32
  25. jnc 2f
  26. 1: dcr c
  27. jm 3f
  28. dad h
  29. xchg
  30. dad h
  31. xchg
  32. jnc 1b
  33. inx h
  34. jmp 1b
  35. 2: lxi h,0
  36. lxi d,0
  37. 3: push h
  38. push d
  39. lhld .bcreg
  40. mov b,h
  41. mov c,l
  42. lhld .retadr
  43. pchl