首页 > 其他分享 >10.12条件分支的实现方法

10.12条件分支的实现方法

时间:2023-02-07 20:57:24浏览次数:41  
标签:10 源代码 函数 指令 跳转 10.12 方法 分支

下面让我们来看一下条件分支的实现方法。条件分支的实现方法同循环处理的实现方法类似,使用的也是 cmmp 指令和跳转指令,这一点估计大家也预料到了。

没错,条件分支就是利用这些指令来实现的。不过,为了以防万我们来确认一下。代码清单 10-11 是,根据变量 a 的值来调用不同函数(MySubl 函数、MySub2 函数、MySub3 函数)的 C语言源代码为了实现条件分支,这里使用了 if语句。示例中被调用的各个函数都不进行任何处理。将代码清单 10-11 的MyFunc 函数处理转换成汇编语言源代码后,结果就如代码清单 10-12 所示。

 

 

 

 

 

 

代码清单 10-12 中用到了三种跳转指令,分别是比较结果小时跳转的 jle (jump on less or equal)、 大时跳转的jge (jump on greater orequal)、不管结果怎样都无条件跳转的jmp。在这些跳转指令之前还有用来比较的 cmp 指令,比较结果被保存在了标志寄存器中。这里我们添加了注释,大家不妨顺着程序的流程看一下。虽然同 C 语言源代码的处理流程不完全相同,不过大家应该知道处理结果是相同的。此外还有一点需要注意的是,eax 寄存器表示的是变量 a。

虽然大部分的 C 语言参考书中都写着“为了便于理解程序的结构应尽量避免使用无条件分支的 goto 语句”,不过,在汇编语言这一领域中,如果不使用相当于C语言 goto 语句的jmp 指令,就无法实现循环和条件分支。由此看来,关于应不应该在 C 语言中使用 goto 语句,大家没有必要这么紧张。

标签:10,源代码,函数,指令,跳转,10.12,方法,分支
From: https://www.cnblogs.com/z1218/p/17099769.html

相关文章

  • java-Stream流的常用方法
    一 常见创建流的三种方式//list集合创建流方式newArrayList<>().stream();newHashSet<>().stream();//map集合创建流方式,原......
  • 基于别人的分支建立自己的分支
    基于别人的分支建立自己的分支可以查看分支gitbranch(查看当前本地的分支)gitbranch-r(查看远程的分支)适合本地没有想要的分支去查询远程的gitbranch-a(查......
  • AQS 类中的属性以及方法说明
    AQS类中的属性以及方法说明相关属性 /***等待队列头部(该节点不存储线程,只做指向功能,指向队列中第一个等待节点)*/privatetransientvolatileNodeh......
  • 分支语句及三元运算符
    三元运算符var a=boolean?true:false//boolean是true取truefalse取false表达式算数表达1-1-1条件表达式1-1>1关系表达式true&&1运算符的执行流程示例......
  • 三种方法用Fortran求逆矩阵
    三种方法用Fortran求四阶矩阵的逆矩阵数值计算Crefertohttps://fortranwiki.org/fortran/show/Matrix+inversionSUBROUTINEMATINV(A,B)DIMENSION......
  • java控制结构1之if else和嵌套分支
    1.程序流程控制介绍在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。1)顺序控制2)分支控制3)循环控制2.顺序结构2.1不做......
  • POJ 3311 Hie with the Pie 状态压缩DP TSP问题(两种方法)
    HiewiththePieTimeLimit: 2000MS MemoryLimit: 65536KTotalSubmissions: 9728 Accepted: 5250DescriptionThePizazzPizzeriapridesitselfindeliveringpi......
  • 创建topic报错的解决方法
    问题:创建topic时报如下错误解决方法:1、编辑报错的创建topic文件2、输入命令::setff如果fileformat=dos,说明是windos文件格式,需要换成unix格式3、输入命令::setff=unix......
  • java对自定义类型的两种排序方法(Arrays.sort和Collections.sort)
    前言对普通基本类型的数组或者集合sort都有相应的排序方法(从小到大),但是对于我们自定义的类型,就需要重新定义比较器,这里介绍对对象数组排序的Arrays.sort和对集合排序的Coll......
  • git 分支
    如果主分支不为master,如new_trunk:1、#gitcheckout-bV3.18.45origin/V3.18.452、#gitbranch-va3、#gitcheckoutnew_trunk4、#gitmergeV3.18.45-m“Build-Ta......