5逻辑运算和移位指令 1.docx
《5逻辑运算和移位指令 1.docx》由会员分享,可在线阅读,更多相关《5逻辑运算和移位指令 1.docx(10页珍藏版)》请在冰豆网上搜索。
5逻辑运算和移位指令1
三、逻辑运算和移位指令
逻辑运算和移位指令
逻辑运算指令
ANDDST,SRC
逻辑与指令
ORDST,SRC
逻辑或指令
XORDST,SRC
逻辑异或指令
TESTDST,SRC
测试指令
NOTOPR
逻辑非指令
移位指令
SHLOPR,CNT
逻辑左移指令
SALOPR,CNT
算术左移指令
SHROPR,CNT
逻辑右移指令
SAROPR,CNT
算术右移指令
ROLOPR,CNT
左循环移位指令
ROROPR,CNT
右循环移位指令
RCLOPR,CNT
带进位左循环移位指令
RCROPR,CNT
带进位右循环移位指令
SHLDDST,REG,CNT
SHRDDST,REG,CNT
逻辑运算指令
(1)AND逻辑与指令
格式:
ANDDST,SRC
功能:
(DST)←(DST)∧(SRC)(按位与)
操作数:
ANDMEM,IDATA
ANDREG,IDATA
ANDREG,MEM
ANDMEM,REG
ANDREG,REG
对标志寄存器的影响:
1)CF=OF=0;
2)根据运算结果设置SF、ZF、PF标志;
3)AF无定义。
说明:
1)利用AND指令,可以保留特定位(与1),同时屏蔽掉其它位(与0),以检测特定位。
2)利用AND指令,可以将某些特定位设置为0(与0),同时使其余位保持原值不变化(与1)。
3)一个寄存器和自身进行逻辑与运算,该寄存器内容不变。
但该运算影响了SF、ZF、PF三个标志位,并使OF和CF清零。
利用该特性,可以判断一个数据的正负、是否为零、以及数据的奇偶性。
(2)OR逻辑或指令
格式:
ORDST,SRC
功能:
(DST)←(DST)∨(SRC)(按位或)
操作数:
ORMEM,IDATA
ORREG,IDATA
ORREG,MEM
ORMEM,REG
ORREG,REG
对标志寄存器的影响:
1)CF=OF=0;
2)根据运算结果设置SF、ZF、PF标志;
3)AF无定义。
说明:
1)利用OR指令,可以将某些特定位设置为1(或1),同时使其余位保持原值不变化(或0)。
2)一个寄存器和自身进行逻辑或运算,该寄存器内容不变。
但该运算影响了SF、ZF、PF三个标志位,并使OF和CF清零。
利用该特性,可以判断一个数据的正负、是否为零、以及数据的奇偶性。
(3)XOR异或指令
格式:
XORDST,SRC
功能:
(DST)←(DST)⊕(SRC)(按位异或)
操作数:
XORMEM,IDATA
XORREG,IDATA
XORREG,MEM
XORMEM,REG
XORREG,REG
对标志寄存器的影响:
1)CF=OF=0;
2)根据运算结果设置SF、ZF、PF标志;
3)AF无定义。
说明:
1)用XOR指令,可以将某些特定位“求反”(异或1),同时使其余位保持原值不变化(异或0)。
2)利用XOR指令,还可以将某个寄存器内容清零。
例如:
XORAX,AX;AX清0,设置CF=0
(4)TEST测试指令
格式:
TESTOPR1,OPR2
功能:
(OPR1)∧(OPR2)(按位与),操作结果不保留,只根据操作结果的特征,设置条件码。
操作数:
ANDMEM,IDATA
ANDREG,IDATA
ANDREG,MEM
ANDMEM,REG
XX文库-让每个人平等地提升自我ANDREG,REG
对标志寄存器的影响:
1)CF=OF=0;
2)根据运算结果设置SF、ZF、PF标志;
3)AF无定义。
说明:
TEST指令经常被用于进行位测试,例如:
┇
TESTAL,01H
JZZERO;AL第0位为0,则跳转到标号ZERO处,否则继续执行
┇
(5)NOT逻辑非指令
格式:
NOTOPR
功能:
(OPR)←将(OPR)按位取反
操作数:
NOTREG
NOTMEM
对标志寄存器的影响:
对任何标志位都没有影响。
移位指令
操作数
①OPR:
寄存器操作数REG、存储器操作数MEM
②CNT:
立即数1,或者寄存器CL。
对标志寄存器的影响:
1CF位:
根据各条指令的规定来设置。
②OF位:
当CNT=1,既移位次数等于1时,如果移位后最高有效位的值发生变化,则OF=1;否则,OF=0。
当CNT>1时,既移位次数大于1时,该位无定义。
③SF、ZF、PF位:
根据移位后的结果进行设置;
④AF位无定义。
说明:
移位指令经常用来作乘以2/除以2的操作。
算术移位指令适用于带符号数的运算,SAL用来乘以2,SAR用来除以2。
逻辑移位指令适用于无符号数的运算,SHL用来乘以2;SHR用来除以2。
(1)SHL/SAL逻辑左移/算术左移指令
格式:
SHL/SALOPR,CNT
功能:
将操作数(OPR)的内容,左移CNT位,最高位给CF,最低位补0。
见下图所示:
(2)SHR逻辑右移指令
格式:
SHROPR,CNT
功能:
将操作数(OPR)的内容,右移CNT位,最高位补0,最低位送给CF。
见下图所示:
(3)SAR算术右移指令
格式:
SAROPR,CNT
功能:
将操作数(OPR)的内容,右移CNT位,最高位右移,同时再用其自身的值填入,最低位送给CF。
见下图所示:
循环移位指令
操作数
OPR:
寄存器操作数REG,存储器操作数MEM。
CNT:
立即数1,或者寄存器CL。
对标志寄存器的影响:
①CF位:
根据各条指令的规定设置;
②OF位:
当CNT=1,既移位次数等于1时,如果移位后最高有效位的值发生变化,则OF=1;否则,OF=0。
当CNT>1,既移位次数大于1时,该位无定义
③循环移位指令不影响除CF和OF以外的其他任何条件标志。
说明:
①循环移位指令可以用来改变操作数中所有位的位置,这在程序设计中还是很有用的。
②利用循环移位指令,可以对寄存器或存储器中的任一位进行位测试。
③利用带进位循环移位指令,还可以将两个以上的寄存器或存储器单元组合起来一起移位。
例如:
SHLAX,1;将DX:
AX左移一位,最高位给CF
RCLDX,1
(1)ROL左循环移位指令
格式:
ROLOPR,CNT
功能:
将操作数(OPR)的内容,左移CNT位,最高位给CF,同时补给最低位。
见下图所示:
(2)ROR右循环移位指令
格式:
ROROPR,CNT
功能:
将操作数(OPR)的内容,右移CNT位,最低位送给CF,同时补给最高位。
见下图所示:
(3)RCL带进位左循环移位指令
格式:
RCLOPR,CNT
功能:
(4)RCR带进位右循环移位指令
格式:
RCROPR,CNT
功能: