大家帮我看看这个简单的汇编程序

2025-02-26 11:44:53
推荐回答(3个)
回答1:

下面这段,可以解释你的疑问:
INT 21H的功能调用0AH
功能描述:从标准输入设备上读入一个字节字符串,
遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并
发出响铃,直到输入“回车”键才结束输入。
例如:
BUFF 80, ?, 80 DUP(?) ;最多接受80个字符
出口参数:无

回答2:

;问题1:这个BUF为什么要这么定义,下面三个DB定义各自是了什么作用?如果只定义为BUF DB 20 DUP (?) 为什么不行?
-----------------------------------------
datas段中定义了标号buf的22个字节 crlf的3个字节 一共25个字节
而你定义的只有20个字节

;问题2:int 21H的10号功能输入字符串的时候它是如何接受的?比如它是如何判断我的输入完毕了。
--------------------------------------------
它是通过int 21H中断返回程序

;问题3:下面两句代码的意思是什么?我不懂它的注释,比如为什么BUF+1就为字符串字符的个数
;输入字符串的时候起始地址不是BUF吗?为什么要BUF+2

--------------------------------
MOV CL,BUF+1 ;获取字符串中字符的个数
;buf+1=ds:[1]的内容即第2个字节?的ascii
LEA SI,BUF+2 ;间接寻址
;buf+2=ds:[2]的内容即第3个字节中首个?的ascii

这是我的愚见

回答3:

2楼正解。