【发布时间】:2020-02-06 11:06:47
【问题描述】:
我想我理解 MSP430 中的 Push/Pop 概念到/从堆栈中,但不确定在这种情况下会发生什么:
mov #8, R10
push R10
call #myfunc
然后在子程序'myfunc'里面:
push R10
push R11
push R12
..... do some ops with R10
pop R10
pop R11
pop R12
ret
当我们再次按下 R10 并在 'ret' 之前弹出并以这种方式使用它时会发生什么? 'main' 中不再使用 R5。
我还是新手-谢谢
【问题讨论】:
-
检查在使用 MSP430 时 C 代码的行为方式是否存在通用 ABI 或调用约定。调用者或被调用者是否应该进行堆栈,以及常用的寄存器等。该文档应该在 C 编译器文档中找到。然后在编写汇编程序时尽量遵循那个调用约定标准,这样你就可以无缝地混合 C 和 asm。
-
为什么要提到 R5?您确定该函数使用的是 R10 而不是从内存中加载它吗?
标签: assembly stack embedded cpu-registers msp430