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. 使用boost io_service时,需要注意的东西

    boost::asio 在创建io_service时,可以指定线程数,如果没有指定,默认是一个线程,也就是io_service run的那个线程,如果没有任务运行,该线程会退出. 如果在创建的时候指定 ...

  2. LeetCode77:Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 - n. For example, ...

  3. listview——显示窗体

    listview——是用来显示的控件 一,属性 view:(显示的视图)LargeIcon——大图标:SmallIcon——小图标:Details——详细:List——列表:TItle——平铺 Sma ...

  4. 【ASP.NET Web API教程】2.4 创建Web API的帮助页面

    原文:[ASP.NET Web API教程]2.4 创建Web API的帮助页面 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 2.4 ...

  5. NYOJ 1085 数单词 (AC自己主动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...

  6. [置顶] Ftp客户端概要设计

    Ftp客户端概要设计 1.概述 ftp是基于TCP的文件传输协议,主要是用于控制远程文件,如下载.上传.续传.重命名.删除等.其命令是基于可见字符,易于理解的方式交互的.客户端与服务器端的交互遵循一应 ...

  7. HDU 3478 Play with Chain (Splay树)

    这种高级数据结构太难搞了.........现在还是先照着别人的代码敲,做模板..........慢慢花时间来弄懂 #include <iostream> #include <algo ...

  8. inline与lnk2001、lnk2019,鸡肋?

    inline函数居然出现了lnk2001.lnk2019,先贴代码. a.h #pragma once class A { public: inline void foo();     void us ...

  9. setenv 和 set

    setenv 和 set 是在csh系列的命令,当然bash中也有set,还是有出入的.   set 是对当前进程有效,不会传递给子进程 setenv 不仅对当前进程有效,也会传递给子进程.   语法 ...

  10. Linux Force DHCP Client (dhclient) to Renew IP Address

    http://www.cyberciti.biz/faq/howto-linux-renew-dhcp-client-ip-address/‘m using Ubuntu Linux. How to ...