汇编语言程序设计(五)

上传人:j****9 文档编号:54647703 上传时间:2018-09-16 格式:PPT 页数:38 大小:172KB
返回 下载 相关 举报
汇编语言程序设计(五)_第1页
第1页 / 共38页
汇编语言程序设计(五)_第2页
第2页 / 共38页
汇编语言程序设计(五)_第3页
第3页 / 共38页
汇编语言程序设计(五)_第4页
第4页 / 共38页
汇编语言程序设计(五)_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《汇编语言程序设计(五)》由会员分享,可在线阅读,更多相关《汇编语言程序设计(五)(38页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序设计,IBM PC机的指令系统,3 逻辑运算程序,介绍逻辑运算指令的格式、功能和用法 学习结合用逻辑运算指令来实现二进制数和BCD码的输入输出问题,3.1 逻辑运算指令概述,一、逻辑运算指令逻辑运算指令是对字节或字中各位进行处理的指令。,逻辑指令: NOT 字节或字求反 AND 字节或字逻辑与 OR 字节或字逻辑或 XOR 字节或字逻辑异或 TEST 字节或字的测试,移位指令: SHL 字节或字的逻辑左移 SAL 字节或字的算术左移 SHR 字节或字的逻辑右移 SAR 字节或字算术右移,循环移位指令: ROL 字节或字的循环左移 ROR 字节或字的循环右移 RCL 字节或字通过进位

2、循环左移 RCR 字节或字通过进位循环右移,3.2 逻辑运算指令,一、逻辑指令1.AND指令(逻辑与或逻辑乘)格式:AND 目的操作数,源操作数功能:AND将两个操作数(字节或字)进行按位“逻辑与”运算,结果送回目的操作数影响状态标志位:CF0,OF0,PF、SF、ZF反映操作的结果;AF状态不定。说明:用AND指令可以将一个字节或字中的某些特定位清零,或者说将某些特定位截取下来。例如:将ASC码的高4位清零,亦即截取低4位,假设这个ASC码已在AL中,那么就可用指令:AND AL,00001111B来完成。2.TEST指令(测试),3.2 逻辑运算指令,格式:TEST 目的操作数,源操作数功

3、能:该指令对两个操作数进行逻辑与运算,但结果并不送至目的操作数。只是影响状态标志。该指令执行后两个操作数都不变。影响状态标志位:与AND指令相同。说明:这条指令常用来检测一些条件是否满足,但又不希望改变原有的操作数情况,即适用于检查一个字节或字中的某些特定位是否有一位为1。另外,也可以用TEST指令将CF清零例如:检查BL的低4位是否至少有一位为1,可以这样:TEST BL,0FHJE LL:,3.2 逻辑运算指令,3.OR指令(逻辑或又称逻辑加)格式:OR 目的操作数,源操作数功能:OR指令将两个操作数进行按位逻辑加操作,并将结果送至目的操作数。影响状态标志位:与AND指令相同。说明:OR指

4、令适用于对字节或字的特定位置数(拼数)例如:将AL高4位拼上3,可这样做:OR AL,30H4.XOR指令(逻辑异或又称按位加)格式:XOR 目的操作数,源操作数功能:XOR指令将两个操作数进行按位逻辑异或操作,并将结果送至目的操作数。如果两个操作数中对应位相同(均为,3.2 逻辑运算指令,0或均为1),则结果该位为0;否则,结果该位为1影响状态标志位:与AND指令相同。说明:该指令适用于对一个数或一个数的特定位求反。例如:将AL寄存器中数01011100B求反,只要逻辑异或常数0FF即可。MOV AL,01011100BXOR AL,0FFH注意:以上四个逻辑指令的两个操作数均可以是寄存器或

5、存储器到寄存器或存储器(至少有一个寄存器),也可以由立即数到寄存器或存储器。5.NOT指令(逻辑非或求反码)格式:NOT 目的操作数功能:NOT指令对目的操作数的每一位求反码,并将结果,3.2 逻辑运算指令,送至目的操作数。影响状态标志位:不改变状态标志。说明:该操作是从0FFH(对字节)或从0FFFFH(对字)中减去指定的操作数,并将结果送回目的操作数。该指令中只有目的操作数,目的操作数可以是通用寄存器也可以是存储器。 二、移位指令1.SHL指令(逻辑左移)格式:SHL 目的操作数,COUNT功能:SHL指令将目的操作数左移COUNT次(位)。最高位移入进位标志CF中去,而CF中原来的值被冲

6、掉。移位后空出的最低位中填0。说明:目的操作数可以是通用寄存器,也可以是存储器。移位次数COUNT若为1,则可将1直接写在指令的COUNT处;若不,3.2 逻辑运算指令,为1,那么COUNT为寄存器CL的值。即事先将移位次数送至CL寄存器,而在指令中的COUNT处写上CL。影响状态标志位:OF位:当移位次数COUNT为1时,若移位后目的操作数的最高位与CF不同,则将OF置1;否则OF置0。对于带符号数来说,这用来表示移位后的符号位与移位前的符号位是否相同。若相同则OF置0表示没有产生超位结果(因每左移一位数值就扩大一倍)当COUNT不为1时,OF为不确定的值。PF、SF、ZF反映移位后的结果;

7、AF总是不确定;CF中总是包含从目的操作数中称出的最后一位的值。2.SHR(逻辑右移)格式:与SHL指令相同。功能:将一个无符号数向右移位,左边(最高位)出现空,3.2 逻辑运算指令,位补0,右边(最低位)移至CF。影响状态标志位:CF、OF、PF、SF、ZF;AF不确定。以上两指令说明:SHL指令用来将一个无符号数向左移一位等于将数乘2。用SHL指令使数倍增比用乘法指令速度快的多。可以通过CF是否为0或OF是否为1,检查移位结果是否超位。即在移位指令后面跟上一体测试CF(或OF)的条件转移指令。SHR指令适用于将一个无符号数减半。右移位一位等于除以2。用SHR指令使减半比用除法指令速度要快得

8、多。可通过右移一位后检查CF是否为0来检查数是否为偶数。若CF1表明此数不是偶数。3.SAL指令(算术左移)格式:同SHL,3.2 逻辑运算指令,功能:与SHL相同,实际上SHL和SAL是同一条指令的两种助记符,它们执行的操作完全一样,它一般用于带符号数的倍增(乘2),对于带符号的数检查超位时只能测试OF。4.SAR指令(算术右移)格式:同SHL指令。功能:类似于SHR,SAR与SHR的区别在于:SHR是连同符号位一起右移,左边(最高位)出现的空位补0;而SAR右移时符号位保持不变,左边(数的最高位)出现的空位补上符号位的值。说明:该指令适用于将带符号位的数减半(除以2)值和值得注意的是:如果

9、目的操作数为负时,且其中具有1的位数移出后,SAR指令产生的结果与用整数除IDIV指令产生的结果不一样。如:5经SAR后得3,而用IDIV后得2。,3.2 逻辑运算指令,影响状态标志位:CF、OF、PF、SF、ZF对于移位指令小结:1.指令的目的操作数可以是通用寄存器,也可以是存储器2.指令的源操作数,是移位次数计数值操作数,一体指令可实现高达255次移位的操作。指令中的移位值可以指定为1,或指定为寄存器CL,CL中包含移位次数。3.在移位指令执行后,AF总是不确定的。通常影响SF、ZF和PF。CF中总是含有从目的操作数中称出的最后一位的值。4.在执行多位移位后,OF的内容不确定。对于1位的移

10、位操作,如果操作数的最高位在执行后被改变,OF就置位;反之OF被清零。,3.2 逻辑运算指令,CF,最高位,最低位,0,SHL指令操作,CF,最高位,最低位,0,SHR指令操作,CF,最高位,最低位,SAR指令操作,3.2 逻辑运算指令,三、循环移位指令1.ROL指令(循环左移)格式:ROL 目的操作数,COUNT功能:每执行一次(每移1位),把目的操作数的最高位移到最低位,同时还把最高位移到CF。影响状态标志位:CF和OF;其它标志位没有影响。说明:当循环移位次数为1时,若循环左移以后操作数的最高位不等于CF,则将溢出标志OF置1;否则OF0。可用来表示移位前后的符号是否改变。2.ROR指令

11、(循环右移)格式:同ROL指令。功能:与ROL指令类似,只是目的操作数中的各位循环右移,而不是循环左移。,3.2 逻辑运算指令,3.RCL指令(带进位循环左移)格式:同ROL指令。功能:该指令对目的操作数(字节或字)中的各位循环左移,进位标志CF被看作目的操作数的“一部分”。每执行一次(每移1位),CF的值循环移入目的操作数的低位,而目的操作数的高位移入CF。4.RCR指令(带进位循环右移)格式:同ROL指令。功能:该指令与RCL指令类似,只是循环往右移,而不是左移。以上指令说明:循环移位与算术或逻辑移位指令不同,循环移位时移出操作数的位并不丢失而是循环送回操作数的另一端,移位的位数,3.2

12、逻辑运算指令,由计数值COUNT规定。循环移位指令因将称出的位移至CF,而且只要循环8位(对字节)或16位(对字)操作数就会恢复原状。故利用循环移位后测试CF的方法测试字节或字的某一位是0还是1。方法是利用循环移位指令将要测试的位移入CF,然后由测试CF的条件转移指令JC(CF1时转移)或JNC(CF0时转移)进行测试。如果再想恢复操作数的原值,只要继续循环移位8位或16位即可。RCL和RCR这两条带进位标志的循环移位指令将进位标志看作是操作数的扩展部分,这就允许CF作为一位信息移入操作数。利用这一点可实现多字节的数的移位。例如若有一个双字数,它们或是放在两个通用寄存器中(如DX和AX),或是

13、放在连续的内存单元中。可这样实现四个字节整个左移1位:,3.2 逻辑运算指令,SHL AX,1 或 SHL FIRSTWORD,1RCL DX,1 RCL SECONDWORD,1,CF,高位,低位,目的操作数,ROL指令操作,CF,高位,低位,目的操作数,ROR指令操作,CF,高位,低位,目的操作数,RCL指令操作,CF,高位,低位,目的操作数,RCR指令操作,3.2 逻辑运算指令,四、举例1.非压缩型BCD码的输入输出例EX3.2.1 ASC码转换成非压缩BCD码例EX3.2.2 非压缩BCD码转换成ASC码假设十进制数字低位存放在低地址字节,输出时应从高位开始依次显示出来。,源程序示例,

14、源程序示例,3.2 逻辑运算指令,四、举例2.压缩型BCD码的输入输出例EX3.2.3 压缩型BCD码的输入例EX3.2.4 压缩型BCD码的输出假设十进制数字低位存放在低地址字节,输出时应从高位开始依次显示出来。,源程序示例,源程序示例,4 分支程序,介绍比较和转移指令的格式、功能和用法 学习结合用比较和转移指令来实现分支程序和多分支程序的编写方法,4.1 标号,一、标号的定义标号(过程名亦视为标号)用来说明可执行指令在汇编语言程序中的位置。标号可作为转移指令的操作数,其有三种属性:段(SEGMENT)、位移量(OFFSET)和距离(DISTANCE)段和位移量属性就是在哪个段中、什么位置上

15、定义的标号。标号只要定义,这两个属性就自然产生。而距离属性有两种取值分别为NEAR(段内)和FAR(段间),需要在定义标号时指出1.定义距离属性为NEAR的标号距离属性为NEAR的标号可以用隐含的说明,即在标号后面加上冒号,放在指令前面。如:L1: MOV AX,BX距离属性为NEAR的标号也可以显示说明,即用LABEL伪指令明显地说明或在EQU伪指令中用THIS操作符明显地指明。,4.1 标号,如:L2 LABEL NEARMOV CX,5L3 EQU THIS NEARAND AX,OFFH2.定义距离属性为FAR的标号FAR属性的标号没有隐式说明,只能用显式说明,即使用LABEL伪指令明

16、显地说明或在EQU伪指令中用THIS操作符明显地指明。如:L4 LABEL FARMOV AX,DXL5 EQU THIS FAROR AL,30H,4.1 标号,3.同一条指令处可以定义两个距离属性不同的标号,以提高访问标号的灵活性。如:L6 LABEL FARL7:XOR AX,0F0FH 二、允许对标号进行操作的操作符1.SEG操作符格式:SEG 标号名功能:返回标号所在段的基址。例如:MOV AX,SEG L2 ;将标号L2所在段的基址送AX2.OFFSET操作符格式:OFFSET 标号名功能:返回标号在它所在段的位移量。,4.1 标号,例如:MOV BX,OFFSET L2;将标号L2所在段的位移量 送至BX3.TYPE操作符格式:TYPE 标号名功能:返回标号的距离属性值NEAR或FAR。,4.2 比较和转移指令,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号