los.s 459 B

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