汇编在满足条件时如何从函数调用返回

时间:2016-02-26 17:16:05

标签: function assembly arm

所以我学习汇编并且我刚刚学会了创建一个函数我创建了一个标签,使用BL来分支到标签,然后使用BX LR从函数调用返回。

我知道LR存储PC的地址+4位,然后程序指针移动到标签的地址,然后PC通过代码递增,直到它到达BX LR,然后PC现在指向地址LR指着。

我的问题是我是否有以下伪代码:

func initArr()
    for(i = 0; i < max; i++)
        arr[i] = i
    return;

如何将其转换为装配体。据我所知,BX LR从函数返回,但是一旦我发现I&gt; = max,我想返回。这会有用吗?:

.global _start
_start:  
    LDR R1, =A
    MOV R2, #0x00
    BL _initArr

_end:
    MOV R1, #0
    MOV R7, #1
    SWI 0

_initArr:
    CMP R2, #MAX
    BEQ LR  @this
    STR R2, [R1]
    ADD R1, #0x04
    ADD R2, #0x01
    B _initArr

.data
.equ MAX, 10
A:    rept MAX
      byte 0x00
      endr

更具体一点:

  • 与LR配对的条件分支是否以与BX LR相同的方式工作?
  • (可选)是我的代码正确的布局

0 个答案:

没有答案