三、位操作类指令
包括逻辑运算指令、测试指令和移位指令
指令名 |
指令格式 |
指令功能 |
标志位备注 |
逻辑运算指令 |
|
|
|
逻辑与 |
AND DEST,SRC |
DEST←(SRC)∩(DEST) |
SF、ZF、PF,置CF和OF为0,AF不确定 |
逻辑或 |
OR DEST,SRC |
DEST←(SRC)∪(DEST) |
SF、ZF、PF,置CF和OF为0,AF不确定 |
逻辑异或 |
XOR DEST,SRC |
DEST←(SRC)Å(DEST) |
SF、ZF、PF,置CF和OF为0,AF不确定 |
逻辑非 |
NOT DEST |
略 |
不影响标志位 |
测试指令 |
|
|
|
|
TEST DEST,SRC |
(SRC)∩(DEST) |
按结果置SF、ZF、PF,相与的结果不保存。CF、OF置0,AF不定 |
移位指令 |
|
|
|
算术移位指令 |
SAL DEST,COUNT |
左移COUNT次 |
影响OF、 SF、ZF、PF、CF,AF不确定 |
逻辑移位指令 |
SHL DEST,COUNT |
左移COUNT次 |
影响OF、 SF、ZF、PF、CF,AF不确定 |
非进位循环移位 |
ROL DEST,COUNT |
循环左移COUNT次 |
受影响的标志位OF、CF |
进位循环移位 |
RCL DEST,COUNT |
带CF循环左移COUNT次 |
受影响的标志位OF、CF |
1. AND指令
功能: 执行BIT与BIT之间的逻辑与运算
语法: AND r/m, r/m/data
影响标志: C,O,P,Z,S(其中CF与OF两个标志会被设为0)
2. OR指令
功能: 执行BIT与BIT之间的逻辑或运算
语法: OR r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0)
3. XOR指令
功能: 执行BIT与BIT之间的逻辑异或运算
语法: XOR r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0)
4. NOT指令
功能: 执行BIT与BIT之间的逻辑非运算
语法: NOT r/m
影响标志: 该指令不影响任何标志位
5. TEST指令
功能: 执行BIT与BIT之间的逻辑与运算,仅影响标志位
语法: TEST r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位
6. SAL指令
功能: 算术左移位指令,把目的操作数的低位向高位移,空出的低位补0。
语法: SAL r/m,data/CL
影响标志: C,P,Z,S,O
7. SAR指令
功能: 算术右移位指令,把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补。
语法: SAR r/m,data/CL
影响标志: C,P,Z,S,O
8. SHL指令
功能: 逻辑左移位指令,移位后空出的位补0。
语法: SHL r/m,data/CL
影响标志: C,P,Z,S,O
9. SHR指令
功能: 逻辑右移位指令,移位后空出的位补0。
语法: SHR r/m,data/CL
影响标志: C,P,Z,S,O
10. ROL指令
功能: 非进位循环左移指令
语法: ROL r/m,data/CL
影响标志: C,P,Z,S,O
11. ROR指令
功能: 非进位循环右移指令
语法: ROR r/m,data/CL
影响标志: C,P,Z,S,O
非进位循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。
12. RCL指令
功能: 带进位循环左移指令
语法: RCL r/m,data/CL
影响标志: C,P,Z,S,O
13. RCR指令
功能: 带进位循环右移指令
语法: RCR r/m,data/CL
影响标志: C,P,Z,S,O
带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF的值填补空出的位,移出的位再进入CF。