C语言if语句底层原理,从汇编深入理解

i条件判断语句是程序中必不可少的语句,没有它程序就只会按照原先设定的顺序执行,而不会灵活变通,在cpu底层可没有"如果"这个概念,只有数值的体现。while循环也就比if语句多了个跳转到开头的地址重新判断的代码,本质也有判断。

if语句原理:cmp指令先用两个数相减,改变标志寄存器,如sf符号位,cf进位位,ov溢出位,zf零标志位,然后下面条件转移指令,cpu微电路中的程序计数器(ip)连接着多路分配器,把条件转移指令逻辑判断后的状态是0或1作为偏移值,如if(value!=0) a++;翻译成汇编是cmp dword ptr[value],0

je 0x00567894h,取相反的情况等于0才跳转到if执行的代码外的地址。je是将各bit上的数字作或运算,寄存器中只要有一位是1那么结果就是1,全是0结果才为0。0值处保存的是下一句指令的地址,1值保存着条件指令对应要跳转的代码地址。最后将ip改为多路分配器的对应偏移值内容。

相关推荐
UrSpecial28 分钟前
Linux线程
linux·开发语言·c++
郝学胜-神的一滴29 分钟前
深入浅出 C++20:新特性与实践
开发语言·c++·程序人生·算法·c++20
汉克老师42 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.1.15]第二部分编程题(2 、寻宝石)
c++·蓝桥杯·蓝桥杯c++·c++蓝桥杯·蓝桥杯选拔赛
大锦终1 小时前
【Linux】进程间通信
linux·运维·服务器·c++
闪电麦坤951 小时前
C/C++项目练习:命令行记账本
开发语言·c++
九皇叔叔1 小时前
【2】标识符
c语言
菜就多练,以前是以前,现在是现在1 小时前
Codeforces Round 1048 (Div. 2)
数据结构·c++·算法
野生的编程萌新2 小时前
【C++深学日志】从0开始的C++生活
c语言·开发语言·c++·算法
木心爱编程2 小时前
C++程序员速通C#:从Hello World到数据类型
c++·c#
ulias2122 小时前
单元最短路问题
数据库·c++·算法·动态规划