如何读取任何长度的字符串?

时间:2015-04-12 16:50:35

标签: assembly

我是汇编语言的新手,我陷入两难境地。我如何要求字符串用户输入并以未知长度读取它?目前我只知道如何要求用户输入和阅读有限的长度,如...

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

我想知道是否有可能要求用户输入而不用担心长度...如果有可能,请你展示&解释如何做的过程/代码?

3 个答案:

答案 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:
  ...