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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么有些字符显示在汇编代码中?相关的知识,希望对你有一定的参考价值。

我在汇编中写了一个简单的打印字符串(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 
答案

你已经要求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

以上是关于为什么有些字符显示在汇编代码中?的主要内容,如果未能解决你的问题,请参考以下文章

86/88汇编代码的执行调试

一些汇编练习

在汇编 (MASM) 中显示字符串的偶数字符

为啥我的汇编代码无法找到最大的数字?

16位汇编第三讲 分段存储管理思想

汇编|使用10h中断来显示字符串