这是我在宏中存储本地数据的方式(我使用TASM):
locals LL
.model small
.stack 100h
.data
.code
exit proc
mov ax, 4C00h
int 21h
endp
printStr macro str
jmp LLcode
_str db str,'$'
LLcode:
push ax dx
mov dx, @code
mov ds, dx
mov dx, offset _str
mov ah, 9
int 21h
mov dx, @data
mov ds, dx
pop dx ax
endm
start:
printStr 'Hello world
call exit
end start
但是,现在我必须将ds更改为每个宏中的代码段地址,然后将其更改回数据部分地址。有一个更好的方法吗?或者"标准"每个人都这样做的方式?
或者这可能是更好的方式?
push ax dx ds
mov dx, @code
mov ds, dx
mov dx, offset _str
mov ah, 9
int 21h
pop ds dx ax
答案 0 :(得分:2)
push ds ; save old ds
push cs
pop ds ; make ds same as cs
; do your thing
pop ds ; restore old ds
push ds ; save old ds
push cs
pop ds ; make ds same as cs
; do your thing
pop ds ; restore old ds
......应该做你想做的事。为什么不将所有数据都放在代码段中,将设置为该值,并将其保留在那里?