当前位置: 首页 > news >正文

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

相关文章:

  • MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出
  • StarRocks表设计——分区分桶与副本数
  • 基于微信小程序的健身房私教预约系统,附源码
  • 极其抽象的SpringSecurity理解
  • 【前端工程化面试题】webpack proxy的工作原理,为什么能解决跨域问题
  • devc++ 使用 winsock 实现 UDP 广播
  • Rust 初体验6
  • phpstrom创建thinkphp项目
  • 【Webpack】处理 js 资源
  • C++运算符重载(日期类的运算符重载为例)
  • js---webAPI
  • 原型设计模式
  • 工作心得——css让元素居中的方法
  • 嵌入式linux驱动开发篇之设备树
  • php 数组函数
  • 【Leetcode】104. 二叉树的最大深度
  • 【译】理解JavaScript:new 关键字
  • create-react-app项目添加less配置
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 一些 DOM 的知识点
  • Java精华积累:初学者都应该搞懂的问题
  • python大佬养成计划----difflib模块
  • Sublime text 3 3103 注册码
  • use Google search engine
  • web标准化(下)
  • 理清楚Vue的结构
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 时间复杂度与空间复杂度分析
  • 一个SAP顾问在美国的这些年
  • ​configparser --- 配置文件解析器​
  • # .NET Framework中使用命名管道进行进程间通信
  • ###STL(标准模板库)
  • #ifdef 的技巧用法
  • #预处理和函数的对比以及条件编译
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (超详细)语音信号处理之特征提取
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm高校实验室 毕业设计 800008
  • (篇九)MySQL常用内置函数
  • (全注解开发)学习Spring-MVC的第三天
  • (转) ns2/nam与nam实现相关的文件
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • **PHP分步表单提交思路(分页表单提交)
  • .NET Core 中插件式开发实现
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net访问oracle数据库性能问题
  • .NET企业级应用架构设计系列之应用服务器
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @RequestParam详解
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [\u4e00-\u9fa5] //匹配中文字符