如何用C语言定义arm状态下的r13寄存器为堆栈指针
发布网友
发布时间:2022-05-10 21:53
我来回答
共2个回答
热心网友
时间:2023-11-05 00:29
1,你如果用C语言编程的话,堆栈跟你见不着面,编译器会处理,何来定义堆栈之说?
2,你如果是用汇编和C混合编程的话你就只能用约定俗成的SP寄存器,
3,如果只用ARM汇编的话,在汇编代码里你可以随便用任何寄存器来充当堆栈的角色,无非就是在程序初始化时将哪个寄存器赋一个地址,然后你把这个寄存器当作栈指针寄存器,进行压栈和出栈操作时来改变或恢复这个寄存器的值,这样一来就完成了在汇编代码里的操作堆栈的功能。但是在汇编代码里最重要的是要能做到恢复现场,有一个寄存器没恢复的话整个程序就会出错,还有你不用SP的话就不能用PUSH和POP指令,直接操作你要拿来当堆栈指针的寄存器就OK。
4,对于堆栈的理解问题,堆栈是一种抽象数据容器,即包括操作的数据结构,相当于C++中的类的概念,但还是有区别,无非就是划定一块内存区,定义任何数据想要在这块内存区存取都要遵守先进后出的规则,而INTEL和ARM的CPU架构里都有一个物理寄存器SP用来充当指向堆栈(你划定的那块内存区)的栈顶指针,在C语言里要实现堆栈这样的数据类型,就要用你定义的变量来充当栈顶指针,但在汇编里,就是SP了。
为了这个5分,我可没少写呀。
热心网友
时间:2023-11-05 00:30
这个应该是不需要定义的吧。ARM体系结构下,R13通常就被用于是SP。追问那是Thumb下强制的,ARM下那是习惯,书上说可以用其他寄存器来代替的,但是就是不知道怎么定义