2016.4.6 我从内部看ARM课程笔记

1、关于ARM的一些名词:

经常听到一些关于ARM的名词,什么ARM9,ARM11,Cortex-M4……让人有点摸不着头脑。今天听完课程之后,课程对这些名词进行了分类:

a、芯片:           S3C6410、2440、210

b、ARM内核:    Cortex-A8、ARM9、ARM11

c、指令架构版本:ARMv7、ARMv6

举个例子:

S3C2440是三星公司的一款芯片,该芯片的内核是ARM9,指令架构是ARMv4

S3C6410也是三星公司的一款芯片,该芯片的内核是ARM11,指令架构是ARMv6

210也是一块芯片,该芯片的内核是ARM Cortex-A8,指令架构是ARMv7

2、关于ARM的工作模式:

ARM架构支持7种工作模式:

User  usr :一般程序的执行模式,例如linux的用户程序

FIQ  fiq:Fast Interrupt Req,快速中断模式,支持高速数据传输

IRQ  irq:中断模式,用于一般的中断处理

Superviser  svc:用于操作系统的保护模式,例如linux的内核程序就运行在该模式之下

Abort  abt

undefined  und

System  sys:系统模式,只有ARMv4及以上的架构才具有该模式

3、关于ARM的寄存器:

ARM处理器一共有37个寄存器,其中有31个通用寄存器,6个程序状态寄存器。

3.1通用寄存器:

通用寄存器中有R0~R7,共8个不分组寄存器。(They are completely general-purpose registers, with no special uses……)

分组寄存器是R8~R14:(The physical register referred to by each of them depends on the current processor mode。)

上述这句话粗略翻译就是:物理上实际的寄存器是由当前处理器的工作模式决定的。根据处理器的模式不同,这些寄存器又被分为:

R13_svc  R14_svc  //svc即Superviser模式下的R13和R14

R13_abt  R14_abt//abt即abort模式下的R13和R14

R13_und  R14_und//und即undefined模式下的R13和R14

R13_irq  R14_irq//irq即中断模式下的R13和R14

R8_fiq  R9_fiq  R10_fiq  R11_fiq  R12_fiq  R13_fiq  R14_fiq//快速中断模式下的R13……

以上共计15个,加上User状态下的R8~R14,一共23个寄存器。加上不分组寄存器8个,刚好31个通用寄存器。

3.2程序状态字寄存器:

程序状态寄存器有CPSR,和SPSR。其中CPSR是不分组寄存器,就1个。而SPSR是分组寄存器,根据处理器的不同工作模式,SPSR也是不同的:

SPSR_svc  SPSR_abt  SPSR_und  SPSR_irq  SPSR_fiq 

所以总共有6个程序状态字寄存器。

3.3 特殊的寄存器:

3.3.1 R14

R14(also known as the Link Register or LR)has two special functions in the architecture:

//R14也被称作连接结存器LR,具有两个特殊的用途:

A、In each mode, the mode‘s own version of R14 is used to hold subroutine return addresses. When a
subroutine call is performed by a BL or BLX instruction, R14 is set to the subroutine return address. The
subroutine return is performed by copying R14 back to the program counter.

//在处理器的每种工作模式之下,每种模式对应的自己版本的R14被用来保存子程序的返回地址。当通过BL或作BLX指令来调用一个子程序时,就会将该子程序的返回地址放在R14里。子程序通过将R14里面的内容拷贝到PC来实现返回操作。

B、When an exception occurs, the appropriate exception mode‘s version of R14 is set to the exception

return address (offset by a small constant for some exceptions). The exception return is performed in
a similar way to a subroutine return, but using slightly different instructions to ensure full restoration
of the state of the program that was being executed when the exception occurred.

//当发生异常时,异常返回地址就会被装进和异常模式相对应的R14寄存器。和子程序返回的方式一样,异常的返回也采用相似的方式,但是稍微不同的是采用不同的指令来确保完全恢复程序在异常发生之前的状态。

3.3.2 R15

R15 is used to read or write the Program Counter (PC)

//R15被用来读写程序计数器(PC)

3.3.3  CPSR和SPSR

The Current Program Status Register//当前程序转态寄存器

Saved Program Status Register (SPSR)//备份程序转态寄存器

具体每一位的意义,请参看《ARM Architecture Reference Manual》A2.5

4、关于寻址方式的复习:

寻址方式:就是处理器根据指令中给出的信息来找到指令所需操作数的方式

4.1立即寻址:

一种特殊的寻址方式,操作数本身就在指令中给出。

eg: ADD R0,R0,#0x2f

该指令:将R0里面的数和立即数0x2f相加,然后将结果存放在R0里面。

4.2寄存器寻址方式:

寄存器寻址就是利用寄存器中的数据作为操作数。

eg:ADD R0,R1,R2

该指令:将R1里面的数和R2里面的数相加,然后将结果存放在R0里面。

4.3:寄存器间接寻址:

寄存器间接寻址就是寄存器里面存放的数据是操作数在内存中的地址。

eg: LDR R0,[R2]

该指令:将以R2里面存放的数据为地址的操作数加载到R0里面。

4.4基址变址寻址

