2015-04-12 86 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. 
相關問題