LDR: ARM指令 .vs. 伪指令
[ 2007-4-27 11:38:00 | By: CANopen ]
 
LDR  sp, label     ; 将该标号(地址)处的数据写入sp
 
LDR   sp,  =label    ; 将该标号所标识的地址写入sp
 
下面是一段栈初始化代码:
 
StackInit
        MOV R0, LR
;/* Set Stack: Supervisor Mode */
 IF  SVC_STACK_LENGTH <> 0
        MSR CPSR_c, #(SVC32MODE | NoInt | NoFIQ)  
        LDR SP, StackSvc
 ENDIF  
;/* Set Stack: IRQ Mode */
 IF  IRQ_STACK_LENGTH <> 0
        MSR CPSR_c, #(IRQ32MODE | NoInt | NoFIQ)
        LDR SP, StackIrq
    ENDIF   
;/* Set Stack: FIQ Mode */
 IF  FIQ_STACK_LENGTH <> 0
        MSR CPSR_c, #(FIQ32MODE | NoInt | NoFIQ)
        LDR SP, StackFiq
    ENDIF   
;/* Set Stack: Abort Mode */
 IF  ABT_STACK_LENGTH <> 0
        MSR CPSR_c, #(ABT32MODE | NoInt | NoFIQ)
        LDR SP, StackAbt
    ENDIF   
;/* Set Stack: Undefined Mode */
 IF  UND_STACK_LENGTH <> 0
        MSR CPSR_c, #(UND32MODE | NoInt | NoFIQ)
        LDR SP, StackUnd    ;// 此处为ARM指令,StackUnd定义在RO段,将该标号处的数据写入SP
    ENDIF   
;/* Set Stack: System/User Mode */
        MSR CPSR_c, #(SYS32MODE | NoInt | NoFIQ)
        LDR SP, =Bottom_UserStack  ;// 此处为LDR伪指令,Bottom_UserStack定义在DATA段,直接将该标号地址写入SP
        MOV PC, R0  ;// 堆栈初始化后IRQ、FIQ中断是关闭的,内核处于系统模式
 

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:

时 间 记 忆
最 新 评 论

专 题 分 类
最 新 日 志
最 新 留 言
搜 索
用 户 登 录
友 情 连 接
博 客 信 息


Powered by Oblog.