【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(后缀)
总的来说,条件数据传送指令提供了一种用条件控制转移来实现条件操作的替代策略。

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

  1. C语言,if循环 for 循环 while循环 switch循环 do...while()循环

    目录 一.if循环 二. switch循环 break语句 default子句 三.while循环 break在while循环中的作用 continue在while循环中的作用就是 四.for循环 b ...

  2. 逆向知识第十讲,循环在汇编中的表现形式,以及代码还原

    逆向知识第十讲,循环在汇编中的表现形式,以及代码还原 一丶do While在汇编中的表现形式 1.1高级代码: #include "stdafx.h"int main(int ar ...

  3. VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略

    VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介.案例应用之详细攻略 目录 VB.net编程语言学习之操作符/变量/常量/ ...

  4. 控制语句 for while if switch

    一.for-in 结构 for i in 0...4{ print(i)    //使用到了变量 i } for _ in 0...1{  // 后期没有使用到变量,可以直接用个下划线 _  占位就行 ...

  5. C语言流程控制语句——3个循环语句和一个条件语句

    循环控制语句 C语言有3种循环 for while do while while循环 我们先来看下while循环,流程图如下: 下来看个小示例 do while循环 流程图如下: 下来看个小示例 两个 ...

  6. java中的switch的规则_细细讲述Java技术开发的那些不为人知的规则

    本文介绍的Java规则的说明分为3个主要级别,中级是平时开发用的比较多的级别,在今后将陆续写出其他的规则.遵守了这些规则可以提高程序的效率.使代码又更好的可读性等. 一.在finally方法里关掉in ...

  7. Java继承知识之基本控制语句(if、switch与穿透现象)

    文章目录 一.if条件控制 二.switch条件控制语句 一.if条件控制 1.简单说明 和其他编程语言的用法是一样的, if(条件1){执行语句1; }else if(条件2){执行语句2; }el ...

  8. 【愚公系列】2021年12月 Java教学课程 14-流程控制语句之while循环

    文章目录 一.while循环 1.循环语句-while循环 2.while循环案例-珠穆朗玛峰 3.循环语句-dowhile循环 一.while循环 1.循环语句-while循环 while循环完整格 ...

  9. java中的switch的规则_Java基础语法

    switch分支 switch语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. switch语法格式如下: switch(expression){ case value : //语句 ...

最新文章

  1. php与html交互实现登录,php与html实现交互的基本操作
  2. 用flex进行网易云音乐界面构建和布局解析(2)
  3. python手机版下载3.7.2-Python3.5.2
  4. [转]Flex unit testflex-4-create-a-simple-unit-test-in-flash-builder
  5. Java迭代器ListIterator
  6. ElasticSearch启动报错,报ERROR: [3] bootstrap checks failed
  7. 【报告分享】2019全球数字经济新图景.pdf
  8. 利用WebBrowser获得页面部分数据
  9. mysql集群环境搭建
  10. Broadcast receiver之我见
  11. 带你了解HTTP协议(二)
  12. java 代码行数统计工具_代码行数统计工具
  13. 了解几种常用的哈希校验码
  14. 云杰恒指:8.29恒指期货实盘交易复盘
  15. dw中css目标规则命名,css 常用样式命名规则
  16. 微信JS-SDK录音的speex音频文件转换为wav
  17. Android项目开发:指南针(两种方法实现)
  18. 戴尔EMC服务器重装系统
  19. 选硬盘时,该选择SSD/SATA/SAS哪个好?
  20. 抖音八大推流机制是怎样的?鹰迪电子商务

热门文章

  1. CF938G Shortest Path Queries(线性基,线段树分治,并查集)
  2. CF924D. Contact ATC
  3. Educational Codeforces Round 112 (Rated for Div. 2)
  4. AcWing 1087. 修剪草坪28
  5. 网络流专题(最大流与费用流)(一)
  6. Secret Code(原题和变形题)
  7. P1232 [NOI2013] 树的计数
  8. Codeforces Round #699 (Div. 2) 题解
  9. P3128-最大流Max Flow【树上差分,LCA】
  10. [POI2015] Pustynia(差分约数,线段树优化建图,拓扑)