Board logo

标题: 一步一步学习ARM(连载) [打印本页]

作者: linuxarm    时间: 2006-8-15 17:48     标题: 一步一步学习ARM(连载)

The ARM Processor


缩写
    ARM:Advanced RISC Machines
    RISC:Reduced Instruction Set Computer(精简指令集)


处理器模式及对应的寄存器
    ARM支持下面6种处理器模式,在正常情况下,程序都在用户模式下执行,当软件异常或硬件中断发生时,进入相应的处理器模式.


(1):用户(usr):正常程序执行模式
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,CPSR


(2):FIQ(fiq):高速数据传送或通道处理
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8_frq,r9_frq,r10_frq,r11_frq,r12_frq,r13_frq,r14_frq,r15,CPSR


(3):IRQ(irq):通用中断处理
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_irq,r14_irq,r15,CPSR


(4):管理(svc):操作系统保护模式
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_svc,r14_svc,r15,CPSR


(5):中止(abt):存储器保护
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_abt,r14_abt,r15,CPSR


(6):未定义(und):未定义指令
    寄存器:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_und,r14_und,r15,CPSR


在程序正常执行时,如果发生外部普通中断IRQ,就会进入IRQ处理器模式,这时处理器使用r13_irq和r14_irq,而不是r13和r14.


注释:


R15: 程序计数器. program counter 她指向的是下一条要执行的指令而不是正在执行的指令.
R14: 当执行带链接分支的指令BL 时,得到R15 的副本.
R13: 作堆栈指针(SP),通常在BOOT 程序里把r13 初始化成指向为异常模式分配的堆栈.
异常处理程序将用到的寄存器的值保存到堆栈里,返回时,重新将这些值加载到寄存器.



举例: 未定义模式堆栈初始化


UNDEFMODE DEFINE 0x1b (00011011)
MODEMASK DEFINE 0x1f (00001111)
NOINT DEFINE 0xc0 (11000000)
mrs r0,cpsr                   ;把状态寄存器的值送到r0
bic r0,r0,#MODEMASK           ;把cpsr 的低四位清零
orr r1,r0,#UNDEFMODE|NOINT    ;把r0 的值置为:11011011 然后送给r1
msr cpsr_cxsf,r1              ;把r1 的值送到状态寄存器
;cpsr 现在的值是:
;cpsr[8:7]=11 相当于禁止IRQ 和FIQ 中断
;cprs[4:0]=11011 处理器的工作模式:未定义
ldr sp,=UndefStack ;把堆栈的位置送给SP


ARM 寄存器总结:
ARM 有16 个 32 位的 registers(r0 到 r15 ).
r15 充当程序计数器PC, r14 (link register) 存储子程序的返回地址,r13 是堆栈地址.
ARM 有一个当前程序状态register:CPSR.
一些registers(r13,r14)在异常发生时会产生新的instances,比如IRQ 处理器模式,这时处理器使用r13_irq 和r14_irq
ARM 的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中.


作者: linuxarm    时间: 2006-8-17 21:52

[upload=image/pjpeg]uploadImages/armstep001.JPG[/upload]
作者: linuxarm    时间: 2006-8-17 21:55

[upload=image/pjpeg]uploadImages/armstep002.JPG[/upload]
作者: linuxarm    时间: 2006-8-17 21:59

[upload=image/pjpeg]uploadImages/armstep003.JPG[/upload]
作者: linuxarm    时间: 2006-8-17 22:04

[upload=image/pjpeg]uploadImages/armstep004.JPG[/upload]




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0