我是汇编语言的新手,我陷入两难境地。我如何要求字符串用户输入并以未知长度读取它?目前我只知道如何要求用户输入和阅读有限的长度,如...
.data
input db 24 dup ("$")
.code
mov input, 22
lea dx, input
mov ah, 0ah
int 21h
我想知道是否有可能要求用户输入而不用担心长度...如果有可能,请你展示&解释如何做的过程/代码?
答案 0 :(得分:1)
如果您将输入过程委托给操作系统,您将始终有一些长度限制来处理。 DOS使用大约255个字节的限制。
但是即使你自己编写了一个输入例程,你仍然需要担心你准备花多少钱来存储这些字符。
答案 1 :(得分:1)
在DOS中你可以在文件级读取(几乎)任意长度的输入字符串,函数AH = 3Fh, 请参阅中断列表http://www.ctyme.com/intr/rb-2783.htm
MOV DX, OFFSET input ; Memory where you want the string be read to.
MOV CX,24 ; Number of bytes allocated for the string (maximal possible length).
MOV BX,0 ; Standard handle for system input (usually the keyboard).
MOV AH,3Fh ; DOS function "READ FROM FILE OR DEVICE"
INT 21h ; Waits until ENTER pressed (character 0Dh). Returns AX=number of bytes read.
答案 2 :(得分:0)
作为其中一个选项,您可以使用BIOS int 16h fn 0循环等待按键,然后检查已按下哪个键并进行相应处理。
像
这样的东西 ;
; ES:DI points to input buffer
;
_do:
;
; wait key press
;
mov ah, 0
int 0x16
cmp al, 13 ;ENTER pressed?
jz _end
;
; display char
;
mov ah, 0x0e
mov bh, 0
int 0x10
;
; save char to buffer
;
stosb
jmp _do
_end:
...