在线等,求几行简单代码的意思。
如下代码是由键盘输入字符串,由将该字符串输出,问题在注释处,谢谢前辈们。总共八个问题,望您多说些,谢谢。
DATA SEGMENT
BUF DB 25 ; 缓冲区长度 //问题1:25是缓冲区长度吗?那数值变量定义时的值不也是这样吗?
ACTHAR DB ? ; 保留单元, 存放输入的实际字符个数
CHAR DB 25 DUP (?) ; //问题2:BUF DB 25 和 CHAR DB 25 DUP(?) 这两个定义时有什么区别即,加不加 DUP(?)?
DB '$' ;//问题3:这句什么意思,为什么没有变量名?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUF
MOV AH, 0AH
INT 21H
CMP AL,0FFH ;//问题4:INT 21H 的OAH对AL有影响吗?
JZ EXIT
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV DX,OFFSET BUF+2 ;//问题5:OFFSET是得一BUF的偏移量,可为什么+2呢?
;MOV DX,OFFSET CHAR
MOV BX,OFFSET ACTHAR ;//问题6:这里BX的值是不是0?
MOV BL,[BX] ;//问题7:[BX]指的是不是BX实际值的首地址的值?
ADD BX,DX
MOV BYTE PTR [BX],'$' ;//问题8:09H的功能的输入不是DS:DX吗?为什么改变[BX]就能输出了?
MOV AH,09H
INT 21H
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
[解决办法]
DATA SEGMENT BUF DB 25 ; 缓冲区长度 //问题1:25是缓冲区长度吗?那数值变量定义时的值不也是这样吗? ;定义一个变量用它来存放缓冲区长度有何不可 CHAR DB 25 DUP (?) ; //问题2:BUF DB 25 和 CHAR DB 25 DUP(?) 这两个定义时有什么区别即,加不加 DUP(?)? ;N DUP (a),表示重复N次DUP后面括号里的表达式,在你这里等价于CHAR DB ?,?,?,?,?...第25个? DB '$' ;//问题3:这句什么意思,为什么没有变量名? ;变量名只是方便引用,在这里就没有必要 CMP AL,0FFH ;//问题4:INT 21H 的OAH对AL有影响吗? ;不知道你问什么 MOV DX,OFFSET BUF+2 ;//问题5:OFFSET是得一BUF的偏移量,可为什么+2呢? ;下面这句就是注释 ;MOV DX,OFFSET ACHAR MOV BX,OFFSET ACTHAR ;//问题6:这里BX的值是不是0? ;ACTHAR的偏移,上面你不说了吗 MOV BL,[BX] ;//问题7:[BX]指的是不是BX实际值的首地址的值? ;bx指向内存的值相当于 ds:bx的值 ADD BX,DX MOV BYTE PTR [BX],'$' ;//问题8:09H的功能的输入不是DS:DX吗?为什么改变[BX]就能输出了? ;9H中断没研究过
[解决办法]
这些问题提都可以通过调试来解决,要学会渔,而不是一味的鱼。
希望你自己实际操作再思考后,再来发问。