我在程序集中写了一个简单的打印字符串(16位),但在运行.EXE代码后,它显示了我的字符串和很多字符,我不知道它们来自哪里。 ..
stk segment
dw 32 dup(0)
stk ends
dts segment
msg db "hello world"
dts ends
cds segment
assume ss:stk , cs:cds , ds:dts
main proc far
mov ax,seg dts
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,4ch
int 21
main endp
cds ends
end main
答案 0 :(得分:2)
您已要求DOS打印您使用
定义的字符串msg db "hello world"
您已为DOS提供了此字符串的开头(mov dx,offset msg
),但 DOS无法知道字符串结束的位置。这就是你需要用美元字符($)终止字符串的原因。然后DOS知道这是字符串的结尾。 DOS不会显示$
本身。
msg db "hello world$"
或者如果您愿意清楚:
msg db "hello world", "$"
作为改进,您还可以打印换行符。将定义更改为:
msg db "hello world", 13, 10, "$"
ASCII代码13是回车,它将光标移到屏幕的左边缘,ASCII代码10是换行符,它将光标1行向下移动到屏幕上。
美元字符($)再次是字符串的最后一项。
mov ah,4ch int 21
现在这可能只是一个错字,但它是一个重要的错误。你忘了十六进制后缀(h)。
mov ax,4C00h
int 21h