34逻辑运算指令_第1页
34逻辑运算指令_第2页
34逻辑运算指令_第3页
34逻辑运算指令_第4页
34逻辑运算指令_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1复习:复习:算术运算指令l比较指令比较指令 cmpl加加/ /减减1 1指令指令inc,decl不带进位的加不带进位的加/ /减法指令减法指令 add,subl带进位的加带进位的加/ /减法指令减法指令 adc,sbb23.4 逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位,包括以借位,包括以下两类:下两类: 逻辑位运算逻辑位运算 移位、循环移位移位、循环移位cf of sf zf pf af 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置 对标志位的影响对标志位的影响( (除除notnot指令外指令外) ): 31、逻辑运算指令有有5条指令。条

2、指令。(1)“与与”运算指令运算指令and(2)“或或”运算指令运算指令or(3)“异或异或”运算指令运算指令xor(4)“非非” 运算指令运算指令not(5)测试指令)测试指令test4(1) 逻辑”与” and对两个操作数进行按位逻辑对两个操作数进行按位逻辑“与与”操作。操作。格式:格式:and dst, src功能:功能: (dst)(src)(dst)用途:保留操作数的某几位,其他位清零。用途:保留操作数的某几位,其他位清零。 例1:and al,0fhand al,0fh 若执行前:(al)=35h (即5:字符5的ascii码值) 执行: 0011 0101 0000 1111 分

3、离了al后4位 0000 0101例:例:and dx, 0ff00h and dx, 0ff00h ;分离;分离dxdx内容的高内容的高8 8位位 and al, 0f0h and al, 0f0h ;分离;分离alal内容的高内容的高4 4位位执行后:(al)=05h(al)=05h ( (保留保留al中低中低4位,高位,高4位清位清0) ) 即:and al , 0fh sub al , 30h6例例2:al中有字符中有字符az, 将其转换成大将其转换成大写。写。;az61h7ah ;az41h5ah; a a20h z z20hand al,1101 1111b7例例3:测试:测试al

4、的的bit7,bit5,bit2是否都是是否都是1。 and al, 1010 0100bcmp al, 1010 0100b jz yes yes: 8对两个操作数进行按位逻辑对两个操作数进行按位逻辑”或或”操作。操作。格式:格式:or dst, src功能:功能: (dst)(src)(dst)用途:对操作数的某几位置用途:对操作数的某几位置1; 对两操作数进行组合。对两操作数进行组合。(2) 逻辑“或” or9例例1 1:把把al的第的第5位置为位置为1。 or al, 00100000b例例2:把把alal中的非压缩中的非压缩bcdbcd码变成相应十进制数的码变成相应十进制数的asci

5、iascii码。(求数字码。(求数字0 09 9的的asciiascii码)码) or al, 30h;09 = 30h39h10对操作数进行按位逻辑对操作数进行按位逻辑”非非”操作。操作。格式格式:not mem/reg(3) 逻辑“非”(取反) not 按位取反,原来是按位取反,原来是“0”的位变的位变为为“1”;原来是;原来是“1”的位变为的位变为“0”例:例:已知已知 cx0011 0101b 35hnot cx;cx1100 1010b0cah11对两个操作数按位进行对两个操作数按位进行”异或异或”操作。操作。格式:格式:xor dst, src功能:功能: (dst) (src)(

6、dst)用途:对用途:对regreg清零清零( (自身异或自身异或) ) 把把reg/memreg/mem的某几位变反的某几位变反( (与与11异或异或) )(4) 逻辑”异或” xor 例例1 1:把:把axax寄存器清零。寄存器清零。 例例2 2:把:把dhdh的高的高4 4位求反位求反, ,低低4 4位变不变位变不变 mov ax,0 xor ax,ax and ax,0 sub ax,ax xor dh,0f0h12三种运算指令的操作数通用寄存器通用寄存器通用寄存器通用寄存器立即数立即数存储器存储器 立即数立即数通用寄存器通用寄存器 存储器存储器目的操作数目的操作数源操作数源操作数13

7、三种运算指令的主要作用三种运算指令的主要作用指指 令令作作 用用举举 例例and使目的操作数某些位不变,使目的操作数某些位不变,某些位变成某些位变成0保留保留ax的最后的最后4位位不变,其余清不变,其余清0orxor使目的操作数某些位使目的操作数某些位不变,不变,某些位变成某些位变成1想把想把bx的低的低8位位置置1,其余不变,其余不变可以将目的操作数中的可以将目的操作数中的某某些位取反些位取反;还可以将还可以将通用寄存器清通用寄存器清0想把想把cx的内容的内容清清014andand指令可用于复位某些位(同指令可用于复位某些位(同0 0相与),不影响相与),不影响其他位:将其他位:将blbl中

