这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 请高手给我这段程序加注释啊~~~

共2条 1/1 1 跳转至

请高手给我这段程序加注释啊~~~

院士
2006-09-17 18:14:16     打赏
请高手给我这段程序加注释啊~~~



关键词: 高手     给我     这段     程序     注释    

院士
2006-12-22 22:43:00     打赏
2楼
问 因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(System和User三项式使用相同SP寄存器)。因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址。方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值。这里列出的代码定义了三种模式的SP指针,其中,I_Bit表示IRQ的中断禁止位;F_Bit表示FIQ的中断禁止位:
@;Set up SVC stack to be 4K on top of zero-init data
LDR r1,=installStack
ADDSP,r1,#2048
@;Set up IRQ and FIQ stacks
MOV r0,#(Mode_IRQ32|I_Bit)
MSRcpsr,r0
MOV r0,r0
ADDSP,r1,#2048*2
MOV r0,#(Mode_FIQ32|I_Bit |F_Bit)
MSR cpsr,r0
MOV r0,r0
ADDSP,r1,#2048*3
一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。堆栈性能的提高对系统性能的影响是非常明显的。
1: 212121顶 2: re@;Set up SVC stack to be 4K on top of zero-init data
LDR r1,=installStack               //installstack应该是stack基地址
ADDSP,r1,#2048                    //设置svc的栈指针installstack+2048
@;Set up IRQ and FIQ stacks
MOV r0,#(Mode_IRQ32|I_Bit)     //设IRQ模式,并禁止中断 的值
MSRcpsr,r0                    //将上面的值写入CPSR做模式切换
MOV r0,r0               //空操作,类似于NOP指令
ADDSP,r1,#2048*2   //这时的sp就是IRQ模式的sp了,为installstack+2048*2
MOV r0,#(Mode_FIQ32|I_Bit |F_Bit)//设FIQ模式,并禁止中断和快中断
MSR cpsr,r0     //将上面的值写入CPSR做模式切换
MOV r0,r0     //空操作,类似于NOP指令
ADDSP,r1,#2048*3 //这时的sp即使FIQ模式的sp了,为installstack+2048*3
3: 好啊~~ 4: 我爱你我爱死拉 高手

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]