0

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

这可以说明类似的情况:

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]

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

我的情况是这样做非常容易,但我担心老师可能会指出这是不好的做法,或者提出反对的论点。我真的不想仅仅为了实际而面对那种情况。有什么理由这是不好的做法吗?

4

1 回答 1

1

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

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

您的老师是否会认为这是“不好的做法”取决于您的老师。就像 CPU、操作系统和汇编程序一样……它们并不完全相同!:)

于 2013-06-26T03:21:24.743 回答