汇编语言
DATAXY SEGMENT
X DB 0FFH ; 第二个程序换成-5,即0fbh
RESULT DB ?
DATAXY ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAXY
START: MOV AX,DATAXY
MOV DS,AX ;送段地址至DS
XOR BL,BL ;累加器BL清0
MOV CX,08H ;循环次数送CX
LEA SI,X ;取X的指针
MOV AL,[SI] ;取X送AL
为什么这边X的值给A要通过SI来传,不能直接MOV AX,X吗?
还有MOV DL, RESULT
ADD DL, 30H
MOV AH, 02H
INT 21H
MOV AH,4CH
INT 21H
这几句什么意思来着。。。
追问:数据传寄存器不是允许吗?直接X给AX不是很方便?不好意思哈,再问个马上给分。。。。。就是
前面DATA SEGMENT
INT-UB DW 2DUP(?)
......
MOV INT-UB OFFSET INTUB(这句看不懂。。。INT-UB不是数据吗?怎么可以做目的操作数,要不是也该加一个[INT-UB]啊。。。
答案:(1) X是一个字节型变量,写成MOV AL,X是允许的。但是不能写成MOV AX,X,原因是两者的数据类型不匹配。另外,使用SI来间接传送也是一种方法,在其他地方有它的好处,说成死板也不是很不妥。
(2)MOV DL, RESULT
ADD DL, 30H(将结果转换成数据对应的ASCII码值,为输出到显示器做准备。)
MOV AH, 02H(输入中断的功能号)
INT 21H (触发DOS中断来显示DL中的数据)
MOV AH,4CH (输入中断的功能号)
INT 21H (结束程序,触发中断返回DOS)
(3)前面DATA SEGMENT
INT-UB DW 2DUP(?)
......
MOV INT-UB OFFSET INTUB;[确切的说INT-UB是一个字型变量,所以可以作为目的操作数接收字型数据。offset是一个伪指令,由汇编的编译器执行(就是由masm.exe执行)。所以OFFSET INTUB在编译时将被翻译成一个立即数(即字型变量 INT-UB的偏移地址)。这样, MOV INT-UB OFFSET INTUB就相当于把一个立即数以字的类型传送到存储器INT-UB中,与指令MOV word ptr [BX],0的寻址方式完全相同。 ]
其他:(1)因为SI是默认的用于字符串操作的寄存器,而X是个1字节的数据,相当于一个字符,所以就用那个了。
(2)把RESULT移到DL,把2移到AH(用于选中断功能号),INT 21h调用DOS中断,4Ch移到AH(DOS中断“退出”的功能号),再次调用中断。 21号中断
参数:DS:DX=FCB首地址
返回值:
AL=00 写成功
=01 盘满
=02 缓冲区溢出
代码解释:
首先result+30h放入DL中,也就是FCB首地址,然后调用21中断读内存。 21号中断
上一个:单片机汇编语言当p2.0检测到低电平时将p1.4清零如何实现
下一个:汇编语言的实模式下怎么编程