loi.s 600 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. .sect .text; .sect .rom; .sect .data; .sect .bss
  2. .sect .text
  3. .define .loi
  4. .define .los
  5. ! #bytes in ecx
  6. ! address in ebx
  7. ! save esi/edi. they might be register variables
  8. .los:
  9. pop edx
  10. mov eax,ecx
  11. sar ecx,1
  12. jnb 1f
  13. movsxb eax,(ebx)
  14. push eax
  15. jmp edx
  16. 1:
  17. sar ecx,1
  18. jnb 1f
  19. movsx eax,(ebx)
  20. push eax
  21. jmp edx
  22. 1:
  23. push edx
  24. mov edx,esi
  25. mov esi,ebx
  26. pop ebx
  27. sub esp,eax
  28. jmp 1f
  29. .loi:
  30. ! only called with size >= 4
  31. mov edx,esi
  32. mov esi,ebx
  33. pop ebx
  34. sub esp,ecx
  35. sar ecx,2
  36. 1:
  37. mov eax,edi
  38. mov edi,esp
  39. rep movs
  40. mov esi,edx
  41. mov edi,eax
  42. jmp ebx