start.S进一步、更详细的、深入的解释和分析 2013.04.26更新(三)

转自:http://zqwt.012.blog.163.com/blog/static/1204468420133266206247/

 

/* set the cpu to SVC32 mode */

      mrs r0,cpsr     // 把当前程序状态寄存器中的数据拷贝给r0

      bic  r0,r0,#0x1f   // r0和0x1f(00011111)的反码进行位与,目的是给r0的后5位清零

orr r0,r0,#0xd3

    /* r0和0xd3 (11010011)进行位或,最后得到r0=11010011,

* 目的是设置r0的后5位为10011,让ARM进入SVC特权模式 */

      msr cpsr,r0

/* 把当前r0中保存的CPU的状态拷贝给cpsr,让ARM进入SVC特权模式 */

l   MRS {} Rd, CPSR|SPSR

这条指令的意思是将CPSR|SPSR传送到Rd。我们可以使用这两条指令将状态寄存器传送到一般寄存器,只修改该寄存器必要的位,再将结果传送回状态寄存器,这样能够最好地完成对CRSP或SPSR的修改。

MSR {} CPSR_|SPSR_,Rm 或是 MSR {} CPSR_f|SPSR_f,#

 MRS和MSR配合使用,作为更新PSR的“读取--修改--写回”序列的一部分

bic r0,r1,r2  ;r0:=r1 and not r2

orr ro,r1,r2  ;r0:=r1 or r2这几条指令执行完毕后,进入SVC32模式,该模式主要用来处理软件中断(SWI)

我们可以在S3C2410x芯片手册中研读这一段文字:

THE PROGRAM STATUS REGISTERS

The ARM920T contains a Current Program Status Register(CPSR), plus five Saved Program Status Registers(SPSRs) for use by exception handlers.

ARM920T具有一个当前程序状态寄存器(CPSR),还有5个保存程序状态寄存器(SPSR)供异常处理程序使用。

These register's functions are:

l   Hold information about the most recently performed ALU operation

保存有算术逻辑单元最近的操作

l   Control the enabling and disabling of interrupts

控制着开启和关闭中断

l   Set the processor operating mode

设置处理器的操作模式

那么,现在我们很容易理解:11010011 表示CPU禁止任何中断、仍处于arm状态、切换到特权模式

 start.S进一步、更详细的、深入的解释和分析 2013.04.26更新(三) - U-BOOT - 少即是多,慢即是快!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值