Assembly 打印到屏幕语句输出中的垃圾

Assembly 打印到屏幕语句输出中的垃圾,assembly,x86,Assembly,X86,正如标题所说,出于某种原因,我的打印过程正在输出垃圾。以下是过程定义: print proc near mov ah, 09h int 21h ret print endp 下面是在我的代码中调用它的地方: emptyTail: mov dl, offset standardError call print jmp quit 以下是标准错误: standardError db "Sorry we ran into an error. Try again", 13,10, "$"

正如标题所说,出于某种原因,我的打印过程正在输出垃圾。以下是过程定义:

print proc near
 mov ah, 09h
 int 21h
 ret
print endp
下面是在我的代码中调用它的地方:

emptyTail:
 mov dl, offset standardError
 call print
 jmp quit 
以下是标准错误:

standardError db "Sorry we ran into an error. Try again", 13,10, "$"

代码的其他部分工作正常,但一旦调用了这个特定分支,它就会抛出一堆奇怪的字符。知道为什么吗?

您需要将DX与字符串的偏移量放在一起。DS可能已经指向了您的段数据,不是吗?你制作的是COM还是EXE文件?如果是COM,则DS已设置

emptyTail:
 mov dx, offset standardError   ;DX, not DL or DH.
 call print
 jmp quit 

您需要将DX与字符串的偏移量放在一起。DS可能已经指向了您的段数据,不是吗?你制作的是COM还是EXE文件?如果是COM,则DS已设置

emptyTail:
 mov dx, offset standardError   ;DX, not DL or DH.
 call print
 jmp quit 

dh
可能有不正确的值,因此输出是您意想不到的。它应该是
mov-dx,offset-standardError
。谢谢@nrz。它仍然会给我一堆奇怪的字符,只是这次是这样的:4878rygu3ilht83hu43ry783494948u704抱歉,我们遇到了一个错误。请再试一次。您可能也有不正确的值is
ds
。字符串地址在
ds:dx
中给出。ok@nrz这是有道理的。有没有办法清除
ds:dx
寄存器中的值“有没有办法清除
code
ds:dx寄存器中的值”对不起,我不明白你的意思。
dh
可能有不正确的值,因此输出是你意想不到的。它应该是
mov-dx,offset-standardError
。谢谢@nrz。它仍然会给我一堆奇怪的字符,只是这次是这样的:4878rygu3ilht83hu43ry783494948u704抱歉,我们遇到了一个错误。请再试一次。您可能也有不正确的值is
ds
。字符串地址在
ds:dx
中给出。ok@nrz这是有道理的。“有没有办法清除
ds:dx
寄存器中的值”有没有办法清除
code
ds:dx寄存器中的值“对不起,我不明白你的意思。