num dw dup 5(?)
这是一种特殊的语法。这到底能组装吗?
通常的写法是num dw 5 dup (?)
,所以把重复次数before the dup
操作员。
关于打印您在评论中所说的用户号码的问题:
谢谢,我已经添加了 $,现在正在打印
我严重怀疑打印的只是输入的数字,而不是其他任何东西,因为你错误地使用了 DOS 函数 09h 和 DOS 函数 0Ah!
DOS.BufferedInput 函数 0Ah 期望从您那里获得一个指针DS:DX
它指向一个具有明确定义布局的结构。
第一个字节必须指定从第三个字节开始的存储空间有多大。
第二个字节是让 DOS 通知您输入了多少字节。
有关此 DOS 功能的更多信息,请阅读缓冲输入如何工作.
接下来是一个允许输入 5 个字符的示例。你会问,为什么我必须写6?那么,DOS 总是在输入的字符后附加一个回车字节 (13)。第一个字节的计数必须考虑到这一点。
num db 6, 0, 6 dup (0)
由于实际字符开始于num + 2
,这将是您需要传递给 DOS.PrintString 函数 09h 的地址。
byte 24h2000 字节后未找到。
然后还有一个小问题,即以 $ 结尾的字符。只需将回车字节 (13) 替换为 $ 字符即可。 $ 字符的 ASCII 代码是 24h (36)。
xor bx, bx
mov bl, [num+1] ; The count obtained from DOS
mov BYTE PTR [num+2+bx], '$'
mov dx, OFFSET num+2
mov ah, 09h
int 21h
before
num 6, 0, 0, 0, 0, 0, 0, 0,
input
2019
after
'2' '0' '1' '9' CR
num 6, 4, 50, 48, 49, 57, 13, 0
printing
'2' '0' '1' '9' '$'
num 6, 4, 50, 48, 49, 57, 36, 0
^
DX