关于输入字符串的问题

george_vcool 2007-06-02 11:12:39
.model small
.data
str db 10 dup(?)
.stack
.code
.startup

mov dx,offset str
mov ah,0ah
int 21h

mov str+9,'$'
mov dx,offset str
mov ah,09h
int 21h
.exit
end
我这个运行时为什么就直接输出了,没有让给我输入
请指教
...全文
386 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
george_vcool 2007-06-07
  • 打赏
  • 举报
回复
谢谢你们啊!!
paullbm 2007-06-03
  • 打赏
  • 举报
回复
功能0AH
功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
  1、第一个字节为缓冲区的最大容量,可认为是入口参数;
  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
  3、从第三个字节开始存放实际输入的字符串;
  4、字符串以回车键结束,回车符是接受的最后一个字符;
  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
  BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符
出口参数:无

================================
看到说明的第1点和第2点了吧?但从你所定义的:
str db 10 dup(?)
很明显不符合DOS中断10号子功能的调用要求,因为问号代表不确定的值。也就是说,你连最大的字符数的个数都不确定!

如果你实在想定义成一行的话,则可定义为:

str db 10,11 dup(?)
mengshijie_1981 2007-06-03
  • 打赏
  • 举报
回复
str db 10 ;缓冲区允许读入的最大字符数(不包含回车、换行)
db ? ;实际读入的字符数(不包括回车、换行符)
10 db dup(?) ;缓冲区
mengshijie_1981 2007-06-03
  • 打赏
  • 举报
回复
Int 21h 功能0Ah 版本1
带缓冲的STDIN输入
从标准输入设备(STDIN)中读取字符,并将它们置入用户指定的缓冲区中。
481页
调用寄存器: AH 0Ah
DS:DX 指向输入缓冲区的指针
字节 0 缓冲区能保存的字节数
字节1 读取的字节数
字节2- ? 返回的字节数
返回寄存器:无
注释:带缓冲区的STDIN输入是一种有用的且常常使用的功能,它能让你在
键盘处理方面最大限度地获取常规输入功能的功效。输入字符来自于STD-
IN,它缺省时即为键盘,并且往往将它安置在用户定义的缓冲区中。必须从调
用程序中指定的键输入缓冲区可设置如下:
字节偏移值 内容
0 要读取的最大字节数
1 读取的字节数
2- ? 键盘中实际输入的字节数
要使用这种功能,只需把允许输入的字节数据存在DS:DX指向的缓冲
区的第一个字节中。由于缓冲区的大小必须能留有终止回车(ASCII 0Dh)的
空间,因而最小的缓冲区大小不能小于1。
而在实际应用中,该功能可能不允许有任何虚拟键盘输入,因为单独为缓
冲区设置的1个字节要用于终止回车符,因而设置为1不是很有用。实际上,
最小的缓冲区大小应为2个字节(1个输入字节加上回车)。最大的缓冲区大
小为255个字节,这是一种逻辑上的大小,因为缓冲区长度标识符仅为一个单
字节。
该功能从键盘中读进字符,并将它们放置在缓冲区中,放置的起始位置为
缓冲区中的第3个字节。每一个ASCII字符都要求占用1个字节的缓冲空间。
当实际读进的字符数达到离缓冲区大小只差一个新键入的字符,并且在随后
的每次键击时都会发出报警声。当最后按下Enter键时,所获得并保存好的字
节数就被放置在该缓冲区的第2个字节中,并且将控制权返回给调用程序。
这种输入本身允许超前打印,并且所有键盘编辑命令都是活动的。 Ctrl-C
或Ctrl-Break功能也是活动的,其结果是导致Int 23h的执行。
这里要注意的是,字符串的大小通过长度字节中返回的值来确定。这一长
度中不包括终止回车符。
与所有实现ctrl-C检查的DOS键输入功能一样,某个Alt-键的输入组合
也能误导该功能(这些Alt-键返回的扫描代码,是由于DOS错误翻译造成的,
当用户按了ctrl-QCtrl-S或Ctrl-P时,所对应的键分别是Alt-W、Alt-R和
Alt-Q)。
Microsoft建议用户不要再使用这一功能,除非得用该功能来维持旧软

482页
件。可随时终止对该功能的支持。应使用功能3Fh来代替。

以上文章节选自:《DOS程序员参考手册》
yunzhe 2007-06-02
  • 打赏
  • 举报
回复
你应该给出最大字符数
george_vcool 2007-06-02
  • 打赏
  • 举报
回复
能说明原因吗?
呵呵!!!!!!!!!!!!!!!
paullbm 2007-06-02
  • 打赏
  • 举报
回复
把:
str db 10 dup(?)

定義成:

str db 10
db ?
db dup(?)

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