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

相关推荐
XXYBMOOO21 小时前
内核驱动开发与用户级驱动开发:深度对比与应用场景解析
linux·c++·驱动开发·嵌入式硬件·fpga开发·硬件工程
lengjingzju1 天前
一网打尽Linux IPC(三):System V IPC
linux·服务器·c语言
范纹杉想快点毕业1 天前
返璞归真还是拥抱现代?——嵌入式研发中的“裸机开发”与RTOS全景解析
c语言·数据库·mongodb·设计模式·nosql
SoveTingღ1 天前
【问题解析】我的客户端与服务器交互无响应了?
服务器·c++·qt·tcp
温宇飞1 天前
内存异常
c++
!停1 天前
c语言动态申请内存
c语言·开发语言·数据结构
挖矿大亨1 天前
C++中深拷贝与浅拷贝的原理
开发语言·c++·算法
Bruce_kaizy1 天前
c++图论——生成树之Kruskal&Prim算法
c++·算法·图论
雾岛听蓝1 天前
C++:模拟实现string类
开发语言·c++
XFF不秃头1 天前
力扣刷题笔记-合并区间
c++·笔记·算法·leetcode