宏中的本地数据

时间:2012-11-13 18:36:25

标签: assembly x86-16 tasm

这是我在宏中存储本地数据的方式(我使用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   

1 个答案:

答案 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

......应该做你想做的事。为什么不将所有数据都放在代码段中,将设置为该值,并将其保留在那里?