【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. 简易计算器实现:while循环+switch语句

    个人练习: 写一个计算器,要求实现加减乘除功能,并且能循环接收新的数据,通过用户交互实现(即Scanner对象) 用到了 while循环 switch语句,实现了数据的循环输入并计算!!!!妙啊!!! ...

  2. Java控制语句——分支、循环、跳转

    分支语句(if语句,switch语句): 循环语句(for,while,do...while); 跳转语句(break,continue,return): 分支语句(if语句,switch语句) if ...

  3. Python基础2:流程控制语句 while / for循环

    [ while 循环 ] 如果要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+ ...

  4. 控制语句 for while if switch

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

  5. 1-23-shell脚本之-if流程控制语句和for循环语句的使用

    大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句   ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号 ...

  6. Go-函数高级使用-条件分支-包管理-for循环-switch语句-数组及切片-与或非逻辑符

    目录 科普 python 注释 # 函数高级 if else if else 包管理 下载第三方包 比较热门的框架 for 循环 for 循环的几种写法 switch 语句 数组及数组切片 数组迭代 ...

  7. linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句

    条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础   test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...

  8. oracle的控制语句if和循环语句loop while for

    pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...

  9. for循环的表达规则,for循环的嵌套,跳转语句;穷举;迭代;异常处理

    for循环的基本格式 for(表达式1:表达式2:表达式3) { 循环体: } for循环的四要素 表达式1就是变量初始化:表达式2就是循环条件:表达式3是状态改变 static void Main( ...

随机推荐

  1. python 缩进问题

    200 ? "200px" : this.width)!important;} --> 介绍 在python中认为规定4个空格缩进,缩进的代码可以理解成一个块,但是使用缩进也 ...

  2. ActiveMQ简介与安装

    开源消息总线 支持JMS1.1和J2EE 1.4规范的 JMS Provider实现(持久化,XA消息,事务) 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去 支持 ...

  3. ps:探索按钮按起落下的技巧

    (从死了一次又一次终于挂掉的百度空间中抢救出来的,发表日期 2014-07-10) 先上图: 那个看上去想按下去的,那个看上去像自然地呢? 显而易见: 第一像按下去的,第二个像自然地. 原因: 渐变: ...

  4. javaScript 获取主机地址,项目名等

    //获取当前网址  var curWwwPath=window.document.location.href; alert(curWwwPath);  //http://localhost:8080/ ...

  5. PHP中关于超链接的拼接问题

    <?php$link = " http://www.baidu.com";echo '<a href='.$link.'> 百度 </a>';?> ...

  6. WSB备份到远程共享文件夹的限制

    WSB备份存储类型: 远程共享文件夹: 可以将一次性(临时)备份和计划备份存储在远程共享文件夹上.(将计划备份存储在远程共享文件夹上的功能是 Windows Server 2008 R2 的新增功能. ...

  7. html的下拉框的几个基本使用方法

    尽管使用EXT开发了一段时间,可是自己认为我对javascript还是不是非常熟,所以边看书边做小样例 给自己以后用到的时候查看下,都是非常主要的东西,对刚開始学习的人可能有点帮助 以下是代码 < ...

  8. unity3d脚本编程

    一 创建和使用脚本 1 概述 GameObject的行为都是被附加到其上面的组件控制,脚本本质上也是一个组件. 在unity中创建一个脚本,默认内容例如以下: using UnityEngine; u ...

  9. js 获取cookie

      <!DOCTYPE html>   <html xmlns="http://www.w3.org/1999/xhtml">       <head ...

  10. HTML5 <script>元素async,defer异步加载

    原文地址:HTML5′s async Script Attribute原文日期: 2010年09月22日翻译日期: 2013年08月22日 (译者注: 异步加载,可以理解为无阻塞并发处理.) (译者再 ...