声明一个充满“$”坏习惯的字符串?

时间:2013-06-26 02:12:35

标签: assembly x86-16

我正在为大学做一个项目,并发现自己处于这样一种情况,即定义一个以$为起始值的字符串会很有用。

这用于说明类似的情况:

string DB 22 dup('$') ; I declare the string with dollar signs
; Input to string
lea dx, string
mov ah, 0Ah
int 21h                     
mov bx, dx
mov ah, 0
mov al, ds:[bx+1]

然后,如果我打印字符串,它将以正确的字符结尾,而无需在末尾手动添加“$”。

我处在一种情况下,以这种方式这样做更容易,但我担心老师可能会指出这是不好的做法,或提出反对它的论据。我真的不想因为实际而面对那种情况。有什么理由这是不好的做法吗?

1 个答案:

答案 0 :(得分:1)

嗯......只有用int 21h/9打印字符串才会有用。例如,如果您使用它作为文件名打开,那么您希望它以零结束。

对于int21h/0Ah,第一个字节是输入的“最大长度”。但是'$'会允许更多的输入,而不是你有缓冲区来保持它。我认为这是“不好的做法”!中断返回后(用户点击“输入”),第二个字节是输入的实际长度。我记得,这包括CR(13十进制或0Dh十六进制),dos总是把CR放在那里。 (Linux做的不同,实际上可能会导致问题)。实际的文本输入从string + 2开始(您似乎已经弄明白了)。如果您要在int 21h/9处开始打印(使用string),dos可能会将您的第一个“$”视为“字符串结尾”并且不打印任何内容。 (试试吧!我必须重新启动才能尝试dos。)

您的老师是否会认为这是“不良做法”取决于您的老师。像CPU,操作系统和汇编程序......它们并非都是一样的! :)