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

来源:百度知道 编辑:UC知道 时间:2024/05/05 17:39:14
这个汇编在网上找的,自己有些语句不懂。
这个汇编程序的功能是:
运行后输入字符串,(回车后)显示在屏幕上。
一共有3个问题,也许有点多,但是相信对你还说很容易,别嫌我笨,只求弄懂,相信网友们的教导比书上的话更容易让我懂。
还有也许问题有表述不清楚的地方导致大家不能懂我的意思,可以告诉我,我好纠正。
问题在代码中写了,代码如下

DATAS SEGMENT

STR1 DB "PLEASE INPUT A STRING:$"
; 问题1:这个BUF为什么要这么定义,下面三个DB定义各自是了什么作用?如果只定义为BUF DB 20 DUP (?) 为什么不行,
BUF DB 20
DB ?
DB 20 DUP (?)

CRLF DB 0AH,0DH,"$" ;此处输入数据段代码 ;回车换行
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS
MOV DS,AX

LEA DX,STR1 ;显示字符串""PLEASE INPUT A STRING:"
MOV AH,09H
INT 21H

;接收输入字符串

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

;问题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 ;间接寻址