ARM处理器的7中执行模式:usr、fiq、irq、svc、abt、und、sys。





ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在全部模式下指的都是同一个物理寄存器;备份寄存器R8-R12,每一个寄存器相应两个不同的物理寄存器。对于R13[sp]和R14[lr]来说,每一个寄存器相应6个不同的寄存器;程序计数器R15[pc]),6个状态寄存器(当前程序状态寄存器[cpsr];5个备份状态寄存器[spsr])。





ARM体系的异常中断:复位、没有定义指令、软件中断、指令预取中止、数据訪问中止、外部中断请求、高速中断请求。

ARM处理器响应异常中断的过程:

1.保存CPSR到将要运行的异常中断相应的SPSR。

2.设置CPSR,使处理器进入对应的模式。

3.将寄存器R14[lr_mode]设置成返回地址

4.将寄存器R15[PC]设置成该异常中断的中断向量地址。

从异常中断处理程序中返回的过程:

1.恢复SPSR_mode到CPSR。

2.复制R14[lr_mode]到R15[PC]。





ARM体系的存储系统:单一的平板地址空间,空间大小为2^32个8位,即2^32B,空间地址为0 到 2^32-1。存储格式分big-endian和little-endian。





ARM指令:ARM指令字长为固定的32位。一般编码格式例如以下:

|cond|001|opcode|S|Rn|Rd|shifter_operand|

cond:指令运行的条件编码

opcode:指令操作符的编码

S:决定指令的操作是否影响CPSR的值

Rn:目标寄存器编码

Rd:包括第一个操作数的寄存器编码

shifter_operand:第二个操作数的编码

ARM指令的寻址方式:数据处理指令的操作数的寻址方式、字及无符号字节的Load/Store指令的寻址方式[Load指令从内存中读取数据到寄存器中,Store指令将寄存器中的数据保存到内存]、杂类Load/Store指令的寻址方式、批量Load/Store指令的寻址方式[实如今一组寄存器和一块连续的内存单元之间数据传输]、协处理器Load/Store指令的寻址方式[实如今ARM处理器和协处理器之间传输批量数据]。





ARM指令集:

1.跳转指令:B、BL、BLX、BX。

<1>.B及BL:用于实现子程序调用,可跳转的地址范围大致为-32MB 至 32MB。B指令仅跳转,BL指令同一时候还将PC寄存器的值保存到LR寄存器,子程序的返回能够通过将LR寄存器的值拷贝到PC寄存器中来实现。

<2>.BLX:语法1:BLX target_address。

操作的伪代码:LR = address of the instruction after the BLX instruction

    T Flag = 1 (即表示切换到Thumb指令集)

    PC = PC + 跳转地址

语法2:BLX{<cond>} <Rm>。

操作的伪代码:if cond  then

            LR = address of the instruction after the BLX instruction

        T Flag = Rm[0] (是否切换指令集取决于寄存器Rm中的目标地址的bit[0])

        PC = Rm AND 0xfffffffe

<3>BX:语法:BX{<cond>} <Rm>。

操作的伪代码:if cond  then

        T Flag = Rm[0] (是否切换指令集取决于寄存器Rm中的目标地址的bit[0])

        PC = Rm AND 0xfffffffe

2.数据处理指令:数据传送MOV、比較CMP、位測试TST、相等測试TEQ、加法ADD、减法SUB、位清除BIC、异或EOR、或ORR等。

3.乘法指令:32位乘法MUL等。

4.状态寄存器訪问指令:通常改动状态寄存器是通过“读取-改动-写回”的操作来实现的。

<1>MRS:状态寄存器 到 通用寄存器 的传送指令。语法:MRS{<cond>} <Rd>, CPSR 

<2>MSR:通用寄存器 到 状态寄存器 的传送指令。语法:MSR{<cond>} CPSR,<Rm> 或 MSR{<cond>} CPSR,#马上数

比如将处理器的模式切换到特权模式:

