Assembly MASM 8086在文本前胡言乱语
我正在学习汇编编程,并且已经开始使用MASM。我定义了一个用于打印的宏,另一个用于字符串输入。它似乎工作正常,但如果我使用宏,打印字符串将不起作用,我不知道为什么Assembly MASM 8086在文本前胡言乱语,assembly,macros,masm,Assembly,Macros,Masm,我正在学习汇编编程,并且已经开始使用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 l
;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
我使用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, "$"
对下列事项:
输出(一次固定):
正确的描述(或从终端窗口复制/粘贴文本)而不是仅仅说“奇怪的胡言乱语”,会让其他人更容易看到答案。我想你一定是在某个地方发生了指针错误,正在打印一些二进制数据,而不仅仅是覆盖普通的ASCII字符。我的问题不是文本“重写”本身,而是它将跳转到一个新行,打印一个箭头,一个ASCII标志,然后打印它(例如,我键入了“howdy”,它将[arrow][clover]howdy)除了DOSBox之外,我还在DOS6.22机器上运行了你的[更新的]MASM 6.15汇编程序,它运行起来没有问题。请提供以下信息:1>您使用的是什么版本的MASM?2> 您使用的链接器和版本是什么?3> 您使用的是什么版本的DOS?4> 您用来构建可执行文件的命令行是什么?
prompt db 13, 10, "Enter your string: $"
newl db 13, 10, "$"
C:\>dostest
Enter your string: howdy
howdy