指令系统对于6个条件状态位的影响
CF:借位
OF:溢出
ZF:相等 /零
SF:符号
AF:辅助进位
PF:偶奇
一.ADD指令
有符号:运算结果超过有符号数范围,比如说:8位系统能够表示的有符号数范围为:
−
2
7
→
2
7
−
1
(
−
128
→
127
)
-2^7\to 2^7-1(-128\to 127)
−27→27−1(−128→127)
如果运算结果超出了该范围,那么OF=1,否则OF=0
无符号:如果两个无符号数字相加超过了最大取值范围,比如说:8位系统能够表示的无符号数字范围:
0
→
2
8
−
1
(
0
→
255
)
0\to 2^8-1(0\to 255)
0→28−1(0→255)
那么CF=1,否则=0。
tips:换句话说,无符号不可能溢出。
二.SUB指令
与ADD指令类似,稍微值得注意的是:无符号的情况是如果被减数小于了减数,那么OF要置位。其他的标志位看根运算结果修改。
三.NEG指令
NEG是求补指令,两种方式:
取
反
后
+
1
取反后+1
取反后+1
另一种为:
2
n
−
X
2^n-X
2n−X
因此,可以看的出来,NEG指令可以看成是用0减去擦偶哦书,那么很明显:
- X=0时,CF=0;
- 否则,CF=1;
其他的标志位根据情况置位。
四.INC/DEC指令
**不会影响CF标志位,这是它与add/sub x,1最大的区别。**其他的标志位根据情况置位。
五.逻辑布尔指令
AND/OR/NOT/XOR/TEST
- NOT指令不修改标志位;
- 其他的四个指令都会使得:OF=0,CF=0;
- 辅助标志位无定义;
- 其他的标志位根据情况置位;
六.逻辑移位指令
对于,算术和逻辑移位、双精度移位:
- 进位标志位为移入CF的数值;
- AF无定义;
- 其他4个标志位根据情况置位;
特别注意,对于**(带进位的)循环移位**:
-
进位标志位为移入CF的数值;
-
OF的影响:
- 移位次数等于1的时候,如果以为前后符号改变,那么OF=1;
- 如果移动次数不为1的时候,OF无定义;
-
不影响/修改:SF、ZF、PF、AF;
七.乘除法影响标志位
MUL/DIV-IMUL/IDIV
DIV/IDIV
执行DIV或IDIV后,所有算术运算状态标志位的值都不确定。
MUL
- 乘积高位不为0则CF=1,OF=1;
- PF/ZF/AF/SF无定义;
IMUL
-
如果乘积的高半部分不是低半部分符号位的扩展,那么进位标志位、溢出标志位置位;
tips:举个例子,如果低位是1011,那么高位的符号扩展应该为1111 总体为:1111 1011.
-
SF/ZF/AF/PF无定义;
参考文章和书籍:
- [CSDN文章:汇编语言中常用指令对标志位寄存器的影响]((9条消息) 汇编语言中常用指令对标志位寄存器的影响_wa_junye的博客-CSDN博客);
- 书籍:IBM-PC汇编语言程序设计;
ecpm-2-106307500-null-null.142v17rank_v33,157v15new_3&utm_term=标志位的影响总结&spm=1018.2226.3001.4187));
- 书籍:IBM-PC汇编语言程序设计;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!