最近在学习 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 |