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

相关推荐
阿拉伯柠檬12 分钟前
实现一个异步操作线程池
开发语言·数据结构·c++·面试
2301_8035545219 分钟前
Qt禁止子线程直接操作GUI
c++
羑悻的小杀马特39 分钟前
C++与Redis高效交互:通过optional与迭代器玩转String/List/Set......,打造高性能存储方案!
c++·redis·交互
+++.1 小时前
c++雪花屏(vsCode+cmake+mingw+ninja)
开发语言·c++·vscode
小年糕是糕手1 小时前
【C++】内存管理(下)
java·c语言·开发语言·数据结构·c++·算法
一叶之秋14121 小时前
深入剖析vector的底层实现原理
c++
艾莉丝努力练剑1 小时前
【Linux基础开发工具 (六)】Linux中的第一个系统程序——进度条Linux:详解回车、换行与缓冲区
java·linux·运维·服务器·c++·centos
ZouZou老师1 小时前
C++设计模式之单例模式:以小区快递柜为例
c++·单例模式·设计模式
蜗牛love天空1 小时前
qt窗口机制和mfc窗口机制
c++
定义小花1 小时前
c++ cmake qt
开发语言·c++·qt