汇编语言课件第八章

上传人:w****i 文档编号:94351133 上传时间:2019-08-06 格式:PPT 页数:43 大小:1.13MB
返回 下载 相关 举报
汇编语言课件第八章_第1页
第1页 / 共43页
汇编语言课件第八章_第2页
第2页 / 共43页
汇编语言课件第八章_第3页
第3页 / 共43页
汇编语言课件第八章_第4页
第4页 / 共43页
汇编语言课件第八章_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《汇编语言课件第八章》由会员分享,可在线阅读,更多相关《汇编语言课件第八章(43页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序设计 -朱耀庭,,南开大学 朱耀庭,,第8章 逻辑运算,逻辑运算指令是对字节或字中的各位进行运算的指令,即它是位运算指令。 在目前计算机广泛应用的情况下,计算机大量的工作不是进行算术运算,而是进行信息处理、信息传送,这些都需要做大量的位运算。在研制系统软件或进行软件开发中也需要大量的位运算。 本章结合二进制数和BCD码的输入/输出问题来介绍逻辑运算指令的应用。与算术运算指令一样,逻辑运算的结果也对标志寄存器产生影响。 希望同学们在掌握逻辑运算指令及其程序设计的同时,关注逻辑运算与条件转移指令的关系,为分支程序设计奠定基础,南开大学 朱耀庭,,第8章 逻辑运算,8.4 逻辑运算指令应

2、用,8.3 循环移位指令,8.2 移位指令,8.1 逻辑运算指令,南开大学 朱耀庭,,8.1 逻辑运算指令,南开大学 朱耀庭,,1. AND指令,格式:AND 目的操作数,源操作数 功能:AND将两个操作数(字节或字)进行按位“逻辑与”运算,结果送回目的操作数。若原来的两个操作数中的对应位均为1,则结果中的该位置1;否则,该位置0。 作用:用AND指令可以将一个字节或字中的某些特定位清零,或者说将某些特定位截取下来。AND指令执行后,标志CF=0, OF=0, PF, SF, ZF反映操作的结果;AF未定义。 例如,设AL的每一位代表一个灯或开关状态,1表示灯亮或开关ON、0表示灯灭或开关OF

3、F。 则指令:AND AL, 10111111B的作用就是关掉第6位所在位置的灯或开关,其他位对应灯或开关状态不变。 而:AND AL, 01000000B的作用是关掉除第6位以外的灯或开关,而第6位的灯或开关保留原状态。,南开大学 朱耀庭,,2. TEST指令,格式:TEST 目的操作数,源操作数 功能:TEST对两个操作数进行逻辑与运算,但结果并不送至目的操作数。只是影响状态标志。此指令执行后两个操作数都不变。 作用:这条指令常用来检测一些条件是否满足,但又不希望改变原有的操作数的情况,即适用于检查一个字节或字中的某些特定位是否有一位为1。方法是:将要检查的字节或字作为本指令的一个操作数,

4、另一个操作数为指令要检查的位的逻辑乘常数。如果测试结果(TEST指令执行结果)不为0(即ZF=0),则说明至少有一个特定位为1。因此,通常是在TEST指令后面跟上一条条件转移指令,以便根据ZF是否为0来进行转移,南开大学 朱耀庭,,2. TEST指令,例如:设AL的每一位代表一个灯或开关状态,1表示灯亮或开关ON、0表示灯灭或开关OFF。 则程序段: TEST AL,01000000B JNZ L ;第6位对应灯亮或开关ON转标号L执行 ;第6位对应灯灭或开关OFF转标号L执行 例如:检查BL的低4位是否至少有一位为1的程序段可以书写如下: TEST BL,0FH JE L ;ZF=1时转L(

5、即低4位全为0时转L处) ;低4位至少有一位为1时的处理 L: ;低4位全为0时的处理,南开大学 朱耀庭,,3. OR指令(逻辑或、逻辑加),格式:OR 目的操作数,源操作数 功能:OR指令将两个操作数(字节或字)进行按位逻辑加操作,并将结果送至目的操作数。如果两个操作数中对应位有一个为1或全为1,则结果的该位为1;否则,结果的该位为0。 OR指令对状态标志的影响同AND指令。OR指令往往用于对字节或字的特定位置数(拼数)。 例如:OR AL,30H ;将AL高4位拼上3 又如:设AL的每一位代表一个灯或开关状态,1表示灯亮或开关ON、0表示灯灭或开关OFF。则指令:OR AL,0100000

6、0B的作用就是打开第6位所在位置的灯或开关,其他位对应灯或开关状态不变,南开大学 朱耀庭,,4. XOR指令(逻辑异或、称按位加),格式: XOR 目的操作数,源操作数 功能: XOR指令将两个操作数(字节或字)进行按位逻辑异或操作,并将结果送至目的操作数。如果两个操作数中对应位相同(均为0或均为1),则结果该位为0;否则,结果该位为1。该指令对状态标志的影响和AND指令相同。 XOR指令适用于对一个数(字节或字)或一个数的特定位求反 例如:将AL寄存器中数01011100B求反,只要逻辑异或常数0FFH(即8位全1)即可。 MOV AL,01011100B XOR AL,0FFH ;1010

7、0011B=AL,南开大学 朱耀庭,,4. XOR指令(逻辑异或、称按位加),再如:将AL寄存器的中间4位求反,只要逻辑异或立即数00111100B(即3CH)即可 XOR AL,3CH 又如: XOR AL,BL XOR AL,BL 结果AL不变。在图形显示时,这一特性往往用于动画制作。想想为什么?,南开大学 朱耀庭,,4. XOR指令(逻辑异或、称按位加),注意:以上4个逻辑指令的两个操作数均可以是同数据类型的寄存器操作数;或同数据类型的一个寄存器操作数和一个内存操作数;或目的操作数是寄存器或存储器,源操作数为立即数。 例如: AND ALPHADI,0FH OR GAMMABXSI,30

8、30H ;其中GAMA为字变量 XOR A,0FFH ;其中A为字节变量 TEST BYTE PTRDI,0F0H,南开大学 朱耀庭,,5. NOT指令(逻辑非、或叫求反码),格式:NOT 目的操作数 功能:NOT指令对目的操作数的每一位求反码,并将结果送回目的操作数 此指令只有目的操作数,目的操作数可以是通用寄存器也可以是存储器。具体操作是从0FFH(对于字节来说)或从0FFFFH(对字来说)中减去指定的操作数,并将结果送回目的操作数。此指令不改变状态标志,南开大学 朱耀庭,,8.2 移位指令,南开大学 朱耀庭,,1. SHL指令(逻辑左移),格式:SHL 目的操作数,COUNT 其中,目的

9、操作数可以是通用寄存器,也可以是存储器。 功能:SHL指令将目的操作数左移COUNT次(位)。最高位移入进位标志CF中去,而CF中原来的值被冲掉。移位后空出的最低位中填0,如图8-1所示。,图8-1 SHL指令操作过程,动画演示,南开大学 朱耀庭,,1. SHL指令(逻辑左移),移位次数COUNT若为1,则:SHL 目的操作数,。移位后目的操作数的最高位与CF不同,则将OF置1,否则OF=0。对于带符号数来说,这用来表示移位以后的符号位与移位前的符号位是否相同。若相同则OF=0,表示没有产生超位结果(因为每左移1位数值就扩大1倍)。 移位次数COUNT不为1,则:MOV CL,COUNT且SH

10、L 目的操作数,CL。移位后OF的值不能确定。 状态标志PF、SF、ZF表示移位后的结果;标志AF(辅助进位)总是不确定的;CF中总是包含从目的操作数中移出的最后一位的值。 例如: SHL AL,1 ;将(AL)左移一位 MOV CL,3 SHL,AL,CL ;将(AL)左移3位,南开大学 朱耀庭,,1. SHL指令(逻辑左移),用SHL指令将一个无符号数左移1位等于将数倍增(乘2),用SHL指令使数倍增比用乘法指令速度快得多。可以通过CF是否为0检查移位结果是否超位。比如,将8位数65(01000001B)左移1位得到130(10000010B)。这时CF=0指明没有超位。再将130左移1位

11、得到4(00000100B)。这时CF=1表明已超位,此时将OF置位(置1)。因此通过检查OF也可以知道是否超位。检查超位的方法是在移位指令后面跟上一条测试CF(或OF)的条件转移指令。,例8-1 读以下程序,并且说明输入一个字符后输出什么,南开大学 朱耀庭,,2. SHR指令(逻辑右移),格式:SHR指令格式和SHL相同。 功能:将一个无符号数向右移位,左边(最高位)出现空位补0,右边(低位)移至CF,如图8-2所示。 此指令影响状态标志:CF, OF, PF, SF, ZF, 但AF不确定。,图8-2 SHR指令操作过程,动画演示,南开大学 朱耀庭,,2. SHR指令(逻辑右移),SHR指

12、令适用于将一个无符号数减半,右移1位等于将数除以2。用SHR指令使数减半比用除法指令速度要快得多。另外,可以通过右移1位后看CF是否为0,检查数是否为偶数。CF为1表明此数不是偶数。比如将8位数11(0000101B)右移1位得到5(00000101),这时CF=1,故数11不是偶数。检查的方法是在移位指令后跟上一条测试CF的条件转移指令。,南开大学 朱耀庭,,3. SAL指令(算术左移),SAL指令同SHL指令,实际上SHL和SAL是同一条指令的两种助记符,它们执行的操作完全一样 它一般用于带符号位的数的倍增(乘2) 对于带符号的数检查超位时只能测试OF,南开大学 朱耀庭,,4. SAR指令

13、(算术右移),SAR指令类似于SHR指令,SAR同SHR的区别在于:SHR是连同符号位一起右移,左边(最高位)出现的空位补0;而SAR右移时符号位不动(保持不变),左边(数的最高位)出现的空位补上符号位的值。SAR指令的操作如图8-3所示。,图8-3 SAR指令操作过程,动画演示,南开大学 朱耀庭,,4. SAR指令(算术右移),SAR指令适用于将带符号位的数减半(除以2)。例如,用SAR指令将8位数+8(00001000)右移1位得到+4(00000100);将8位数-120(10001000)右移1位得-60(110001000)。 另外,用SAR指令将+5(00000101)右移1位(减

14、半)得+2(00000010);用SAR指令将-5(11111011)右移1位(减半)得-3(11111101)。可见SAR将奇数右移1位时,总是得出比该数的一半还小的结果。 值得注意的是:如果目的操作数为负的,且其中具有1的位数移出以后,则SAR指令产生的结果与用整数除IDIV指令产生的结果是不一样的。例如,-5经SAR在右移1位之后得-3,而用IDIV作整数-5被2除后得-2。这是因为IDIV指令将所有的数(包括正、负)向0进行舍入,而SAR指令将正数向0进行舍入,将负数向负无穷大进行舍入。,南开大学 朱耀庭,,4. SAR指令(算术右移),SAR影响状态标志有CF, OF, PF, SF

15、, ZF 综上所述,移位指令可以对字节(8位)或字(16位)中的位进行操作。 指令的第一个操作数为目的操作数,目的操作数可以是通用寄存器,也可以是存储器(各种寻址方式)。指令的第二个操作数不是通常的源操作数,而是移位次数计数值操作数,一条指令可实现高达255次移位的操作。指令中的移位计数值可以指定为1,或指定为寄存器CL,CL中包含移位次数。因此,需要事先将移位次数送入CL寄存器。,南开大学 朱耀庭,,4. SAR指令(算术右移),移位指令对标志的影响如下所述: (1) 在移位指令执行后,AF总是不确定的。 (2) 同逻辑指令、算术指令一样,通常移位指令的结果也要影响SF、ZF和PF。 (3) CF中总是含有从目的操作数中移出的最后一位的值。 (4) 在执行多位移位后,OF的内容不确定。对于1位的移位操作,如果操作

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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