我在理解调用者和被调用者保存的寄存器之间的区别以及何时使用什么方面遇到了一些麻烦.
我使用的是MSP430:
程序:
mov.w #0,R7 
mov.w #0,R6 
add.w R6,R7 
inc.w R6 
cmp.w R12,R6 
jl l$loop 
mov.w R7,R12
ret
上面的代码是被调用者,并且在教科书示例中使用,因此它遵循惯例.R6和R7被呼叫者保存,R12被呼叫者保存.我的理解是被调用者保存的regs不是"全局的",因为在过程中改变它的值不会影响它在程序之外的值.这就是您必须在开头将新值保存到被调用者注册表中的原因.
R12,保存的来电者是"全球性的",因为缺乏更好的词汇.该程序在通话后对R12产生持久影响.
我的理解是否正确?我错过了其他的东西吗?
我想知道指针是否指向cpu寄存器,因为在它可能没有的情况下,使用引用而不是指针尽可能使编译器有机会进行一些优化,因为引用的对象可能驻留在某个寄存器中但指向的对象通过指针可能不会.
我对内存映射和内存映射 I/O 很困惑。例如,ARM 体系结构 r0、r1 等中的通用寄存器是否通常是内存映射的?请帮忙。