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

相关推荐
3824278271 分钟前
8086 CPU汇编伪操作汇总
汇编
承渊政道5 分钟前
C++学习之旅【C++内存管理、模板初阶以及STL简介】
c++·学习·visual studio
郝学胜-神的一滴7 分钟前
使用Qt OpenGL开发俄罗斯方块:从零到一实现经典游戏
c++·qt·程序人生·游戏·设计模式·系统架构·图形渲染
Elnaij23 分钟前
从C++开始的编程生活(15)——模板知识补充
开发语言·c++
cccyi729 分钟前
高级I/O编程:从Select、Poll到Epoll的演进与Reactor服务器实现
服务器·c++·reactor
Elnaij30 分钟前
从C++开始的编程生活(16)——继承
开发语言·c++
纵有疾風起35 分钟前
【C++11深度解析(2)】从新增类功能到智能指针的现代 C++ 核心新特性
开发语言·c++·经验分享·开源
沧澜sincerely43 分钟前
蓝桥杯103 日期问题
c++·蓝桥杯
qs70161 小时前
c直接调用FFmpeg命令无法执行问题
c语言·开发语言·ffmpeg
xiaolongmeiya1 小时前
P3810 【模板】三维偏序 / 陌上花开 cdq分治+树状数组
c++·算法