ITPub博客

首页 > 应用开发 > > C语言的ARM实现(三)条件跳转

C语言的ARM实现(三)条件跳转

作者:pswyjz 时间:2019-08-28 15:59:56 0 删除 编辑
int con(int x , int y)
{
        int result;
        if(x < y)
                result = y -x;
        else
                result = x - y;

        return result;
}
con:
    @ Function supports interworking.
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    cmp    r0, r1
    rsblt    r0, r0, r1   @如果r0
    rsbge    r0, r1, r0   @如果r0>=r1, 则r0=r0-r1,rsbge是rsb和ge的组合
    bx    lr

CMP{条件}{P} , status = op_1 - op_2

CMP 允许把一个寄存器的内容如另一个寄存器的内容或立即值进行比较,更改状态标志来允许进行条件执行。它进行一次减法,但不存储结果,而是正确的更改标志。标志表示的是操作数 1 比操作数 2 如何(大小等)。如果操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。

RSB : 反向减法

(Reverse Subtraction)

RSB{条件}{S},, dest = op_2 - op_1

SUB 用操作数 two 减去操作数 one,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即值:

RSB R0, R1, R2 ; R0 = R2 - R1

RSB R0, R1, #256 ; R0 = 256 - R1

RSB R0, R2, R3,LSL#1 ; R0 = (R3 << 1) - R2

反向减法可以在有符号或无符号数上进行。 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/755/viewspace-3122917/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-11-21

  • 博文量
    213
  • 访问量
    28328