MRS R0, CPSR
;读取CPSR

BIC R0, R0, #0x1F
;改动,去除当前处理器模式

ORR R0, R0, #0x13
;改动,设置特权模式

MSR CPSR_c, R0
;写回,只改动CPSR中的控制位域

5.Load/Store内存訪问指令:字数据读取指令LDR(从内存将一个32位的字读取到目标寄存器),字数据写入STR(将一个32位的字写入到指定的内存单元)等。

6.批量Load/Store内存訪问指令:批量内存字数据读取指令LDM,批量内存字数据写入指令STM。

7.信号量操作指令:信号量用于进程间的同步和相互排斥,对信号量的操作要求是一个原子操作,不可被打断。ARM提供SWP(字交换指令)和SWPB(字节交换指令)来完毕信号量的操作。

语法为:SWP{<cond>} <Rd>, <Rm>, [Rn]

功能:将一个内存单元[Rn]的内容读取到一个寄存器<Rd>中,同一时候将还有一个寄存器<Rm>的内容写入到该内存单元[Rn]中。

8.异常中断产生指令:软中断指令SWI(ARM通过软中断实如今用户模式下对操作系统中特权模式的程序调用即系统调用)

语法为:SWI{<cond>} <immed_24>

功能:用于用户程序调用操作系统的系统服务,操作系统在SWI的中断服务程序中提供相关的系统服务,并定义了參数传递的方法,通常參数传递方法例如以下两种<1>指令中的24为马上数用于指定用户请求的服务类型,參数通过通用寄存器传递。<2>指令中的24位马上数被忽略,用户请求的服务类型由寄存器R0的数值来决定,參数通过其它的通用寄存器来传递。

9.ARM协处理器指令:ARM支持16个协处理器。ARM协处理器指令包含下面3类:<1>用于ARM处理器初始化ARM协处理器的数据处理操作<2>用于ARM处理器的寄存器和ARM协处理器的寄存器间的数据传送操作<3>用于在ARM协处理器的寄存器和内存单元之间传送数据。一共五条指令例如以下:

<1>CDP:协处理器数据操作指令

比如:CDP p5, 2, c12, c10, c3, 4
;协处理器p5的操作初始化。当中,操作码1为2,操作码2为4,目标寄存器为c12,源操作数寄存器为c10和c3。

<2>LDC:协处理器数据读取指令

