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

相关推荐
宠..几秒前
创建标签控件
java·服务器·开发语言·前端·c++·qt
yuuki2332335 分钟前
【C++】类和对象(中)
android·java·c++·后端
玖剹12 分钟前
floodfill算法题目(二)
c语言·c++·算法·leetcode·深度优先·dfs·深度优先遍历
surtr112 分钟前
区间查询mex异或gcd (焰与霜的共鸣,可持久化线段树+思维)
数据结构·c++·算法·数学建模·stl·动态规划
自然常数e15 分钟前
深入理解指针(3)
c语言·visual studio
yolo_guo30 分钟前
opencv 学习: 11 图片像素位置变换,以图片加水波纹特效为例
c++·opencv·计算机视觉
序属秋秋秋30 分钟前
《Linux系统编程之进程环境》【地址空间】
linux·运维·服务器·c语言·c++·系统编程·进程地址空间
SunkingYang31 分钟前
Visual Studio 2022开发C/C++库:解决只生成DLL未生成LIB文件的完整指南
c++·库文件·未生成lib·只生成dll
C.L.L31 分钟前
C++ vscode调试——如何方便查看动态二维矩阵
开发语言·c++·矩阵