我正在为大学做一个项目,并发现自己处于这样一种情况,即定义一个以$为起始值的字符串会很有用。
这用于说明类似的情况:
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]
然后,如果我打印字符串,它将以正确的字符结尾,而无需在末尾手动添加“$”。
我处在一种情况下,以这种方式这样做更容易,但我担心老师可能会指出这是不好的做法,或提出反对它的论据。我真的不想因为实际而面对那种情况。有什么理由这是不好的做法吗?
答案 0 :(得分:1)
嗯......只有用int 21h/9
打印字符串才会有用。例如,如果您使用它作为文件名打开,那么您希望它以零结束。
对于int21h/0Ah
,第一个字节是输入的“最大长度”。但是'$'会允许更多的输入,而不是你有缓冲区来保持它。我认为这是“不好的做法”!中断返回后(用户点击“输入”),第二个字节是输入的实际长度。我记得,这包括CR(13十进制或0Dh十六进制),dos总是把CR放在那里。 (Linux做的不同,实际上可能会导致问题)。实际的文本输入从string + 2
开始(您似乎已经弄明白了)。如果您要在int 21h/9
处开始打印(使用string
),dos可能会将您的第一个“$”视为“字符串结尾”并且不打印任何内容。 (试试吧!我必须重新启动才能尝试dos。)
您的老师是否会认为这是“不良做法”取决于您的老师。像CPU,操作系统和汇编程序......它们并非都是一样的! :)