0

这是我编译的一段程序。

func:                              
        addi    sp, sp, -32
        sd      ra, 24(sp)
        sd      s0, 16(sp)
        addi    s0, sp, 32
        sd      a0, -24(s0)
        ld      a0, -24(s0)
        ld      a0, 0(a0)
        lb      a0, 0(a0)
        sb      a0, -25(s0)
        jal     x0,  LBB0_1

我不明白这些行:

        sd      a0, -24(s0)
        ld      a0, -24(s0)
        ld      a0, 0(a0)
        lb      a0, 0(a0)

为什么它在前两条指令中使用 s0,然后在接下来的两条指令中使用 a0,而不是像之前那样使用 sp。有没有办法编写它,使其不使用 s0/a0 而只使用 sp?

4

1 回答 1

1

s0 是帧指针。您可能有这两个带有 s0 的“无用”指令 ld/st 因为您正在编译而没有优化(这两个指令可以被删除)。但是,使用 a0 的两个 ld 指令取决于您的代码,并且取决于函数 func 的第一个参数。

于 2020-10-30T18:56:08.713 回答