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

相关推荐
艾莉丝努力练剑21 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
还债大湿兄2 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上5 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
Risehuxyc5 小时前
C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
开发语言·c++
不知道叫什么呀6 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc
秋说6 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
景彡先生8 小时前
C++编译期计算:常量表达式(constexpr)全解析
服务器·c++
秋说9 小时前
【PTA数据结构 | C语言版】字符串插入操作(不限长)
c语言·数据结构·算法
tan77º9 小时前
【Linux网络编程】应用层自定义协议与序列化
linux·运维·服务器·网络·c++·tcp/ip