比如:LDC p6, CR4, [R2, #4]
;R2为ARM寄存器,指令读取内存单元[R2, #4]的字数据,传送到协处理器p6的CR4寄存器中。

<3>STC:协处理器数据写入指令

比如:STC p8, CR8, [R2, #4]!
;R2为ARM寄存器,指令将协处理器p8的CR8寄存器中的字数据写入到内存单元[R2, #4]中,指令运行后R2=R2+4。

<4>MCR:ARM寄存器到ARM协处理器的数据传送指令

比如:MCR p14, 3, R7, c7, c11, 6
;指令从ARM寄存器中将数据传送到协处理器p14的寄存器中。当中R7为ARM寄存器,存放源操作数;c7和c11为协处理器寄存器,为目标寄存器;操作码1为3,;操作码2为6。

<5>MRC:ARM协处理器到ARM寄存器的数据传送指令

比如:MRC p15, 2, R5, c0, c2, 4
;指令将协处理器p15寄存器中的数据传送到ARM寄存器中。当中R5为ARM寄存器,是目标寄存器;c0和c2为协处理器寄存器,存放源操作数;操作码1为2,操作码2为4。

ARM体系结构与编程的更多相关文章

  1. ARM体系结构与编程-3

    ARM存储系统:ARM中用于存储管理的系统控制协处理器CP15:包括16个32位寄存器,其编号为0到15.实际上对于某些编号的寄存器可能相应有多个物理寄存器. 訪问CP15寄存器的指令:MRC.MCR ...

  2. ARM体系结构与编程-5

    GET通经常使用于包括定义常量的源文件. 比如:GET 2440addr.inc 用AREA定义一个段.ENTRY用于指定程序的入口点,END用于告诉汇编器源文件已经结束. 比如: AREA init ...

  3. ARM体系结构与编程读书笔记——处理器的寄存器

    ARM处理器共有37个寄存器,其中包括: 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位: 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位: 通用寄存器 可以分为下面3 ...

  4. ARM体系结构与编程读书笔记——处理器的运行模式

    ARM处理器共有7种运行模式,如下表: 处理器模式 描述 用户模式(User, usr) 正常程序执行的模式 快速中断模式(FIQ, fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ, ir ...

  5. ARM的体系结构与编程系列博客——ARM体系版本

    ARM体系版本前言 很多人都知道,ARM有许多版本,口中最长说的就是ARM7\ARM9\ARM11,诚然,这个的确是ARM处理器的版本,但绝对不是ARM的版本,其实ARM到迄今为止经历了6代版本,随着 ...

  6. ARM的体系结构与编程系列博客——ARM处理器系列介绍

    ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...

  7. ARM体系结构和汇编指令

    第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...

  8. ARM体系结构简介

    ARM体系结构简介 新一代的ARM9处理器,能达到两倍ARM7的处理能力,它们的区别如下: ARM微处理器的工作状态(可切换): 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令 第二种为 ...

  9. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器

    1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...

随机推荐

  1. ubuntu下使用charles代理

    charles 最新的版本是3.10,但是这个版本还没有license可以用,所以使用3.9.2版本. 解压缩包就可以用了. 如果只是代理http请求,只要设置: Proxy -> Proxy ...

  2. CLR和.Net对象

    CLR和.Net对象生存周期 前言 1. 基础概念明晰* 1.1 公告语言运行时* 1.2 托管模块* 1.3 对象和类型* 1.4 垃圾回收器 2. 垃圾回收模型* 2.1 为什么需要垃圾回收* 2 ...

  3. 《UNIX环境高级编程》笔记--read函数,write函数,lseek函数

    1.read函数 调用read函数从文件去读数据,函数定义如下: #include <unistd.h> ssize_t read(int filedes, void* buff, siz ...

  4. 根据li标签 查找class="alcw4 alcw41"对应的值

    jrhmpt01:/root/lwp/0526# cat a2.pl use LWP::UserAgent; use DBI; use POSIX; use Data::Dumper; use HTM ...

  5. javascript 学习资料网址一览

    1.http://www.runoob.com/ 2.https://developer.mozilla.org/zh-CN/ 3.http://www.imooc.com/   视频类

  6. zTree实现地市县三级级联Action类

    zTree实现地市县三级级联Action类 ProvinceAction.java: /** * @Title:ProvinceAction.java * @Package:com.gwtjs.str ...

  7. 使用TWebBrowser时存在内存泄漏问题的解决方案(使用SetProcessWorkingSetSize函数,或者修改OleCtrls.pas源码解决问题)

    用TWebBrower不断打开多个网页,多某些版本的操作系统上运行一段时间后,发现占用系统内存达几百M,直到关闭程序后,占用的内存才能释放. 这个问题在网有很多讨论,比较多人的建议办法是用SetPro ...

  8. 【MongoDB】学习MongoDB推荐三本书

    近期学习mongodb,感觉这三本书写得不错.非常大家分享一下:

  9. hdu 4706 Children's Day 2013年ICPC热身赛A题 模拟

    题意:按字母顺序排列成n型,简单的模拟题. 当字母排到z时从a开始重新排起. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * Blog: ...

  10. Delphi事件的广播2

    上篇文章写了将事件分离成类的方法来实现事件的广播,这次将参考观察者模式来实现事件的广播.模式中主要有这两个角色: 发布者:发布者保存着一张观察者的列表,以便在必要的时候调用观察者的方法. 观察者:观察 ...