MASM 8086 在文本前出现乱码
Posted
技术标签:
【中文标题】MASM 8086 在文本前出现乱码【英文标题】:MASM 8086 gibberish in front of text 【发布时间】:2016-09-19 22:27:33 【问题描述】:我正在学习汇编编程,并且已经开始使用 MASM。我定义了一个用于打印的宏,另一个用于字符串输入。它似乎工作正常,但如果我使用宏,打印字符串将不起作用,我不知道为什么。
;Zanglang
.model small
.stack 200h
init macro
mov ax, @data
mov ds, ax
endm
fin macro
mov ah, 04ch
int 21h
endm
print macro str
mov ah, 9h
lea dx, str
int 21h
endm
strinp macro
mov ah, 0Ah
mov dx, offset buff
int 21h
mov si, offset buff + 1
mov cl, [ si ]
mov ch, 0
inc cx
add si, cx
mov al, '$'
mov [ si ], al
;Print the value of buff
print newl
print buff + 2
print newl
;This works!!!
mov ah, 9h
mov dx, offset buff + 2
int 21h
endm
.data
prompt db 10, 13, "Enter your string: $"
newl db 10, 13, "$"
buff db 26
db ?
db 26 dup(0)
.code
start:
init
print prompt
strinp
fin
end start
end
【问题讨论】:
正确的描述(或从终端窗口复制/粘贴文本)而不是仅仅说“奇怪的胡言乱语”会使其他人更容易看到答案。我想你一定是在某个地方出现了指针错误,并且正在打印一些二进制数据,而不仅仅是覆盖普通的 ASCII 字符。 【参考方案1】:我使用 MASM 6.15 组装您的示例,然后在 DOSbox 下运行二进制文件。
您的代码有效,但奇怪的行为源于您不正确的换行顺序。 DOS 需要 CRLF 而不是您所拥有的 LFCR。按照这个顺序,DOS 会忽略 LF (10),然后处理 CR (13)。一旦 DOS 处理了您的 CR,光标就会放在同一行的开头。然后您的输入字符串将打印在“输入您的字符串”提示的开头。要解决此问题,只需按如下方式反转换行符:
prompt db 10, 13, "Enter your string: $"
newl db 10, 13, "$"
以下内容:
prompt db 13, 10, "Enter your string: $"
newl db 13, 10, "$"
输出(一旦固定):
C:\>dostest
Enter your string: howdy
howdy
【讨论】:
我的问题不是文本“覆盖”本身,更多的是它会跳到一个新行,打印一个箭头,一个ASCII标志,然后打印它(例如,我输入了“你好”,它把[箭头] [三叶草]你好) 除了 DOSBox 之外,我还在一台 DOS 6.22 机器上运行了你的 [更新的] MASM 6.15 汇编程序,它运行没有问题。请提供以下信息: 1> 您使用的是什么版本的 MASM? 2> 您使用的链接器和版本是什么? 3> 你用的是什么版本的DOS? 4> 你使用什么命令行来构建可执行文件?以上是关于MASM 8086 在文本前出现乱码的主要内容,如果未能解决你的问题,请参考以下文章