欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《汇编语言程序设计》第8章:逻辑运算.ppt

    • 资源ID:71358400       资源大小:1.14MB        全文页数:43页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《汇编语言程序设计》第8章:逻辑运算.ppt

    -朱耀庭汇编语言程序设计汇编语言程序设计-朱耀庭朱耀庭 第第8章章 逻辑运算逻辑运算v逻辑运算指令是对字节或字中的各位进行运算的指令,即逻辑运算指令是对字节或字中的各位进行运算的指令,即它是位运算指令。它是位运算指令。v在目前计算机广泛应用的情况下,计算机大量的工作不是在目前计算机广泛应用的情况下,计算机大量的工作不是进行算术运算,而是进行信息处理、信息传送,这些都需进行算术运算,而是进行信息处理、信息传送,这些都需要做大量的位运算。在研制系统软件或进行软件开发中也要做大量的位运算。在研制系统软件或进行软件开发中也需要大量的位运算。需要大量的位运算。v本章结合二进制数和本章结合二进制数和BCD码的输入码的输入/输出问题来介绍逻辑运输出问题来介绍逻辑运算指令的应用。与算术运算指令一样,逻辑运算的结果也算指令的应用。与算术运算指令一样,逻辑运算的结果也对标志寄存器产生影响。对标志寄存器产生影响。v希望同学们在掌握逻辑运算指令及其程序设计的同时,关希望同学们在掌握逻辑运算指令及其程序设计的同时,关注逻辑运算与条件转移指令的关系,为分支程序设计奠定注逻辑运算与条件转移指令的关系,为分支程序设计奠定基础基础 南开大学南开大学 朱耀庭朱耀庭第第8章章 逻辑运算逻辑运算 8.4 逻辑运算指令应用逻辑运算指令应用 8.3 循环移位指令循环移位指令 8.2 移位指令移位指令 8.1 逻辑运算指令逻辑运算指令南开大学南开大学 朱耀庭朱耀庭8.1 逻辑运算指令运算指令AND指令指令 1OR指令指令(逻辑或、逻辑加逻辑或、逻辑加)3NOT指令指令(逻辑非、或叫求反码逻辑非、或叫求反码)5TEST指令指令 2XOR指令指令(逻辑异或、称按位加逻辑异或、称按位加)南开大学南开大学 朱耀庭朱耀庭1.AND指令指令 v格式:格式:AND 目的操作数,源操作数目的操作数,源操作数v功能:功能:AND将两个操作数将两个操作数(字节或字字节或字)进行按位进行按位“逻辑与逻辑与”运算,结果运算,结果送回目的操作数。若原来的两个操作数中的对应位均为送回目的操作数。若原来的两个操作数中的对应位均为1,则结果中,则结果中的该位置的该位置1;否则,该位置;否则,该位置0。v作用:用作用:用AND指令可以将一个字节或字中的某些特定位清零,或者说指令可以将一个字节或字中的某些特定位清零,或者说将某些特定位截取下来。将某些特定位截取下来。AND指令执行后,标志指令执行后,标志CF=0,OF=0,PF,SF,ZF反映操作的结果;反映操作的结果;AF未定义。未定义。v例如,设例如,设AL的每一位代表一个灯或开关状态,的每一位代表一个灯或开关状态,1表示灯亮或开关表示灯亮或开关ON、0表示灯灭或开关表示灯灭或开关OFF。则指令:则指令:AND AL,10111111B的作用就是关掉第的作用就是关掉第6位所在位置的灯位所在位置的灯或开关,其他位对应灯或开关状态不变。或开关,其他位对应灯或开关状态不变。而:而:AND AL,01000000B的作用是关掉除第的作用是关掉除第6位以外的灯或开关,位以外的灯或开关,而第而第6位的灯或开关保留原状态。位的灯或开关保留原状态。南开大学南开大学 朱耀庭朱耀庭2.TEST指令指令 v格式:格式:TEST 目的操作数,源操作数目的操作数,源操作数v功能:功能:TEST对两个操作数进行逻辑与运算,但结果并不对两个操作数进行逻辑与运算,但结果并不送至目的操作数。只是影响状态标志。此指令执行后两个送至目的操作数。只是影响状态标志。此指令执行后两个操作数都不变。操作数都不变。v作用:这条指令常用来检测一些条件是否满足,但又不希作用:这条指令常用来检测一些条件是否满足,但又不希望改变原有的操作数的情况,即适用于检查一个字节或字望改变原有的操作数的情况,即适用于检查一个字节或字中的某些特定位是否有一位为中的某些特定位是否有一位为1。方法是:将要检查的字。方法是:将要检查的字节或字作为本指令的一个操作数,另一个操作数为指令要节或字作为本指令的一个操作数,另一个操作数为指令要检查的位的逻辑乘常数。如果测试结果检查的位的逻辑乘常数。如果测试结果(TEST指令执行结指令执行结果果)不为不为0(即即ZF=0),则说明至少有一个特定位为,则说明至少有一个特定位为1。因此,。因此,通常是在通常是在TEST指令后面跟上一条条件转移指令,以便根指令后面跟上一条条件转移指令,以便根据据ZF是否为是否为0来进行转移来进行转移 南开大学南开大学 朱耀庭朱耀庭2.TEST指令指令 v例如:设例如:设AL的每一位代表一个灯或开关状态,的每一位代表一个灯或开关状态,1表示灯亮表示灯亮或开关或开关ON、0表示灯灭或开关表示灯灭或开关OFF。v则程序段:则程序段:TEST AL,01000000B JNZ L ;第第6位对应灯亮或开关位对应灯亮或开关ON转标号转标号L执行执行 ;第第6位对应灯灭或开关位对应灯灭或开关OFF转标号转标号L执行执行v例如:检查例如:检查BL的低的低4位是否至少有一位为位是否至少有一位为1的程序段可以书的程序段可以书写如下:写如下:TEST BL,0FH JE L ;ZF=1时转时转L(即低即低4位全为位全为0时转时转L处处);低低4位至少有一位为位至少有一位为1时的处理时的处理 L:;低低4位全为位全为0时的处理时的处理南开大学南开大学 朱耀庭朱耀庭3.OR指令指令(逻辑或、逻辑加逻辑或、逻辑加)v格式:格式:OR 目的操作数,源操作数目的操作数,源操作数v功能:功能:OR指令将两个操作数指令将两个操作数(字节或字字节或字)进行按位逻辑加操进行按位逻辑加操作,并将结果送至目的操作数。如果两个操作数中对应位作,并将结果送至目的操作数。如果两个操作数中对应位有一个为有一个为1或全为或全为1,则结果的该位为,则结果的该位为1;否则,结果的该;否则,结果的该位为位为0。vOR指令对状态标志的影响同指令对状态标志的影响同AND指令。指令。OR指令往往用于指令往往用于对字节或字的特定位置数对字节或字的特定位置数(拼数拼数)。v例如:例如:OR AL,30H ;将将AL高高4位拼上位拼上3v又如:设又如:设AL的每一位代表一个灯或开关状态,的每一位代表一个灯或开关状态,1表示灯亮表示灯亮或开关或开关ON、0表示灯灭或开关表示灯灭或开关OFF。则指令:。则指令:OR AL,01000000B的作用就是打开第的作用就是打开第6位所在位置的灯或开关,位所在位置的灯或开关,其他位对应灯或开关状态不变其他位对应灯或开关状态不变南开大学南开大学 朱耀庭朱耀庭4.XOR指令指令(逻辑异或、称按位加逻辑异或、称按位加)v格式:格式:XOR 目的操作数,源操作数目的操作数,源操作数v功能:功能:XOR指令将两个操作数指令将两个操作数(字节或字字节或字)进行按位逻辑异进行按位逻辑异或操作,并将结果送至目的操作数。如果两个操作数中对或操作,并将结果送至目的操作数。如果两个操作数中对应位相同应位相同(均为均为0或均为或均为1),则结果该位为,则结果该位为0;否则,结果该;否则,结果该位为位为1。该指令对状态标志的影响和。该指令对状态标志的影响和AND指令相同。指令相同。vXOR指令适用于对一个数指令适用于对一个数(字节或字字节或字)或一个数的特定位求或一个数的特定位求反反 v例如:将例如:将AL寄存器中数寄存器中数01011100B求反,只要逻辑异或常求反,只要逻辑异或常数数0FFH(即即8位全位全1)即可。即可。MOV AL,01011100B XOR AL,0FFH ;10100011B=AL南开大学南开大学 朱耀庭朱耀庭4.XOR指令指令(逻辑异或、称按位加逻辑异或、称按位加)v再如:将再如:将AL寄存器的中间寄存器的中间4位求反,只要逻辑异或立即数位求反,只要逻辑异或立即数00111100B(即即3CH)即可即可 XOR AL,3CHv 又如:又如:XOR AL,BL XOR AL,BLv结果结果AL不变。在图形显示时,这一特性往往用于动画制作。不变。在图形显示时,这一特性往往用于动画制作。想想为什么?想想为什么?南开大学南开大学 朱耀庭朱耀庭4.XOR指令指令(逻辑异或、称按位加逻辑异或、称按位加)v注意:以上注意:以上4个逻辑指令的两个操作数均可以是同数据类个逻辑指令的两个操作数均可以是同数据类型的寄存器操作数;或同数据类型的一个寄存器操作数和型的寄存器操作数;或同数据类型的一个寄存器操作数和一个内存操作数;或目的操作数是寄存器或存储器,源操一个内存操作数;或目的操作数是寄存器或存储器,源操作数为立即数。作数为立即数。v例如:例如:AND ALPHADI,0FHOR GAMMABXSI,3030H;其中;其中GAMA为字变量为字变量XOR A,0FFH ;其中;其中A为字节变量为字节变量TEST BYTE PTRDI,0F0H 南开大学南开大学 朱耀庭朱耀庭5.NOT指令指令(逻辑非、或叫求反码逻辑非、或叫求反码)v格式:格式:NOT 目的操作数目的操作数v功能:功能:NOT指令对目的操作数的每一位求反码,并将结果指令对目的操作数的每一位求反码,并将结果送回目的操作数送回目的操作数v此指令只有目的操作数,目的操作数可以是通用寄存器也此指令只有目的操作数,目的操作数可以是通用寄存器也可以是存储器。具体操作是从可以是存储器。具体操作是从0FFH(对于字节来说对于字节来说)或从或从0FFFFH(对字来说对字来说)中减去指定的操作数,并将结果送回目中减去指定的操作数,并将结果送回目的操作数。此指令不改变状态标志的操作数。此指令不改变状态标志 南开大学南开大学 朱耀庭朱耀庭8.2 移位指令移位指令SHL指令指令(逻辑左移左移)1SAL指令指令(算算术左移左移)3SHR指令指令(逻辑右移右移)2SAR指令指令(算算术右移右移)南开大学南开大学 朱耀庭朱耀庭1.SHL指令指令(逻辑左移左移)v格式:格式:SHL 目的操作数,目的操作数,COUNTv其中,目的操作数可以是通用寄存器,也可以是存储器。其中,目的操作数可以是通用寄存器,也可以是存储器。v功能:功能:SHL指令将目的操作数左移指令将目的操作数左移COUNT次次(位位)。最高位。最高位移入进位标志移入进位标志CF中去,而中去,而CF中原来的值被冲掉。移位后中原来的值被冲掉。移位后空出的最低位中填空出的最低位中填0,如图,如图8-1所示。所示。图图8-1 SHL指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭1.SHL指令指令(逻辑左移左移)v移位次数移位次数COUNT若为若为1,则:,则:SHL目的操作数,。移目的操作数,。移位后目的操作数的最高位与位后目的操作数的最高位与CF不同,则将不同,则将OF置置1,否则,否则OF=0。对于带符号数来说,这用来表示移位以后的符号。对于带符号数来说,这用来表示移位以后的符号位与移位前的符号位是否相同。若相同则位与移位前的符号位是否相同。若相同则OF=0,表示没,表示没有产生超位结果有产生超位结果(因为每左移因为每左移1位数值就扩大位数值就扩大1倍倍)。v移位次数移位次数COUNT不为不为1,则:,则:MOV CL,COUNT且且SHL 目目的操作数,的操作数,CL。移位后。移位后OF的值不能确定。的值不能确定。v状态标志状态标志PF、SF、ZF表示移位后的结果;标志表示移位后的结果;标志AF(辅助进辅助进位位)总是不确定的;总是不确定的;CF中总是包含从目的操作数中移出的中总是包含从目的操作数中移出的最后一位的值。最后一位的值。v例如:例如:SHL AL,1 ;将;将(AL)左移一位左移一位 MOV CL,3 SHL,AL,CL ;将;将(AL)左移左移3位位南开大学南开大学 朱耀庭朱耀庭1.SHL指令指令(逻辑左移左移)v用用SHL指指令令将将一一个个无无符符号号数数左左移移1位位等等于于将将数数倍倍增增(乘乘2),用用SHL指指令令使使数数倍倍增增比比用用乘乘法法指指令令速速度度快快得得多多。可可以以通通过过CF是是否否为为0检检查查移移位位结结果果是是否否超超位位。比比如如,将将8位位数数65(01000001B)左左 移移 1位位 得得 到到 130(10000010B)。这这 时时CF=0指指明明没没有有超超位位。再再将将130左左移移1位位得得到到4(00000100B)。这这时时CF=1表表明明已已超超位位,此此时时将将OF置置位位(置置1)。因因此此通通过过检检查查OF也也可可以以知知道道是是否否超超位位。检检查查超超位位的的方方法法是是在在移移位位指指令令后面跟上一条测试后面跟上一条测试CF(或或OF)的条件转移指令。的条件转移指令。例例8-1 读以下程序,并且说明输入一个字符后输出什么读以下程序,并且说明输入一个字符后输出什么南开大学南开大学 朱耀庭朱耀庭2.SHR指令指令(逻辑右移右移)v格式:格式:SHR指令格式和指令格式和SHL相同。相同。v功能:将一个无符号数向右移位,左边功能:将一个无符号数向右移位,左边(最高位最高位)出现空位出现空位补补0,右边,右边(低位低位)移至移至CF,如图,如图8-2所示。所示。v此指令影响状态标志:此指令影响状态标志:CF,OF,PF,SF,ZF,但但AF不确定。不确定。图图8-2 SHR指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭2.SHR指令指令(逻辑右移右移)vSHR指指令令适适用用于于将将一一个个无无符符号号数数减减半半,右右移移1位位等等于于将将数数除除以以2。用用SHR指指令令使使数数减减半半比比用用除除法法指指令令速速度度要要快快得得多多。另另外外,可可以以通通过右右移移1位位后后看看CF是是否否为0,检查数数是是否否为偶偶数数。CF为1表表明明此此数数不不是是偶偶数数。比比如如将将8位位数数11(0000101B)右右移移1位位得得到到5(00000101),这时CF=1,故故数数11不不是是偶偶数数。检查的的方方法法是是在在移移位位指指令令后后跟跟上上一一条条测试CF的条件的条件转移指令。移指令。南开大学南开大学 朱耀庭朱耀庭3.SAL指令指令(算算术左移左移)v SAL指指令令同同SHL指指令令,实际上上SHL和和SAL是是同同一一条条指指令令的两种助的两种助记符,它符,它们执行的操作完全一行的操作完全一样v它一般用于它一般用于带符号位的数的倍增符号位的数的倍增(乘乘2)v对于于带符号的数符号的数检查超位超位时只能只能测试OF 南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)vSAR指指令令类似似于于SHR指指令令,SAR同同SHR的的区区别在在于于:SHR是是连同同符符号号位位一一起起右右移移,左左边(最最高高位位)出出现的的空空位位补0;而而SAR右右移移时符符号号位位不不动(保保持持不不变),左左边(数数的的最最高高位位)出出现的的空空位位补上上符符号号位位的的值。SAR指指令令的的操操作作如如图8-3所所示。示。图图8-3 SAR指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)vSAR指令适用于将指令适用于将带符号位的数减半符号位的数减半(除以除以2)。例如,用。例如,用SAR指令将指令将8位数位数+8(00001000)右移右移1位得到位得到+4(00000100);将;将8位数位数-120(10001000)右移右移1位得位得-60(110001000)。v另外,用另外,用SAR指令将指令将+5(00000101)右移右移1位位(减半减半)得得+2(00000010);用用SAR指令将指令将-5(11111011)右移右移1位位(减半减半)得得-3(11111101)。可。可见SAR将奇数右移将奇数右移1位位时,总是得出比是得出比该数的一半数的一半还小的小的结果。果。v值得注意的是:如果目的操作数得注意的是:如果目的操作数为负的,且其中具有的,且其中具有1的位数移出以的位数移出以后,后,则SAR指令指令产生的生的结果与用整数除果与用整数除IDIV指令指令产生的生的结果是不一果是不一样的。例如,的。例如,-5经SAR在右移在右移1位之后得位之后得-3,而用,而用IDIV作整数作整数-5被被2除后除后得得-2。这是因是因为IDIV指令将所有的数指令将所有的数(包括正、包括正、负)向向0进行舍入,而行舍入,而SAR指令将正数向指令将正数向0进行舍入,将行舍入,将负数向数向负无无穷大大进行舍入。行舍入。南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)vSAR影响状影响状态标志有志有CF,OF,PF,SF,ZFv综上所述,移位指令可以上所述,移位指令可以对字字节(8位位)或字或字(16位位)中的位中的位进行操作。行操作。v指令的第一个操作数指令的第一个操作数为目的操作数,目的操作数可以是通目的操作数,目的操作数可以是通用寄存器,也可以是存用寄存器,也可以是存储器器(各种各种寻址方式址方式)。指令的第二。指令的第二个操作数不是通常的源操作数,而是移位次数个操作数不是通常的源操作数,而是移位次数计数数值操作操作数,一条指令可数,一条指令可实现高达高达255次移位的操作。指令中的移次移位的操作。指令中的移位位计数数值可以指定可以指定为1,或指定,或指定为寄存器寄存器CL,CL中包含移中包含移位次数。因此,需要事先将移位次数送入位次数。因此,需要事先将移位次数送入CL寄存器。寄存器。南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)v移位指令对标志的影响如下所述:移位指令对标志的影响如下所述:(1)在移位指令在移位指令执行后,行后,AF总是不确定的。是不确定的。(2)同同逻辑指令、算指令、算术指令一指令一样,通常移位指令的,通常移位指令的结果也果也要影响要影响SF、ZF和和PF。(3)CF中中总是含有从目的操作数中移出的最后一位的是含有从目的操作数中移出的最后一位的值。(4)在在执行多位移位后,行多位移位后,OF的内容不确定。的内容不确定。对于于1位的移位的移位操作,如果操作数的最高位位操作,如果操作数的最高位(符号位符号位)在指令在指令执行后被改行后被改变,OF就被置位;反之,如果操作数的最高位在指令就被置位;反之,如果操作数的最高位在指令执行后仍保持原来的行后仍保持原来的值,则OF被清零。被清零。南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)v在数的输入输出过程中,乘在数的输入输出过程中,乘10的操作是经常要进行的。的操作是经常要进行的。80868088提供了乘法指令,乘提供了乘法指令,乘10可以采用乘法指令来可以采用乘法指令来做,但是如果我们查阅一下做,但是如果我们查阅一下80868088有关乘法指令的有关乘法指令的资料,可以知道,乘法指令执行时间最短的是在寄存器资料,可以知道,乘法指令执行时间最短的是在寄存器中的两个字节相乘,需要中的两个字节相乘,需要70个时钟。而个时钟。而X*10=X*2X*8,因此,将,因此,将AL中的数乘中的数乘10也可以采用移位和相加的办法也可以采用移位和相加的办法来实现,故可用以下程序段实现之。来实现,故可用以下程序段实现之。指指 令令 注注 解解 时钟数时钟数 SAL AL,1 ;X*2 2 MOV BL,AL ;送至送至BL暂存暂存 2 SAL AL,1 ;X*4 2 SAL AL,1 ;X*8 2 ADD AL,BL ;X*10 3 南开大学南开大学 朱耀庭朱耀庭4.SAR指令指令(算算术右移右移)v这样,从指令的数量来说,虽多了些,但是执行时间却要这样,从指令的数量来说,虽多了些,但是执行时间却要短得多。总共需要执行时间为短得多。总共需要执行时间为11个时钟。其中,个时钟。其中,X*2也可也可以用以用XX来实现,因此来实现,因此X*10也可以用以下程序段实现。也可以用以下程序段实现。指指 令令 注注 解解 时钟数时钟数 ADD AL,AL ;X*2 3 MOV BL,AL ;送至送至BL暂存暂存 2 ADD AL,AL ;X*4 3 ADD AL,AL ;X*8 3 ADD AL,BT ;X*10 3 v总执行时间为总执行时间为14个时钟,因此,采用移位的方法实现乘个时钟,因此,采用移位的方法实现乘10是较合适的是较合适的 例例8-2 读以下程序,并且说明输入一个字符后输出什么读以下程序,并且说明输入一个字符后输出什么 南开大学南开大学 朱耀庭朱耀庭8.3 循环移位指令循环移位指令 ROL指令指令(循循环左移左移)1RCL指令指令(通通过进位循位循环左移左移)3ROR指令指令(循循环右移右移)2RCR指令指令(通通过进位循位循环右移右移)南开大学南开大学 朱耀庭朱耀庭1.ROL指令指令(循循环左移左移)vROL指指令令,每每执行行一一次次(每每移移1位位),把把最最高高位位移移到到最最低低位位,同同时还把最高位移到把最高位移到CF。其操作示意如。其操作示意如图8-4所示所示:图图8-4 ROL指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭1.ROL指令指令(循循环左移左移)v当循环移位次数为当循环移位次数为1时,若循环左移以后操作数的最高位不时,若循环左移以后操作数的最高位不等于等于CF,则将溢出标志,则将溢出标志OF置置1v否则否则OF=0。这可以用来表示移位前后的符号是否改变。这可以用来表示移位前后的符号是否改变(OF=0,表示符号未变,表示符号未变)vROL指令只影响状态标志指令只影响状态标志CF和和OF 例例8-3读以下程序,并且说明输入一个字符后输出什么读以下程序,并且说明输入一个字符后输出什么 南开大学南开大学 朱耀庭朱耀庭2.ROR指令指令(循循环右移右移)vROR指指令令与与ROL指指令令类似似,只只是是目目的的操操作作数数(字字节或或字字)中中的的各各位位循循环右右移移,而而不不是是循循环左左移移。操操作作示示意意如如图8-5所所示示:图图8-5 ROR指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭3.RCL指令指令(通通过进位循位循环左移左移)vRCL指指令令对目目的的操操作作数数字字节或或字字中中的的各各位位循循环左左移移,进位位标志志CF被被看看作作目目的的操操作作数数的的“一一部部分分”。每每执行行一一次次(移移动1位位),CF的的值循循环移移入入目目的的操操作作数数的的低低位位,而而目目的的操操作作数数的高位移入的高位移入CF。操作示意如。操作示意如图8-6所示所示:图图8-6 RCL指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭4.RCR指令指令(通通过进位循位循环右移右移)vRCR指指令令与与RCL指指令令类似似,只只是是各各位位循循环右右移移,而而不不是是循循环左移。操作示意如左移。操作示意如图8-7所示所示:图图8-7 RCR指令操作过程指令操作过程动画演示动画演示南开大学南开大学 朱耀庭朱耀庭4.RCR指令指令(通通过进位循位循环右移右移)v循环移位与算术或逻辑移位不同,循环移位时移出操作数的位并不丢循环移位与算术或逻辑移位不同,循环移位时移出操作数的位并不丢失,而是循环送回操作数的另一端。移位的位数也由计数值操作数失,而是循环送回操作数的另一端。移位的位数也由计数值操作数(即即COUNT)规定,这一点和算术或逻辑移位指令一样。计数值可以指定规定,这一点和算术或逻辑移位指令一样。计数值可以指定为常数为常数1,或指定为,或指定为CL寄存器。寄存器。v循环移位指令可以对字节或字进行操作。因为它将移出的位移至循环移位指令可以对字节或字进行操作。因为它将移出的位移至CF,而且只要循环移位而且只要循环移位8位位(对字节对字节)或或16位位(对字对字),操作数就会恢复原状。,操作数就会恢复原状。因此,可以利用循环移位后测试因此,可以利用循环移位后测试CF的方法测试字节或字的某一位是的方法测试字节或字的某一位是0还是还是1。方法是利用循环移位指令将要测试的那一位移入。方法是利用循环移位指令将要测试的那一位移入CF,然后由,然后由测试测试CF的条件转移指令的条件转移指令JC(CF为为1时转移时转移)或或JNC(CF为为0时转移时转移)进行进行测试。如果再想恢复操作数原来的值,只要继续用同样的循环移位指测试。如果再想恢复操作数原来的值,只要继续用同样的循环移位指令移完令移完8位或位或16位即可。位即可。RCL和和RCR这两条带进位标志的循环移位这两条带进位标志的循环移位指令将进位标志看作是操作数的扩展部分,这就允许指令将进位标志看作是操作数的扩展部分,这就允许CF作为一位信息作为一位信息移入操作数,利用这一点可以实现多字节数的移位。移入操作数,利用这一点可以实现多字节数的移位。南开大学南开大学 朱耀庭朱耀庭4.RCR指令指令(通通过进位循位循环右移右移)v例如,若有一个双字数,它们或是放在两个通用寄存器中例如,若有一个双字数,它们或是放在两个通用寄存器中(例如例如DX和和AX),或是存放在连续的内存字单元中,那么怎样实现这,或是存放在连续的内存字单元中,那么怎样实现这4个字节数整个字节数整个左移个左移1位或整个右移位或整个右移1位呢位呢?v拿左移拿左移1位来说,可以先使低位来说,可以先使低16位左移位左移1位;再把高位;再把高16位左移位左移1位,其位,其中的困难在于如何将低中的困难在于如何将低16位中的最高位移至高位中的最高位移至高16位的最低位。用逻辑位的最低位。用逻辑左移指令可以把低左移指令可以把低16位中的最高位移至进位标志位中的最高位移至进位标志CF中,而要把高中,而要把高16位也左移一位,并且将位也左移一位,并且将CF的值移至它的低位,必须用带进位标志循环的值移至它的低位,必须用带进位标志循环左移指令左移指令RCL来完成。即可以用以下指令实现之:来完成。即可以用以下指令实现之:SHL AX,1 RCL DX,1 或或 SHL FIRST_WORD,1 RCL SECOND_WORD,南开大学南开大学 朱耀庭朱耀庭8.4 逻辑运算指令运算指令应用用 BCD码的的输入入输出出 二进制数的输入输出二进制数的输入输出 南开大学南开大学 朱耀庭朱耀庭8.4.1 BCD码的的输入入输出出 v例例8-4 非压缩型非压缩型BCD码的输入码的输入(ASCII码转换成非压缩码转换成非压缩BCD码码)实例。实例。v题目:从键盘上输入一个题目:从键盘上输入一个8位十进制数,要求将它以真正位十进制数,要求将它以真正的非压缩型的非压缩型BCD码的形式存放在内存输入缓冲区。码的形式存放在内存输入缓冲区。v设计思路:需要将输入的十进制数字设计思路:需要将输入的十进制数字(09)的的ASCII码转换码转换成对应的成对应的BCD码。码。09数字的数字的ASCII码为码为30H,31H,39H。因此,只要用逻辑指令。因此,只要用逻辑指令AND将其高将其高4位清零,即位清零,即为其对应的非压缩型为其对应的非压缩型BCD码。为此,需要在数据段分配一码。为此,需要在数据段分配一个具有个具有8个字节的内存输入缓冲区。假设从十进制数的高个字节的内存输入缓冲区。假设从十进制数的高位开始输入,将输入的数字转换成对应的位开始输入,将输入的数字转换成对应的BCD码后从低地码后从低地址字节开始依次存放。其实现程序如下址字节开始依次存放。其实现程序如下:例例8-4 非压缩型非压缩型BCD码的输入实例码的输入实例 南开大学南开大学 朱耀庭朱耀庭8.4.1 BCD码的的输入入输出出 v例例8-5 非压缩型非压缩型BCD码的输出码的输出(非压缩型非压缩型BCD码转换成码转换成ASCII码码)实例。实例。v题目:将内存缓冲区中的十进制数字题目:将内存缓冲区中的十进制数字(非压缩型非压缩型BCD码码)显显示在屏幕上。示在屏幕上。v设计思路:假设十进制数字低位存放在低地址字节,输出设计思路:假设十进制数字低位存放在低地址字节,输出时应从高位开始依次显示出来。显示输出数字时,应将时应从高位开始依次显示出来。显示输出数字时,应将09数字转换成数字转换成ASCII码,即用码,即用OR指令将其高指令将其高4位拼上位拼上3 例例8-5非压缩型非压缩型BCD码的输出码的输出实例实例 南开大学南开大学 朱耀庭朱耀庭8.4.1 BCD码的的输入入输出出 v例例8-6 压缩型压缩型BCD码的输入实例。码的输入实例。v题目:输入数字字符以题目:输入数字字符以ASCII码形式存到内存中,然后转换成压缩型码形式存到内存中,然后转换成压缩型BCD码重新存到内存中。码重新存到内存中。v设计思路:从高位开始输入十进制数字设计思路:从高位开始输入十进制数字(例如:例如:3,2,4,9,5),以,以ASCII码的形式从低地址字节开始依次存入码的形式从低地址字节开始依次存入ASC_BUF。数字以空。数字以空格键为结束,并且在接受数字字符时在格键为结束,并且在接受数字字符时在CX寄存器里记下个数。若个数寄存器里记下个数。若个数为奇数则将数字字符往后移动一个字节,空出的第为奇数则将数字字符往后移动一个字节,空出的第1个字节填入个字节填入0,并将个数加,并将个数加1使之为偶数个。因此,个数减半为转换成压缩型使之为偶数个。因此,个数减半为转换成压缩型BCD码后所占的字节数,将这个数字存入码后所占的字节数,将这个数字存入BCD_BUF缓冲区的第缓冲区的第1个字节。个字节。然后,将然后,将ASC_BUF中的中的ASCII码的高码的高4位清位清0,并用逻辑指令和移位,并用逻辑指令和移位指令将它们每两位拼在一起,成为压缩型指令将它们每两位拼在一起,成为压缩型BCD形式存入形式存入BCD_BUF(从从低地址的第二个字节开始依次存放低地址的第二个字节开始依次存放)。例例8-6 压缩型压缩型BCD码的输入实例码的输入实例 南开大学南开大学 朱耀庭朱耀庭8.4.1 BCD码的的输入入输出出 v例例8-7 压缩型压缩型BCD码的输出。码的输出。v题目:将内存缓冲区题目:将内存缓冲区(BUF)中的压缩型中的压缩型BCD码在屏幕上显码在屏幕上显示输出。示输出。v设计思路:假设十进制数字设计思路:假设十进制数字(压缩型压缩型BCD码码)的低位放在低的低位放在低地址,因此输出时需要从高地址地址,因此输出时需要从高地址(高位高位)开始。因为压缩型开始。因为压缩型BCD码是一个字节里存放两位十进制数字,所以将一个字码是一个字节里存放两位十进制数字,所以将一个字节里的节里的BCD码显示输出时需要将两位码显示输出时需要将两位BCD码分离出来。方码分离出来。方法是:用法是:用SHR指令将其右移指令将其右移4位,用位,用OR指令拼上指令拼上30H使之使之转换成转换成ASCII码并显示出来;然后用码并显示出来;然后用AND指令将这个字节指令将这个字节的低的低4位截取下来,拼上位截取下来,拼上30H显示出来显示出来:例例8-7 压缩型压缩型BCD码的输出码的输出 南开大学南开大学 朱耀庭朱耀庭8.4.1 BCD码的的输入入输出出 v说明:若将一个说明:若将一个8个字节长的十进制数字个字节长的十进制数字(16位位)显示输出,显示输出,用用LOOP指令实现循环指令实现循环8次,则需用次,则需用CX计循环次数。而用计循环次数。而用SHR指令右移指令右移4位时需要用位时需要用CL计移位次数,这时就会将计移位次数,这时就会将CX中循环的次数破坏掉。因此需要先将中循环的次数破坏掉。因此需要先将CX中的循环次数保存中的循环次数保存在一个存储器或寄存器字里在一个存储器或寄存器字里(比如比如BX),然后再将移位次数,然后再将移位次数4送至送至CL。在。在LOOP指令前再将指令前再将BX的值送回的值送回CX,以恢复,以恢复CX的内容。的内容。v 该程序执行后输出:该程序执行后输出:9078008947500434 南开大学南开大学 朱耀庭朱耀庭8.4.2 二进制数的输入输出二进制数的输入输出 v例例8-8 从键盘上输入十六进制数从键盘上输入十六进制数v设计思路:从键盘上输入的都是字符,即设计思路:从键盘上输入的都是字符,即ASCII码值,需要将其转换码值,需要将其转换成十六进制的数,比如输入成十六进制的数,比如输入14A0,转换成十六进制数,转换成十六进制数14A0H,存,存入一个字中。因此需要将入一个字中。因此需要将09,AF的的ASCII码转换成对应的十六进码转换成对应的十六进制数字。它们的对应关系如下:制数字。它们的对应关系如下:ASCII码:码:30H,31H,39H,41H,42H,46H 十六进制数字:十六进制数字:00H,01H,09H,0AH,0BH,0Fv由此可知:只要将由此可知:只要将0的的ASCII码的高码的高4位中的位中的3去掉,就成为与其对去掉,就成为与其对应的十六进制数值了。而应的十六进制数值了。而AF的的ASCII码比与之对应的十六进制数值码比与之对应的十六进制数值均大均大37H。因此从。因此从ASCII码中减去码中减去37H,剩下的就是相应的十六进制数,剩下的就是相应的十六进制数值。值。例例8-8 从键盘上输入十六进制数从键盘上输入十六进制数南开大学南开大学 朱耀庭朱耀庭8.4.2 二进制数的输入输出二进制数的输入输出 v 例例8-9 从键盘上输入十进制数并将其化为二进制数从键盘上输入十进制数并将其化为二进制数(简称简称“十化二十化二”输入输入)。v设计思路:实现十化二输入的程序与十六进制数的输入程设计思路:实现十化二输入的程序与十六进制数的输入程序极为相似,只需将输入的数字序极为相似,只需将输入的数字09的的ASCII码转换成对码转换成对应的数值送至应的数值送至AL。在把每一位十进制数拼在一起时,首先。在把每一位十进制数拼在一起时,首先将字缓冲区的内容乘将字缓冲区的内容乘10,然后用算术加法指令,然后用算术加法指令ADD加上加上AX(AH=0)的内容。假设输入十进制数字以逗号的内容。假设输入十进制数字以逗号,字字符作为一个数的结果。例如,键入符作为一个数的结果。例如,键入3456,或,或34,。,。例例8-9 从键盘上输入十进制数并将其化为二进制数从键盘上输入十进制数并将其化为二进制数南开大学南开大学 朱耀庭朱耀庭8.4.2 二进制数的输入输出二进制数的输入输出 v例例8-10 二化十输出二化十输出v设计思路:假设把设计思路:假设把CX寄存器中的无符号整数进行二化十输寄存器中的无符号整数进行二化十输出,则需要把出,则需要把CX中的数值转换成中的数值转换成BCD码,也就是要检查码,也就是要检查CX中的二进制数包含有多少个中的二进制数包含有多少个10000(2710H),多少个,多少个1000(03E8H),多少个,多少个100(64H),多少个,多少个10(0AH),再把,再把这些数以及剩下的个位数拼上这些数以及剩下的个位数拼上30H,使之变成对应的,使之变成对应的ASCII码,一位一位地显示出来。码,一位一位地显示出来。例例8-10 二化十输出二化十输出v用这种方法进行二化十输出不一定是个好的程序设计方法,用这种方法进行二化十输出不一定是个好的程序设计方法,而将无符号二进制数用而将无符号二进制数用“除十取余除十取余”的方法化为十进制数的方法化为十进制数可能更好些可能更好些 南开大学南开大学 朱耀庭朱耀庭-朱耀庭南开大学南开大学 朱耀庭朱耀庭

    注意事项

    本文(《汇编语言程序设计》第8章:逻辑运算.ppt)为本站会员(hyn****60)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开