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. Eclipse用法和技巧七:自动生成get和set方法2

    上一篇文章中我们介绍了自动批量生成get和set函数的方法.这个方法一般在声明完类的数据域之后使用,比较方便快捷.这里再补充几个自动生成get和set函数的方法. 步骤一:在声明的数据域中按Ctrl+ ...

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

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

  3. 基于visual Studio2013解决C语言竞赛题之1060寻找回文数

       题目 解决代码及点评 /* 60. 回文数指左右数字对称的数,如121,2112都是回文数.回文数猜想:取一任意十进制数,将其倒过来,并将这两个数相加, 然后把这个相加的和倒过来再与 ...

  4. Javascript跨域请求的几种解决方法

    什么情况下才会出现跨域? 假设域名是:http://www.example.com.cn/ 如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到 ...

  5. Oracle 经常使用的改动语句

    一.表Table 測试表:MY_TEST_TABLE -- Create table create table MY_TEST_TABLE ( A VARCHAR2(30), B NUMBER(10) ...

  6. WebService 之 WSDL文件 解说

    恩,我想说的是,是不是常常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说依照上面的进行适配,嘿嘿,这个时候,要是你曾经没有开发过,肯定会傻眼,那假设 ...

  7. Mongdb 访问

    http://114.55.75.xx/pics/201607040751367d21a38035bd4da7abd4473783f85f7a

  8. Linux下经常使用的shell命令记录

    硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /proc/cpuinfo #查看CPU信息具体信息,如每一个CPU的型号,主频等 内存相关 free -m #概要查看内存情况 ...

  9. REPLACE...IN.....WITH.... 的使用

    REPLACE...IN.....WITH....   的使用,例子用于改变alv的gt_fieldcat_alv LOOP AT gt_fieldcat_alv ASSIGNING <fs_f ...

  10. Visual Studio Code中文文档

    Visual Studio Code中文文档 Visual Studio Code是一个轻量级但是十分强大的源代码编辑器,重要的是它在Windows, OS X 和Linux操作系统的桌面上均可运行. ...