sar2.s 469 B

123456789101112131415161718192021222324252627282930313233
  1. .sect .text; .sect .rom; .sect .data; .sect .bss
  2. .sect .text
  3. .define .sar2
  4. .sar2:
  5. ! bx, descriptor address
  6. ! ax, index
  7. pop cx
  8. pop dx ! base address
  9. push cx
  10. xchg di,dx ! di = base address, dx is saved di
  11. sub ax,(bx)
  12. mov cx,4(bx)
  13. push dx
  14. imul cx
  15. pop dx
  16. add di,ax
  17. sar cx,1
  18. jnb 1f
  19. pop bx
  20. pop ax
  21. stosb
  22. mov di,dx
  23. jmp bx
  24. 1:
  25. pop bx
  26. mov ax,si
  27. mov si,sp
  28. rep movs
  29. mov sp,si
  30. mov si,ax
  31. mov di,dx
  32. jmp bx