1

使用 gcc 中的 -S 标志,我从我的 C 代码创建了一个汇编文件,以便更好地了解内存的使用方式。这是 main 函数顶部的一些程序集:

main:
    mov r1, r4          ; FP = SP
    add #2, r4          ; FP += 2
    add #llo(-14), r1           ; SP -= 14 ?
    mov #llo(-16), r15          ; ???
    add r4, r15         ; r15 += FP
    add #4, r15

当我试图剖析正在发生的事情时,我发表了评论。我的问题是#llo宏的使用,堆栈上的内存是如何使用的,最后是什么进入 r15?

对于上下文,我有一个变量,包括一个位于 main 开头的堆栈上的结构,占用 14 个字节(7 个 16 位字)。我不明白什么是#llo宏以及 r15 的用途是什么?我知道 r4 是帧指针,而 r1 是堆栈指针。

4

1 回答 1

1

宏返回其llo参数的低 16 位。我想这是在使用负数时需要它来避免溢出(或者编译器是懒惰的)。

看起来代码计算了 R15 中某个对象的位置。仅使用部分代码很难说...此外,如果 R4 没有在函数中使用更多,则此代码可以进行很多优化。

该行在add #llo(-14), r1堆栈上分配空间。

看看其他编译器如何处理这样的代码会很有趣(MSP430 的 gcc 并不是最先进的)。

于 2013-10-02T08:48:37.093 回答