(一)逻辑运算指令
一、双操作数逻辑运算指令
1、指令格式:
AND dst,src ; “与”运算,
OR dst,src ; “或”运算
XOR dst,src ; “异或“运算。当src = 1是,dst = !dst;当src = 0时,dst = dst
TEST dst,src ; “与”运算,但是这个不返回结果,只是改变标志位
;以上四个操作符,都会改变ZF SF 和PF三个标志位
;经常使用TEST配合ZF来判断是否为0
二、单操作数逻辑运算指令
1、指令格式
NOT dst ; dst<—!dst
NEG dst ; 取补码
(二)移位指令
一、逻辑移位指令
SHR dst,cnt
SHL dst,cnt
二、算数移位指令
SAR dst,cnt
SAL dst,cnt
PS:注意点
1、cnt 是移位的位数,只能为1或者寄存器CL,也就是不是移1位的话,一定要使用寄存器CL
2、会影响OF、ZF、PF和SF标志位,其中OF为1:表示最高位发生变化,OF = 0,最高位没有发生变化
3、算术右移不会改变符号位
三、循环位移指令
ROR dst,cnt
ROL dst,cnt
四、带CF循环位移指令
RCR dst,cnt
RCL dst,cnt
PS:注意点
1、只影响OF标志位,其中OF为1:表示最高位发生变化,OF = 0,最高位没有发生变化
五、图示表示四个指令的区别
(三)十六进制转换为BCD码
一、除0AH取余法
所以十六进制数除以0AH的余数就是得到D0,再除就是得到D1,一次类推……
使用的除法指令要是32位除以16位的,因为商会超过8位。
二、除幂取商法
所以十六进制除以10000的商就是D4,再除以1000就是D3,依次类推……
三、连二乘法: