2015-04-12 81 views
1

我是新来的汇编语言,我陷入困境。我如何要求一个字符串用户输入并阅读它与未知长度?目前我只知道如何要求用户输入和一个长度有限,喜欢读...如何读取任意长度的字符串?

 .data 
input db 24 dup ("$") 
     .code 
     mov input, 22 
     lea dx, input 
     mov ah, 0ah 
     int 21h 

...我想知道如果有可能要求用户输入,而不用担心长度,如果它是否有可能,请你说明&解释过程/代码如何做到这一点?

回答

1

如果您委派输入过程的OS你总是有一些长度限制处理。 DOS使用大约255个字节的限制。

但即使您自己写了一个输入例程,您仍然不得不担心您准备花费多少内存来存储字符。

+0

感谢您的澄清:)会记住它 – user3921890

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: 
    ... 
+0

小心,不要重新发明'得到()'。这很容易完成,但被认为是一个非常糟糕的想法! –

+0

你是什么意思? –

0

在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 (cahracter 0Dh). Returns AX=number of bytes read. 
相关问题