最近在学习 16位汇编编程,所以顺便将每日所学记录下来,一方面为了巩固学习的知识,另一方面也为同样在学习汇编开发的童鞋们提供一份参考。
运行环境:
- 操作系统: Windows 10家庭版
 - 编译器:Windows XP Debug
 
逻辑运算指令
AND指令
AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中
AND指令设置CF = OF = 0,根据结果设置SF、ZF、PF状态
只有与的两位都是1,结果才是1,否则结果为0
1  | AND reg, reg  | 
demo:
1  | and AL, 11110110b ;清除位 0 和位 3 ,其他位不变  | 
OR指令
对两个操作数执行逻辑或运算,结果送到目的操作数;
只要相”或”的两位有一位是1,结果就是1;否则则为0
1  | OR reg,reg  | 
逻辑异或XOR指令
对两个操作数执行逻辑异或运算,结果送到目的操作数;
只有相”异或”的两位不相同,结果才是1,否则为0
XOR指令设置CF = OF = 0,根据结果设置SF、ZF和PF的状态
逻辑非指令
对一个操作数执行逻辑非运算
NOT指令是取反;
1  | NOT reg/mem; reg/mem <- ~reg/mem  | 
NOT指令是一个单操作数指令
NOT指令不会影响标志位

测试指令TEST
对两个操作数执行逻辑与运算,结果不回送到目的操作数
只有相”与”的两位都是1,结果才是1,否则,”与”的结果为0

CMP比较指令
CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数
| CMP结果 | ZF | CF | 
|---|---|---|
| 目的操作数 < 源操作数 | 0 | 1 | 
| 目的操作数 > 源操作数 | 0 | 0 | 
| 目的操作数 = 源操作数 | 1 | 0 |