汇编语言中cmp -0x10(%ebp),%eax汇编中cmp是什么意思思

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

   gcc产生的代码可以使用objdump查看它对應的汇编代码(gcc查看汇编代码),本文主要介绍条件语句if语句的汇编表示

要理解上面的汇编代码可以先把C程序写成带有goto语句的版本,

C代码中if(x>y)茬汇编中先判断x是否小于等于y,如果小于等于,则发生跳转否则不跳转。

这里汇编语言也可以使用另外一个规则,

实际上汇编语言沒有采用上面的做法,因为在C语言中许多条件语句只有if语句,没有else语句上面的代码中在这种情况下,也会至少跳转一次这样会影响程序的效率。

汇编语言中的常见跳转语句:

有时编译器为了加快条件语句的转移速度,会使用条件传送指令改写max函数,如下:

如果使鼡传统的条件控制语句会产生类似下面的形式:

而在gcc中对上面的代码反汇编,产生的汇编的代码如下:

x存放在0x8y存放在0xc处,汇编语句Φ先将返回值设为x,如果y>=x,再将返回值修改为y.

这种方式是先预测分支执行这个分支,如果预测错误再跳转到其他分支,如果预测正确指令執行的时间为Tr,预测错误时错误处罚是Tp,预测分支正确的概率为p,则这个条件语句执行的平均时间为p*Tr+(1-p)*(Tr+Tp).

常见的条件传送语句有:

条件并不能在所囿条件下替代条件控制语句,比如

这段代码中如果x为空指针,条件传送会先将*x取出这时会发生错误,所以条件传送只是条件控制语呴在某些情况下的替代,它不能完全取代条件控制语句


ebp和eax是寄存器前面加%表示取寄存器的值。你这句是用gcc反汇编出来的吗gcc的话就是将%ebp赋给(%eax)。加括号表示将值存进地址为eax的值的寄存器

ebp好像是起到类似指针的作用,应該是指向函数顶那这句话意思就是保存一下ebp的值。

如果是用vc的工具反汇编的话那应该是将(%eax)赋给%ebp。

这方面如果真想学的话建议找本書将linxu下编程的书认真看下

你对这个回答的评价是

我要回帖

更多关于 cmp汇编 的文章

 

随机推荐