0

これは、ローカル データをマクロに保存する方法です (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   
4

1 に答える 1

2

push ds ; save old ds
push cs
pop ds ; make ds same as cs
; do your thing
pop ds ; restore old ds

...あなたが望むことをすべきです。すべてのデータをコード セグメントに入れ、そのように設定dsし、そのままにしておくのはどうでしょうか?

于 2012-11-13T22:21:49.297 に答える