控制语句(if-else+循环+switch)汇编规则

【1】说说条件码

最常用的的条件码有:

  • CF:进位标志 (无符号溢出)
  • ZF:零标志
  • SF:符号标志(结果为负数)
  • OF:溢出标志 (补码溢出, 有符号溢出)

【2】有两类指令设置条件码而不改变任何其他寄存器

cmp(cmpb, cmpw, cmpl) + test(testb, testw, testl)

You should know

  1. if-else + 循环(while + for + do-while ) + switch , 都是以跳转指令为基础的。
  2. switch 的重点在于使用了 称为 “跳转表”的一个数据结构。
    条件传送指令,如cmovl (contidional mov less )

【3】跳转指令及其编码(jmp 及其 jmp编码)

804828f : 74 05  ;je XXXXXX=0x05+0x8048291=0x8048296 

(也即jmp编码后的代码存储的是相对于它下一条指令的偏移地址)-(干货)

8048291 : e8 1e 00 00 00            call 80482b4

【4】(if-else+循环+switch)汇编规则

4.1)翻译条件分支if-else(基于条件传送指令的if-else汇编代码)

这里写图片描述
从上图中的汇编代码,我们可以看到,if-else的汇编规则(干货)

  • 1)先将变量暂存在registers中;
  • 2)汇编计算 if-else 里面的表达式;
  • 3)汇编比较 if-else的条件表达式;
  • 4)then ……

4.2)循环( do-while + while + for )

4.2.1)do-while 汇编规则

这里写图片描述
由上图,我们知道 do-while 循环的汇编规则(干货)

  • 1)暂存变量到registers,并初始化;
  • 2)汇编执行循环主体
  • 3)汇编计算while中的条件表达式的值(true or false);

4.2.2)while 汇编规则

这里写图片描述
由上图,我们知道while循环的汇编规则(干货)

  • 1)暂存变量到registers, 并初始化;
  • 2)汇编计算条件表达式的值(true or false);
  • 3)汇编执行循环体;
  • 4)再次汇编计算条件表达式的值(true or false);

4.2.3)for 汇编规则

这里写图片描述
由上图,我们知道for循环的汇编规则如下(干货)

  • 1)暂存变量到registers, 并初始化;
  • 2)汇编计算条件表达式的值(true or false);
  • 3)汇编执行循环体;
  • 4)汇编自增计数值i;
  • 5)再次汇编计算条件表达式的值(true or false);

4.3) switch 汇编规则

这里写图片描述

这里写图片描述
从上图中的汇编代码,我们可以看到,switch的汇编规则(干货)

  • 0)仔细看上图的.L7代码的排序,很有韵味;
  • 1)用registers来存储变量;
  • 2)判断n的case索引值偏移量(是否小于等于6):否》跳转到默认case;是》跳入case的偏移量地址;6是.L7表中表项的最大偏移值,7个表项(100, 101, 102, 103, 104, 105, 106),最大偏移值为6(基地址base=100);

(Attention): switch的(干货)就是它使用了一个叫做跳转表的东西, 而.L7 就是跳转表;


【5】条件传送指令

如条件传送指令 cmovl == contional mov l(后缀)
总的来说,条件数据传送指令提供了一种用条件控制转移来实现条件操作的替代策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zxing qr区域判断_如何在Java中使用Zxing和JFreeSVG创建QR Code SVG?

