当前位置:编程学习 > 汇编语言 >>

汇编语言

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清零如何实现
下一个:汇编语言的实模式下怎么编程

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,