gpt4 book ai didi

c - 帧指针在 MSP430 上如何工作以及 `#llo` 宏的作用是什么?

转载 作者:行者123 更新时间:2023-11-30 17:46:50 25 4
gpt4 key购买 nike

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

最佳答案

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

看起来代码计算了 R15 中某个对象的位置。仅凭部分代码很难判断...另外,如果函数中不使用更多R4,这段代码还可以优化很多。

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

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

关于c - 帧指针在 MSP430 上如何工作以及 `#llo` 宏的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com