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

相关推荐
星期天25 小时前
3.0 C语⾔内存函数:memcpy memmove memset memcmp 数据在内存中的存储:整数在内存中的存储 ⼤⼩端字节序和字节序判断
c语言·数据结构·进阶·内存函数·数据内存存储
实心儿儿7 小时前
C++ —— 模板进阶
开发语言·c++
go_bai8 小时前
Linux-线程2
linux·c++·经验分享·笔记·学习方法
j_xxx404_9 小时前
C++:继承(概念及定义|作用域|基类与派生类转换|默认成员函数|与友元、静态成员关系|多继承|组合)
数据结构·c++
欧阳x天10 小时前
C++入门(二)
开发语言·c++
代码雕刻家12 小时前
C语言的左对齐符号-
c语言·开发语言
编程之路,妙趣横生12 小时前
STL(五) priority_queue 基本用法 + 模拟实现
c++
一念一花一世界12 小时前
Arbess从初级到进阶(9) - 使用Arbess+GitLab实现C++项目自动化部署
c++·ci/cd·gitlab·arbess
大锦终12 小时前
【Linux】Reactor
linux·运维·服务器·c++
沐怡旸13 小时前
【穿越Effective C++】23.宁以non-member、non-friend替换member函数
c++·面试