前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >if语句的汇编表示

if语句的汇编表示

作者头像
墨文
发布2020-02-28 15:26:00
1.3K0
发布2020-02-28 15:26:00
举报
文章被收录于专栏:m0w3nm0w3n

转自:https://blog.csdn.net/u011608357/article/details/22586137

demo:

C语言:

代码语言:javascript
复制
int  max(int x,int y)
{
    if  (x>y)
        return  x;
    else
        return  y;
}    

产生的汇编代码如下:

代码语言:javascript
复制
00000000<max>:
0: 55          push %ebp
1: 89   e5    mov %esp,%ebp
3: 8b  45 08  mov 0x8(%ebp),%eax
6: 3b  45 0c  cmp 0xc(%ebp),%eax
9: 7e  05      jle 10 <max+0x10>
b: 8b  45 08  mov 0x8(%ebp),%eax
e: eb  03       jmp 13 <max+0x13>
10: 8b  45 0c  mov 0xc(%ebp),%eax
13: 5d          pop %ebp
14: c3          ret

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

代码语言:javascript
复制
int max(int x,int y)
{
    if (x<=y)
    goto x_le_y;
    result=x;
    goto done;

    //两个跳转地址
    x_le_y:
        result=y;
    done:
        return result;
}

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

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

代码语言:javascript
复制
int max(int x,int y)
{
    if (x>y)
        goto x_ge_y;
    result=y;
    goto done;


    x_ge_y:
        result=x;
    done:
        return result;
}

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

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

代码语言:javascript
复制
jmp label直接跳转

je label相等
jne label不等
js label负数
jns label非负数

ja label大于
jae label大于等于

jb label小于
jbe label小于等于


jg label大于
jge label大于等于

jl label小于
jle label小于等于

jg  jge jle jl用于比较有符号数,而ja  jae  jb  jbe用于比较无符号数

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

代码语言:javascript
复制
int  max(int x,int y)
{
    return  x>y?x:y;
}

其他例子:

代码语言:javascript
复制
.text

.global  _start

_start:

          mov r1,#1

          mov r2,#2

          cmp r1, r2

          bgt  branch1

          add  r3,r1,r2

          b  end

         

         branch1:

         sub  r3,r1,r2

         end: 

         nop

C 语言:

     if(a>b)

         a = a- b

    else

        a = a +b
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档