8、中d d3 3和和d d0 0位清位清0 0,其他位不变,其他位不变and bl,1111 and bl,1111 0 011110 0b boror指令可用于置位某些位(同指令可用于置位某些位(同1 1相或),不影响其相或),不影响其他位:将他位:将blbl中中d d3 3和和d d0 0位置位置1 1,其他位不变,其他位不变or blor bl, 0000 , 0000 1 100001 1b bxorxor指令可用于求反某些位(同指令可用于求反某些位(同1 1相异或),不影相异或),不影响其他位:将响其他位:将blbl中中d d3 3和和d d0 0位求反,其他不变位求反,其他不变xor

9、 blxor bl, 0000 , 0000 1 100001 1b b总结:总结:15操作与操作与andand指令类似指令类似, ,但不将但不将”与与”的结果送回的结果送回, ,只影只影响标志位。响标志位。testtest指令常用于位测试指令常用于位测试, ,与条件转移指令一起用。与条件转移指令一起用。(5) 测试指令test类似类似cmp例:测试例:测试al的内容是否为负数。的内容是否为负数。 test al,80h ;检查检查al中中d7=1? jnz minus ;是是1(负数负数),转,转minus ;否则为正数否则为正数minus:162、移位指令(1)逻辑移位指令)逻辑移位指令(

10、2)算术移位指令)算术移位指令(3)循环循环移位指令移位指令(4)带进位位)带进位位循环循环移位指移位指令令目的操作数可以是字节或字;目的操作数可以是字节或字;以以cl为源操作数的移位指令执行以后,为源操作数的移位指令执行以后,cl的的值不变值不变。有有8条指令,分为以下四类。条指令,分为以下四类。1cl,存储器存储器通用寄存器通用寄存器目的操作数目的操作数源操作数源操作数17 逻辑左移指令逻辑左移指令 shl(shift leftshift left) 逻辑右移指令逻辑右移指令 shr(shift rightshift right) 算术左移指令算术左移指令 sal(shift arithm

11、etic leftshift arithmetic left) 算术右移指令算术右移指令 sar(shift arithmetic rightshift arithmetic right)这这4 4条指令的格式相同条指令的格式相同, ,以以salsal为例:为例:(1)非循环移位指令cl ;移位位数大于移位位数大于1时时1 ;移位位数等于移位位数等于1时时 sal mem/reg sal mem/reg, ,18逻辑左移指令shl(shift logical left) 格式:格式:shl dst,count功能功能:将:将dst中的中的8位或位或16位数向左移动位数向左移动count次,最次

12、,最后移出的位进入后移出的位进入cf,右边的,右边的count位移入位移入0。移动次数移动次数count只能为只能为1或或cl。如:如:shl ax,1 shl al,clcf dstd2d4d6d0d1d3d5d7“0”d7d1d3d5 0d0d2d4d619逻辑右移指令shr(shift logical right) 格式:格式: shr dst,count功能:功能:特点是移出的位进入进位位特点是移出的位进入进位位cf,空出的,空出的位用位用“0”填入。填入。dst cfd7d6d5d4d3d2d1d0d0“0”d3d5d7d1d2d4d6 0算术左移指令sal(shift arithm

13、etic left) dst cfd2d4d6d0d1d3d5d7格式:格式: sar dst,count功能:功能:将将dst中的中的8位或位或16位数向右移动位数向右移动count次,次,最后移出的位进入最后移出的位进入cf,最左边的位既向右移又保,最左边的位既向右移又保持不变。持不变。算术右移指令sar(shift arithmetic right) 格式:格式: sal dst,count功能:与逻辑左移指令功能完全相同。功能:与逻辑左移指令功能完全相同。d7d0d3d5d7d1d2d4d621非循环移位指令功能示意图最低位最高位cf0(a)算术/逻辑左移sal/shl最低位最高位cf

14、(b)算术右移sar最低位最高位cf(c)逻辑右移shr0算术/逻辑左移 shl / sal指令指令算术右移sarsar指令指令逻辑右移shrshr指令指令25movmov cl,4 cl,4movmov al,1111 0000b al,1111 0000b;al=f0hal=f0hshl al,1shl al,1;al=e0hal=e0h ;cf=1cf=1,sf=1sf=1、zf=0zf=0、pf=0pf=0,of=0of=0shr al,1shr al,1;al=70hal=70h ;cf=0cf=0,sf=0sf=0、zf=0zf=0、pf=0pf=0、of=1of=1sar al,

