帧指针如何在MSP430上工作以及`#llo`宏做什么?

时间:2013-10-02 07:28:49

标签: c assembly msp430

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

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是堆栈指针。

1 个答案:

答案 0 :(得分:0)

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

看起来代码计算R15中某个对象的位置。只有部分代码很难说明...而且,如果R4在函数中没有使用更多,这段代码可以进行很多优化。

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

看看其他编译器用这样的代码做什么会很有趣(MSP430的gcc并不是最先进的技术)。