在MASM中,我创建了一个缓冲变量来保存从键盘输入的用户字符串。我不知道如何将字符串输入保存到该缓冲变量中。我没有像irvine这样的库链接,并希望使用DOS中断完成此操作。到目前为止,我的一些代码大致如下:
.model small
.stack 100h
.data
buff db 25 dup(0), 10, 13
lbuff EQU ($ - buff) ; bytes in a string
.code
main:
mov ax, @data
mov ds, ax
mov ah, 0Ah ; doesn't work
mov buff, ah ; doesn't seem right
int 21h
mov ax, 4000h ; display to screen
mov bx, 1
mov cx, lbuff
mov dx, OFFSET buff
int 21h
mov ah, 4ch
int 21h
end main
我认为使用0Ah是正确的,因为它适用于读取缓冲字符输入数组。
int 21h/0Ah
需要在dx
中提供缓冲区的地址。缓冲区中的第一个字节需要是最大输入值。通过将ah
填充到其中,您已经指定了您想要十个字符(可能需要更多)。在中断返回后,第二个字节是实际输入的字符数。输入文本从缓冲区 +2 开始。 - Frank Kotlermov dx, OFFSET buff
,而应该是mov dx, OFFSET buff+2
,因为字符串从2个字节之后开始。然后mov cx, lbuff
需要变成mov cl, [buff+1]
,因为这样可以在字符串移动 +2 之后得到正确的长度,对吗?那么我在哪里执行mov [buff], ah
?是在mov ah, 0Ah
之前吗? - Jumpman