15、1sar al,1;al=38hal=38h ;cf=0cf=0,sf=0sf=0、zf=0zf=0、pf=0pf=0、of=of=0 0sar al,clsar al,cl;al=03hal=03h ;cf=1cf=1,sf=0sf=0、zf=0zf=0、pf=1pf=126算术移位算术移位把操作数看做把操作数看做有有符号数;符号数; 逻辑移位逻辑移位把操作数看做把操作数看做无无符号数。符号数。移位位数放在移位位数放在clcl寄存器中,如果只移寄存器中,如果只移1 1位位, ,也也 可以直接写在指令中。例如:可以直接写在指令中。例如: mov cl,4mov cl,4 shr al,cl s

16、hr al,cl ;alal中的内容右移中的内容右移4 4位位影响影响c,p,s,z,oc,p,s,z,o标志。标志。结果未溢出时:结果未溢出时: 左移左移1 1位位操作数操作数* *2 2 右移右移1 1位位操作数操作数/2/227例:把例:把al中的数中的数x乘乘10因为因为10=8+2=23+21,所以可用移位实现乘,所以可用移位实现乘10操作。操作。程序如下:程序如下: mov cl,3sal al,1 ; 2xmov ah,al sal al,1 ; 4x sal al,1 ; 8x add al,ah ; 8x+2x = 10 x28l用移位操作代替乘除法可提高运算速度用移位操作代

17、替乘除法可提高运算速度例:前例中计算例:前例中计算x* *1010。(1)(1)采用乘法指令采用乘法指令: : mov movbl,10bl,10 mul mulblbl 共需共需70707777个个t t周期。周期。(2)(2)采用移位和加法指令采用移位和加法指令: : sal salal,1 al,1 ; 2t2t mov movah,al ah,al ; 2t 2t sal salal,1 al,1 ; 2t2t sal salal,1 al,1 ; 2t2t add addal,ah al,ah ; 3t3t 只需只需1111个个t t周期周期, ,仅相当于乘法的仅相当于乘法的1/71

18、/7。29 不含进位位的循环左移指令不含进位位的循环左移指令 rol 不含进位位的循环右移指令不含进位位的循环右移指令 ror 含进位位的循环左移指令含进位位的循环左移指令 rcl 含进位位的循环右移指令含进位位的循环右移指令 rcr(2)循环移位指令格式同非循环移位指令。格式同非循环移位指令。移位位数放在移位位数放在clcl寄存器中,如果只移寄存器中,如果只移1 1位位, , 也可以直接写在指令中。也可以直接写在指令中。循环移位指令只影响标志位循环移位指令只影响标志位cfcf和和ofof。30循环左移指令rol(rotate left) 格式:格式: rol dst,count功能:功能:循

19、环右移指令ror(rotate right)格式:格式: ror dst,count功能:功能:d0cfd0d3d5d7d1d2d4d6d7cfd7d1d3d5d0d2d4d6cf带进位位循环左移指令(rotate left through carry)格式:格式: rcl dst,count功能:功能:cfd7d1d3d5d0d2d4d6带进位位循环右移指令(rotate right through carry)格式:格式: rcr dst,count功能:功能:cfcfd0d3d5d7d1d2d4d632(a) rol最低位最高位cf(c) rcl最低位最高位cf (b) ror最低位最高

20、位cf(d) rcr最低位最高位cf循环移位指令功能示意图rol指令指令ror指令指令rcl指令指令rcr指令指令37循环移位举例:循环移位举例:例例1:将:将al的高的高4位与低位与低4位互换。位互换。 mov cl,4 rol al,cl38dxaxcf0shl ax,1shl ax,1例:将例:将dx.axdx.ax中中3232位数值左移一位位数值左移一位rcl dx,1rcl dx,1391a02h1a00hcf cmp 1a00h,8000h ; cf1a00h的的d7 cmc;进位标志求反命令;进位标志求反命令 rcl word ptr1a02h,1 rcl word ptr1a00h,1例例2:将:将1a00h内存单元中的双字循环左移内存单元中的双字循环左移1位。位。40例例3 3:把:把alal最低位送最低位送blbl最低位,保持最低位,保持alal不变不变ror bl,1ror al,1rcl bl,1rol al,1al、blcfblcfalcfal之之d041移位指令小结指指 令令主要作用主要作用逻辑左移指令逻辑左移指令shl逻辑右移指令逻辑右移指令shr将操作数乘以将操作数乘以2的的cl次。次。将操作数除以将操作数除以2的的cl次。次。算术左移指令算术左移指令sal算术右移指令算术右移指令sar将操作数乘以将操作数乘以2的的cl次。次。将补码数除以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论