zxing qr区域判断在本文中,我们将研究如何使用Zxing QR代码生成库和JFreeSVG库在Java中创建QR Code SVG图像。 QR码生成 下面的代码使用Zxing库创建一个表示QR Code的java.awt.image.BufferedImage对象: public static BufferedImage getQRCode(String …

审批流_怎样让审批工作流和应用数据分离?

在企业行政管理中,审批是最常遇到的场景。传统管理中,人们会有纸张审批,而现在市场上已有大量的线上审批软件,他们帮助企业完成审批电子化,审批速度更快,信息也能留档。然而大部分审批软件都不够灵活&#…

java 反射api_反射是最重要的Java API

java 反射api前几天我在想-这是最重要的Java API。 哪种SE和EE API可以使大多数Java生态系统成为可能,而哪些API不能重新创建为第三方库。 正如您可能已经猜到标题一样,我认为它是Reflection API 。 是的,它不可避免地是每个项目的直接或间接…

前端校验表单项内容是否合规的JS脚本代码

用途:校验ip地址的格式 输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false; */ function isIP(strIP) { if (isNull(strIP)) return false; var re/^(\d).(\d).(\d).(\d)$/g //匹配IP地址的正则表达式 if(r…

过程(栈帧结构是干货)

【0】写在前面 过程(栈帧结构是干货);本文总结于csapp, 加上自己的理解;【1】栈帧结构 每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。 过程调用&#xf…

山东小学信息技术课本 python 五年级_山东教育出版社小学信息技术五年级上册教案 全册.doc...

山东教育出版社小学信息技术五年级上册教案 全册电子备课教学案学年度 第一学期学科 信息技术年级 五年级姓名教师个人备课情况统计一览表 项目?精备课二次备课课堂检测课后反思交流平台 篇数月份第( )月第( )月第( )月第( )月备注:为便于自查,此表由教…

apache ranger_Apache Ranger插件的美丽简洁

apache ranger如果您在这里,您已经知道什么是Apache Ranger 。 这是在Hadoop框架中管理安全性的最流行(即使不是唯一)的方法。 它与Active Directory,Kerberos和其他各种身份验证集成在一起,但是我认为最有趣的功能是其…

可重定位目标文件

【0】GCC将源代码转化成可执行代码的流程 (1)C预处理器cpp扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;(2)编译器ccl产生两个源代码的汇编代码:*.s;&a…

经典颜色的RGB值

红 RED    品红Magenta(热情)    CMYK:C15 M100 Y20 K0   RGB: R207 G0 B112    洋红Carmine(大胆)   CMYK: C100 M0 Y60 K10   RGB: R215 G0 B64    宝石红Ruby(富贵)   CMYK…

python中for x in range_python教程:对 [lambda x: x*i for i in range(4)] 理解

题目:lst [lambda x: x*i for i in range(4)]res [m(2) for m in lst]print res实际输出:[6, 6, 6, 6]想要输出 [0, 2, 4, 6] 应该怎么改?如下:lst [lambda x, ii: x*i for i in range(4)]res [m(2) for m in lst]print res这…

adf.test_在ADF 12.2.1.3中使用基于JSON的REST Web服务

adf.test以前,我曾发布过有关在ADF中使用基于ADF BC的REST Web服务的信息。 现在,本文讨论使用通用数据控件使用基于JSON的REST Web服务。 您还可以查看有关Web服务的先前文章,以获取更多信息。 在ADF 12.2.1中使用应用程序模块快速创建SOA…

JSON字符串封装成Bean对象/JSON串反序列化成实体类对象/JSON字符串转换成Java对象

文章目录使用阿里巴巴的 JSON使用 ObjectMapperJSON字段与实体类属性不一致首先,我们建立一个实体类,这里简单定义了 name、sex、age 三个属性,以及 get、set、tostring方法。public class Student {private String name;private String sex;…

端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)

【0】写在前面-为什么需要虚拟存储器? 0.1)定义:虚拟存储器其实就是借用了磁盘地址空间,还记得当初我们安装CentOS,划分的swap 文件系统吗? 0.2)VM简化了链接和加载、代码和数据共享,以及应用…

python gevent教程_Python的gevent框架的入门教程

Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。gevent是第三方库,通过greenlet实现协程,其基本思想是:当一个greenlet遇到IO操作时,比如访问网络&#xff0c…

qa/qc_专业QA如何实施可靠的CI / CD管道?

qa/qc过时的传统软件开发方法并不能接管不断升级的市场趋势,并且这些方法缺乏解决方案,无法解决引入“ 持续集成(CI)和持续交付(CD) ”的快速软件发布需求的增长。 除了CI / CD之外,您还需要具有…

程序员分类

1.优秀的debug能力 10K程序员:实现功能就不错了 20K程序员:编程我最牛,debug?我不太会! 30K程序员:编程有点慢,debug快速搞定,回家睡觉! 40K程序员:基本不写…

三菱q系列plc连接电脑步骤_三菱Q系列PLC与三菱变频器的CC-link通讯技术(我的学习笔记)...

三菱变频器可以通过CC-LINK的接线进行控制(但需要另购买选件FR-A7NC,这选件是与变频器配套的通讯适配器,插在三菱变频器的选件插槽中),从而可以减少接线提高效率减少错误,接CC-LINK只需4根线就可以完全控制…

react提交数据到数据库_React型关系数据库事务

react提交数据到数据库Spring Framework最近宣布将提供对React式事务管理的支持 。 让我们深入研究它对R2DBC(SQL数据库访问的React式规范)如何工作。 事务管理是一种模式,而不是特定于技术的。 从这个角度来看,它的属性和运行时…

实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)

【-1】写在前面: 以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842 complementary: 兼容性是指运行在前期CPU,如8086/8088上的的程序,也可以运行在其以后的处理器,如80286上; 【0】看看in…

Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?

先来解释一下这三种编码的历史吧: ANSI:最早的时候计算机ASCII码只能表示256个符号(含控制符号),这个字符集表示英文字母足够,其中,我们键盘上可见的符号的编码范围是从32到126(大小…