los.s 456 B

1234567891011121314151617181920212223242526272829303132333435
  1. .define .los
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. ! d0 : # bytes
  7. ! a0 : source address
  8. ! a1 : return address
  9. .sect .text
  10. .los:
  11. move.l (sp)+, a1
  12. move.l (sp)+, d0
  13. move.l (sp)+, a0
  14. cmp.l #1, d0
  15. bne 1f
  16. clr.l -(sp)
  17. move.b (a0), (3,sp) !1 byte
  18. bra 3f
  19. 1:
  20. cmp.l #2, d0
  21. bne 2f
  22. clr.l -(sp)
  23. move.w (a0), (2,sp) !2 bytes
  24. bra 3f
  25. 2:
  26. add.l d0, a0 !>=4 bytes
  27. asr.l #2, d0
  28. 4: move.l -(a0), -(sp)
  29. sub.l #1, d0
  30. bne 4b
  31. 3:
  32. jmp (a1)
  33. .align 2