在程序集中定义变量时,只能使用segment:offset操作数输出它。您可以通过关键字偏移本身获得偏移值。但是为什么对于我的代码,我仍然得到正确的输出,即使我没有使用offset指令。但是如果我的变量是一个字符串并且我在dos中使用了输出字符串,即mov,9h然后是int21h,我使用mov dx,offset msg然后将dos中断输出到字符串得到正确的输出。
.model small
.stack 100h
.data
msg1 db 50d ;2 in ascii table
msg2 db 51d ;3 in ascii table
msg3 db 52d ;4 in ascii table
.code
main proc
mov ax, @data ;point to the data segment
mov ds, ax
mov dl, msg1 ;why does this work, it was suppose to be ds:offset msg1
mov ah, 2h ;output character
int 21h
mov dl, msg2 ;why does this work, it was suppose to be ds:offset msg1
mov ah, 2h ;output character
int 21h
mov dl, msg3 ;why does this work, it was suppose to be ds:offset msg1
mov ah, 2h ;output character
int 21h
mov ax, 4c00h
int 21h
main endp
end main
我只需要知道int21h需要什么。我认为如果你在变量中加入一些东西,你总是需要段和偏移量。谢谢您的帮助。