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

相关推荐
h^hh31 分钟前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
Dreams°1231 小时前
【透过 C++ 实现数据结构:链表、数组、树和图蕴含的逻辑深度解析】
开发语言·数据结构·c++·mysql
wanjiazhongqi2 小时前
链表和STL —— list 【复习笔记】
数据结构·c++·笔记·链表
张海森-1688202 小时前
c语言 枚举用法技巧
c语言
-sky-12 小时前
2.21作业
开发语言·c++·算法
li星野2 小时前
std::thread的同步机制
开发语言·c++·学习
HL_LOVE_C2 小时前
全面理解-回调函数CallBack
开发语言·c++
深图智能2 小时前
VS2022配置FFMPEG库基础教程
c++·计算机视觉·ffmpeg
MSTcheng.3 小时前
【C语言】指针(5)
c语言·开发语言
╮壞孩子的天3 小时前
C语言多人聊天室 ---chat(客户端聊天)
c语言·开发语言