如何读取任意长度的字符串?
how to read any length of string?
我是汇编语言的新手,进退两难。我如何要求用户输入字符串并以未知长度读取它?目前我只知道如何要求用户输入和阅读有限的长度,比如...
.data
input db 24 dup ("$")
.code
mov input, 22
lea dx, input
mov ah, 0ah
int 21h
我想知道是否可以在不担心长度的情况下要求用户输入...如果可能的话,您能否向 process/code 展示并解释如何操作?
作为选项之一,您可以使用 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:
...
如果您将输入过程委托给 OS,您将始终需要处理一些长度限制。 DOS 使用大约 255 字节的限制。
但即使您自己编写了一个输入例程,您仍然需要担心您准备花费多少内存来存储这些字符。
在 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.
我是汇编语言的新手,进退两难。我如何要求用户输入字符串并以未知长度读取它?目前我只知道如何要求用户输入和阅读有限的长度,比如...
.data
input db 24 dup ("$")
.code
mov input, 22
lea dx, input
mov ah, 0ah
int 21h
我想知道是否可以在不担心长度的情况下要求用户输入...如果可能的话,您能否向 process/code 展示并解释如何操作?
作为选项之一,您可以使用 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:
...
如果您将输入过程委托给 OS,您将始终需要处理一些长度限制。 DOS 使用大约 255 字节的限制。
但即使您自己编写了一个输入例程,您仍然需要担心您准备花费多少内存来存储这些字符。
在 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.