打印

汇编 修改堆栈 帮忙看看吧~~~

[复制链接]
1505|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ma1986|  楼主 | 2009-10-26 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DRAM_END EQU 0x0c800000
AREA RamData, DATA, READWRITE
^ (DRAM_END - 0x800)
UserStack # 256
SVCStack # 256
UndefStack # 256
AbortStack # 256
IRQStack # 256
FIQStack # 256
EXPORT UserStack
EXPORT SVCStack
EXPORT UndefStack
EXPORT AbortStack
EXPORT IRQStack
EXPORT FIQStack
MAP (DRAM_END - 0x100)
SysRstVector # 4
UdfInsVector # 4
SwiSvcVector # 4
InsAbtVector # 4
DatAbtVector # 4
ReservedVector # 4
IrqSvcVector # 4
FiqSvcVector # 4
EXPORT SysRstVector
EXPORT UdfInsVector
EXPORT SwiSvcVector
EXPORT InsAbtVector
EXPORT DatAbtVector
EXPORT ReservedVector
EXPORT IrqSvcVector
EXPORT FiqSvcVector

;****************************************************
;初始化堆栈
;Do not use DRAM,such as stmfd,ldmfd......
;SVCstack is initialized before
;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

mrs r0, cpsr
bic r0, r0, #(MODEMASK|NOINT)

orr r1, r0, #UNDEFMODE|NOINT
msr cpsr_cxsf, r1  ;UndefMode
ldr sp, =UndefStack

orr r1, r0, #ABORTMODE|NOINT
msr cpsr_cxsf, r1  ;AbortMode
ldr sp, =AbortStack

orr r1, r0, #IRQMODE|NOINT
msr cpsr_cxsf, r1  ;IRQMode
ldr sp, =IRQStack

orr r1, r0, #FIQMODE|NOINT
msr cpsr_cxsf, r1  ;FIQMode
ldr sp, =FIQStack
  
orr r1, r0, #SVCMODE  ;enable irq,fiq
; orr r1, r0, #SVCMODE|NOINT ;disable irq, fiq
msr cpsr_cxsf,r1  ;SVCMode
ldr sp, =SVCStack
;USER mode is not initialized.
;未初始化用户模式栈,程序使用SVC模式
;****************************************************


按照这个初始代码,我是不是还可以给用户模式的堆栈再分配256字节的堆栈空间吗???只需要改成UserStack # 512 就好了吗??
我程序的嵌套比较深,怕堆栈不够。

相关帖子

沙发
desert_hawk| | 2009-10-26 19:08 | 只看该作者
加载到各个模式的SP的值应该是堆栈指针的位置,而不是各堆栈的大小。

使用特权

评论回复
板凳
ma1986|  楼主 | 2009-10-27 10:12 | 只看该作者
2# desert_hawk
给出堆栈指针的位置,不就相当于给出大小了吗??只不过他不进行边界检查。
我们一般裸奔的程序运行在svc模式下,我调用函数的过程中,每个函数的局部变量都会加入到该模式的堆栈中吗???比如我在某函数内int a[50];然后在该函数中再调用其他函数的时候,压栈,会将a[50]压到栈里吗???

使用特权

评论回复
地板
desert_hawk| | 2009-10-27 10:37 | 只看该作者
是的,函数的局部变量是从相应模式的堆栈中分配来的。你在某个函数内int a[50],在调用这个函数的一开始,堆栈指针就会减小4*50.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

101

帖子

1

粉丝