汇编程序跳转到c语言程序,汇编语言跳转指令和C语言条件分支

f13ca80ab969ce31ff4894b93d0fd391.jpg

跳转说明

跳转指令也是一组指令,称为组j. jmp是无条件跳转,其余是条件跳转

92e21a1bea89923ffcc4d18155dde6d8.png

上图显示了j组指令,可以将其与条件代码访问指令结合使用以加深理解

1e7db2fa5e1a13a9ca9312bcf17d696c.png

了解如何在机器指令级别编码跳转指令

ea09231f9649536c28ea553ca23b376c.png

使用汇编语言跳转指令来实现C语言条件分支

2a5a434e20e1f95aedb64952fc5f3a94.png

82b39bfc770a296262c67db5b7339eec.png

如上所示,可以通过上面的指令将左侧的程序翻译为汇编指令

了解上述说明:

使用条件数据传输指令来实现条件分支

组合示例

ee38b6996d990ad5db44c7654f40d2dd.png

ce6e6b1e09ff96a24fb3265a33f32db2.png

该指令是删除跳转指令-fno-if-conversion

有条件的数据传输指令过程:

首先计算一种情况(x-y)的结果并将其放入rax寄存器中;另一种计算它并将其放入rdx寄存器中;然后比较x和y的大小

0c7ea0a1e695c456af2742aef096199f.png

比较大小时使用cmov指令组,类似于设置的指令组. 如果cmovle小于或等于,则将rdx分配给rax;大于保持原样.

条件数据传输指令可以很好地优化性能,但是并非所有条件数据分支都可以用条件语句表示,如下所示

728ba39cf1728e7a01f6f03506ee43b9.png

branch语句块包含非常繁重的计算,这导致计算成本比优化管道性能要大得多

存在一些严重的风险情况. 如果必须在p不为0的前提下执行将p指针的值作为地址的操作c语言对应汇编语句,则条件数据传输指令将首先计算两个结果,然后进行选择. 此时,如果p指针不存在c语言对应汇编语句,将报告错误

在计算中可能会有副作用,即所使用的变量相互关联. 这两个结果都将更新x,如果先使用条件数据传输指令来计算结果,则x的值将发生变化,这与原始逻辑不一致

此处介绍了有关汇编语言跳转指令和C语言条件分支的本文. 有关更多相关的汇编语言跳转说明,请搜索Script House的上一篇文章,或继续浏览下面的相关文章. 该文章希望以后每个人都支持Script House!

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-169628-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值