+ -
当前位置:首页 → 问答吧 → 菜鸟问一个小程序问题

菜鸟问一个小程序问题

时间:2011-10-29

来源:互联网

data segment
  mess1 db 'enter key:$'
  key db 10d,?,10 dup(?)
data ends

prognam segment
main proc far
  assume cs:prognam,ds:data,es:data

start:
  lea dx,mess1
  mov ah,09h
  int 21h
  lea dx,key
  mov ah,0ah
  int 21h
  mov ah,02h
  mov dl,key+1
  int 21h
  ret 

main endp
prognam ends
end start

程序就是统计一个输入字符串的长度,想问一下key里边的?应该输入之后就是字符串的长度吧?是新人,所以麻烦引导一下。

作者: chenyy309   发布时间: 2011-10-29

key 里是最大输入长度,key 后边1 字节是实际输入长度,再后边是实际输入内容
所以显示的 key+1 的内容,这个是 int21h 0A 号功能的调用约定。
可以百度、google

(8)、功能0AH
功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
  1、第一个字节为缓冲区的最大容量,可认为是入口参数;
  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
  3、从第三个字节开始存放实际输入的字符串;
  4、字符串以回车键结束,回车符是接受的最后一个字符;
  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。 
例如:
  BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符
出口参数:无

作者: vcnewer   发布时间: 2011-10-29

我也是这样猜的,谢谢你那么完整的把功能打出来。想问一下,我程序写成这个样子,为什么不能输出长度。没有输出结果,我是用win7命令行的。

作者: chenyy309   发布时间: 2011-10-29

其实应该把数字改为字符,add al,‘0’
但是还是没输出,是不是win7的问题啊?

作者: chenyy309   发布时间: 2011-10-29