逻辑运算指令
逻辑与指令
格式:AND DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是
通用寄存器或存储器操作数
AND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1即可
逻辑或指令
格式:OR DEST,SRC
功能:目的操作数和源操作数按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用
寄存器或存储器操作数。
OR指令常用于将操作数中某位置1,只须将要置1的位或1,其它不改变的位或0即可
逻辑异或指令
格式:XOR DEST,SRC
功能:目的操作数和源操作数按位进行逻辑异或运算,结果送目的操作数。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用
寄存器或存储器操作数。
XOR指令常用于将操作数中某些位取反,只须将要取反的位异或1,其它不改变的位异或0即可。可用于密码设置 于某个数异或两次 即可得到原数
逻辑非指令
格式:NOT DEST
功能:对目的操作数按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。
NOT指令对标志位无影响。
测试指令
格式:TEST DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通
用寄存器或存储器操作数。
TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后
判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1
移位指令
移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由CL间接给出。移位指令分一般移位指令和循环移位指令。
一般移位指令
算术/逻辑左移指令
格式:SAL DEST,OPRD
SHL DEST,OPRD
当中的L 就是代表左
功能:按照操作数OPRD规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0。
如图3 12(a)所示。目的操作数可以为通用寄存器或存储器操作数。
SAL,SHL指令影响标志位OF,SF,ZF,PF,CF。
逻辑左移是一样的 就相当于移多少位 就乘了2的多少次方
算术逻辑右移的最高位一直保持不变 其他位右移
逻辑右移的就是所有数挨个右移 这里的CF位只保存一位
算术右移指令。
格式:SAR DEST,OPRD SHR DEST,OPRD
功能:按照操作数OPRD规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变。
目的操作数可以为通用寄存器或存储器操作数。
SAR指令影响标志位OF,SF,ZF,PF,CF
无条件转移指令
格式:JMP TARGET
功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。转移分为短转移、段内转移(近程转移)和段间转移 (远程转移)
控制转移类指令
条件转移指令包括四类:单标志位条件转移;无符号数比较条件转移;带符号数比较条件转移;测试CX条件转移。
格式:Jcc TARGET
功能:若测试条件‘CC’为真,则转移到目标地址TARGET处执行程序。否则顺序执行。
(1) 单标志位条件转移指令
JZ NEXT;若标志ZF=1则转移到标号NEXT处执行。
(2) 无符号数比较条件转移
JA NEXT;无符号数A与B比较,若A>B则转移到标号NEXT处执行程序