基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址
eg:LDR R0,[R1,#4]

4.5相对寻址:

与基 址 变 址寻址方式 相类似 , 相对 寻址PC 指针 的 当前值为
基地 址, 指令中 的 地 址 标号作为偏移量 ,将 两 者 相加之后 得
到操作数 的有 效地 址 。 以下程序 段完 成 子 程序 的 调 用 和 返回 ,
跳转 指令BL采 采 用 了相对 寻址方式:
BL NEXT ; 跳转 到 子 程序NEXT处 处 执行
……
NEXT
……
MOV PC ,LR ; 从 子 程序 返回

时间: 2024-12-29 23:46:51

2016.4.6 我从内部看ARM课程笔记的相关文章

专题2-我从内部看ARM

一.家族检阅1.名词分类:(1)芯片名称:2440,210,6410,(2)ARM核:a8,arm9,arm11(3)指令架构:armv4,armv6,armv72.每一个芯片都包含了一个核,每一种类型的核都采用了一种具体的指令架构.而ARM公司就是出~~~~售arm核.芯片中最重要的是arm核,直接决定性能.3.核历史演变 图片:1.png cortex有三个系列:(1)M系列,列工控领域:无操作系统,类单片机(2)R系列,实时系统:可以运行操作系统(3)A系列,多媒体和无线通信:性能及高他们

设计模式----看大话设计模式笔记(二)

9.原型模式(Prototype): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建行的对象. UML图: 原型模式其实就是从一个对象创建另一个可定制的对象,并且不需要知道任何创建的细节. .NET 中实现ICloneable接口即可. 一般在初始化信息不发生变化的情况下,克隆是最好的办法,隐藏了对象创建的细节,又提高了性能. MemberwiseClone()方法,如果字段是值类型,对该字段进行逐位复制:如果是引用类型,复制引用但是不复制引用的对象,因此原始对象及产生的副本引用同一对象.

UI设计2016的设计趋势,必看!

移动应用 1. 各平台 (Android/iOS/HTML5/Web) 的标准设计语言接近一致 部分原生控件上只存在风格上的差异,对用户无显著影响. Material Design 不会大兴其道,更不可能逆袭(用 Material Design 设计的 App 在 iOS 上使用),iOS 的实用主义设计会显著影响 Material Design. 桌面常见的交互形式也将更多影响移动端,要支持 iPad Pro 这样的生产级设备,iOS/Android 会为了兼容桌面场景作出优化. 来源:Goo

[国嵌攻略][039][我从内部看内存]

内存分类 1.DRAM(动态RAM) 它的基本原件是小电容,电容可以在两极板上保留电荷,但是需要定期的刷新,否则数据会丢失.缺点是由于要定期刷新存储介质,存取速度较慢 DRAM分类: 1.1.SDRAM 同步动态随机存储器 同步:内存工作时需要有同步时钟,内部的命令的发送与数据的传输都是以该时钟为基准的 动态:存储阵列需要不断的刷新来保证数据不丢失 随机:是指数据不是线性依次存储,而是自由指定地址进行数据读写 1.2.DDR(Double Data Rate SDRAM双倍速率同步动态随机存储器

要么庸俗,要么孤独——2016你最应为自己看的十本书

一个人在大自然的级别中所处的位置越高,那他就越孤独,这是根本的,同时也是必然的. 如果一个人身体的孤独和精神的孤独互相对应那反倒对他大有好处.否则,跟与己不同的人进行频繁的交往会扰乱心神,并被夺走自我,而对此损失他并不会得到任何补偿. 一 如果你一听到一种与你相左的意见就发怒,这就表明,你已经下意识地感觉到你那种看法没有充分理由.如果某个人硬要说二加二等于五,或者说冰岛位于赤道,你就只会感到怜悯而不是愤怒,除非你自己对数学和地理也是这样无知,因而他的看法竟然动摇了你的相反的见解.所以,不论什么时

ARM 学习笔记之二 LED点亮程序设计

第一步,先聊聊单片机 LED 点亮:         单片机可操作单个位:sbit    led1    =    P1    ^    2: 通过控制 变量 led1 来控制灯 的 亮 与 灭: #include <reg52.h> sbit led1 = P1 ^ 2; void delay(unsigned int xx)//延时 { int i = 0; while(xx--) { for(i = 0; i < 400; i++); } } int main() { while(

2016年秋季-《UML大战需求分析》-阅读笔记2

<火球--UML大战需求分析>的第二章的语言很有趣,而且在开始介绍的地方有一个我们非常熟悉的一个关于"软件需求与分析"的案例,在从上大学的第一门课"信息科学技术导论"上,王老师给我们看过一张非常有趣的组图,讲的就是:客户需要的是一把梯子,系统分析员了解到的是一张凳子,开发人员做出来的是一张桌子,测试人员以为是一张椅子!需求分析是高难度和折腾人的工作,以一个示例全过程的了解需要的挑战.在通过这几天的阅读后我认为:软件需求分析存在的主要困难是由于角色的不同引

S3C6410 Memory Map &amp; ARM 指令集 笔记

Memory Map &  指令集 上面这幅图表明了 Main memory  物理地址空间和各个控制器之间的关系, 例如,0x 0000 0000 ~ 0x07FF FFFF之间的地址空间属于Int.ROM控制器 SROM控制器 和One NAND控制器寻址的空间,其余的以此类推.具体的细节和内存子系统有关系. 图中标注有2的方框表示这个地址空间既能SROM控制器或OneNAND 控制器,至于具体给谁,这取决于系统控制器 6410 支持 32-bit 的物理地址空间,这部分地址空间可以被划分为

Python Str内部功能-个人课堂笔记,课后总结

查看str内部功能,可通过和int一样的方法,或者使用type(str).dir(str)来查看. 1.capitalize:首字母大写 S.capitalize() -> string str1 = "parr" result = str1.capitalize() print(result) #返回Parr 2.center(self, width, fillchar=None):内容居中,width:总长度:fillchar:空白处填充内容(默认无) S.center(wi