【问题标题】:Weird garbage in output输出中的奇怪垃圾
【发布时间】:2013-10-10 15:03:03
【问题描述】:

所以我正在使用 tasm 1.4,我正在制作一个程序,以用较小的字母和数字组成大的 CS14。我跑了大约 1/4 的时候,在我最后一条消息的输出之后出现了一些奇怪的东西,比如 hgweh26I^U%EYWGT#YWHSDWrite disk FullHSJETESRGDTFHGJ!

错误看起来像这样 http://s18.postimg.org/h35196kop/TD2.png

这是我的代码(虽然它还没有完成):

MODEL SMALL
.STACK 100H
.DATA
MSG DB 27  DUP('*'),13,10
MSG1  DB 27  DUP('*'),13,10
MSG2  DB 3 DUP('*')
MSG3  DB 2 DUP(' ')
MSG4  DB 3 DUP('C')
MSG5  DB 2 DUP(' ')
MSG6  DB 4 DUP('S')
MSG7  DB 2 DUP(' ')
MSG8  DB '1'
MSG9  DB 2 DUP(' ')
MSG10  DB '4 4'
MSG11  DB 2 DUP(' ')
MSG12  DB 3 DUP('*'),13,10
.CODE
MAIN PROC
;INIT
MOV AX, @DATA
MOV DS, AX
;DISPLAY
LEA DX, MSG
MOV AH, 9
INT 21H
;RETURN TO DOS
MOV AX, 4C00H
INT 21H
MAIN ENDP

【问题讨论】:

标签: assembly dos x86-16


【解决方案1】:

使用INT 21H / AH=09H 打印的字符串应该以'$' 字符(ASCII 代码36)终止。在你的字符串之后我没有看到任何这样的终止符,所以中断函数将继续打印,直到找到终止符。

【讨论】:

  • 所以我只是在每个字符串之后单独添加美元符号,或者在完成打印所有字符串后添加美元符号?另外我将如何添加它?像这样? ,'$' 或者这样的 ,$ 还是什么?
  • 你把它放在你希望打印时字符串结束的地方。它会是,'$'
  • 顺便说一句,有没有比制作 100 味精更好的方法?
  • 嗯,以您希望它们在控制台上显示的方式输入所有字符串肯定会更容易,而不是使用DUP