为什么有些字符显示在汇编代码中?

问题描述 投票:1回答:1

我在汇编中写了一个简单的打印字符串(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 
assembly dos x86-16
1个回答
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是换行符,它将光标向下移动到屏幕上。 美元字符($)再次是字符串的最后一项。


mov ah,4ch
int 21

现在这可能只是一个错字,但它是一个重要的错误。你忘了十六进制后缀(h)。

mov ax,4C00h
int 21h
© www.soinside.com 2019 - 2024. All rights reserved.