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改为多路分配器的对应偏移值内容。

相关推荐
wangnaisheng15 分钟前
Intel IPP 图像处理相关函数
c++·c#·图像
hetao173383717 分钟前
2025-12-25~26 hetao1733837的刷题记录
c++·笔记·算法
你的冰西瓜20 分钟前
C++中的forward_list容器详解
开发语言·c++·stl·list
无垠的广袤28 分钟前
【FPB-RA6E2 开发板】Zephyr 串口打印 DHT11 温湿度
c++·单片机·串口通信·开发板·瑞萨·传感器·dht11
Tandy12356_1 小时前
手写TCP/IP协议——实现ping的响应
c语言·网络·c++·网络协议·tcp/ip·计算机网络
六个九十度1 小时前
用C语言把BCD编码的数字转换成普通16进制
c语言·bcd
CoderCodingNo1 小时前
【GESP】C++五级真题(数论、埃氏筛思想考点) luogu-B3969 [GESP202403 五级] B-smooth 数
开发语言·c++·算法
历程里程碑1 小时前
破解三数之和:双指针高效解法
c语言·数据结构·c++·经验分享·算法·leetcode·排序算法
Vect__1 小时前
25.12.27 算法日记——双指针
c++·算法
wangchen_01 小时前
C++<fstream> 深度解析:文件 I/O 全指南
开发语言·前端·c++