处理器内核

ARM7TDMI外部接口图:

指令流水线

为了增加处理器指令流的处理速度,ARM7系列采用了三级流水线,允许多个操作同时进行(一个执行的同时,另一个进行译码,另一个进行取址来提高效率),而非顺序操作。注意:pc指向正在被取址的指令,而非正在执行的指令。

最佳流水线

指令周期CPI=6,6个时钟周期执行了6条指令,所有的操作都在寄存器中

LDR流水线

分支流水线

中断流水线

ARM9TDMI

ARM9TDMI使用了哈佛架构增加了指令存储器接口和数据存储器接口,可以实现指令和数据的同时访问,采用的5级流水线,CPI为1.5,提高了最大时钟频率

图中我们可以看到ARM7和ARM9一些区别,ARM7在执行阶段读寄存器,而ARM9在译码阶段读寄存器。

ARM10

下面我们用一张图来总结一下:

ARM汇编指令集

条件执行和标志位

ARM指令都可以通过添加适当的条件码来达到条件执行的目的,举个例子

CMP r3,#0

ADDNE r0,r1,r2

判断R3寄存器中的内容是否等于0,不等于再执行加指令 r0=r1+r2

我们也可以通过添加后缀 S来影响标志位

例如 SUBS

下面我把一些条件码用一张图呈现出来:

ARM数据处理指令机器码格式

31-28位:为指令的条件码

24-21位:指令的操作码

20位:为标志位S

19-16位:Rn第一操作数寄存器的编码

15-12位:Rd目标寄存器的编码

11-0位:操作数(3-0位:第二操作数R寄存器的编码,5-6位:移位方式,11-7位:移动位数)

注意:不能对立即数进行左移右移操作!!

下面我们来展示一些指令的使用加深印象:

1.搬移指令MOV

@ 搬移指令.text        @汇编文本段的开始mov r0, #5  @r0=5mov r1,r0   @ r1=r0mov r2, #1  @ r2=1mov r3, r2, LSL #3 @r3=r2<<3mov r4,r3, LSR #2mrs r6,cpsr  @将cpsr状态寄存器的内容搬移到其他寄存器@mov r1,#0x10
@msr cpsr,r1  @将R1寄存器内容写入cpsr状态寄存器中.end       @汇编文本段的结束

我们在keil中进行编译,可以看到E3A00005是第一条指令的机器码,E为1110是默认的条件码,而24-21位为1101刚好是MOV的操作码,而11-0位为5刚好也是我们的操作数5.

2.逻辑指令 and与,orr或,bic清零

@1.将模式设置为user/system模式
mrs r0, cpsr @将cpsr内容取出放到r0寄存器and r0, #0xfffffffc @将r0寄存器的内容相与msr cpsr,r0 @将内容写到cpsr寄存器@2.orr指令
orr r0,#0x3
mrs r0,cpsr  @可以,但是在user模式下可以对cpsr进行读取操作
msr cpsr,r0  @不可以,user模式下不是特权模式,不能对cpsr进行写入操作所以不能变回svc模式

注意,当我们通过更改cpsr状态寄存器来切换模式,将SVC切换到user模式后,不能在user模式下再对cpsr寄存器进行写入将其变回svc状态,但是可以进行读取操作

@3.bic指令将FIQ开启
mrs r0, cpsr
bic r0,#0x40  @将r0中6号位清零
msr cpsr,r0

bic指令可以将立即数中为1的bits位清零,我们可以通过这个操作更改状态寄存器的内容,比如上面我们就将状态寄存器中的6号位清零达到开启FIQ的操作。

3.比较指令CMP,TST

@4.tst指令
mrs r0,cpsr
tst r0,#0x20 @测试r0的第5号位是否为0@5.cmp指令
cmp r0,#1 @比较r0寄存器中的内容是否和1相等@6.判断当前状态是否是ARM状态,是则切换到user工作模式mrs r0,cpsr
tst r0,#0x20
biceq r0,#0x3
msreq cpsr,r0

可以看到在判断之后我们的清零和写入操作都加上了条件码,满足对应的条件才会执行对应的指令

4.跳转指令b,bl

b:跳转到某段标号的代码处

bl:跳转到某个标号处,同时记录下一条指令的地址到LR寄存器

@1.跳转指令b
.text
@编写代码实现1+2+。。。。+10
mov r0,#1
loop:       @某段代码的标号
cmp r0,#11
addlt r1,r1,r0 @lt表示条件码
addlt r0,#1
blt loop    @跳转到loop
NOP @空指令
.end

可以看到我们代码中加了条件码来达到我们的执行条件就是当r0中寄存器的内容小于11时执行加法指令和跳转指令来达到循环的效果。

@2.跳转指令bl.text
main:mov r0,#2@ bl 跳转到某个标号处,同时记录下一条指令的地址到LR寄存器bl func1
while:b while
func1:mov r6,lrcmp r0,#2bleq func2blne func3mov pc,r6 @让cpu到lr指定的地址处取指令,也就是回到bl的下一条指令处
func2:add r0,#3mov pc,lr
func3:sub r0,#1mov pc,lr.end

bl在执行跳转的时候会将我们下一条指令的地址放到lr中,但是在func1中我们又会进行一次条件跳转可能会导致之前的指令地址被覆盖,所以我们将地址保存到了r6寄存器中,这样func1执行完毕后才能跳转回原来该继续执行的位置。

5.load和store

ldr默认读4个字节,ldrb读一个字节,ldrh读两个字节

下面我们来看看例子:

.textmain:@ldr伪指令,将buf这个地址不合法的立即数写到r0中ldr r0,=buf@ldrb将r0地址上的第一个字节数据读到r1中ldrb r1,[r0]@ldrb将r0+4地址上的第一个字节读到r1中ldrb r1,[r0,#4]mov r2,#0x9@strb将r2中的数据前1个字节写入r0+2地址上@ *(r0+2)=r2strb r2,[r0,#2]main_end:NOPNOP.data @汇编文件数据段的开始
buf:    @buf相当于缓冲区的首地址(数组名)@.byte 表示一个字节空间.byte  0x1,0x2,0x3,0x4,0x5.end

ARM体系结构2:处理器内核和汇编指令集相关推荐

  1. 计算机硬件基础ARM处理器概论(ARM体系结构与接口技术)

    计算机硬件基础 D1 底层课程导学 1.编程基础 2.应用开发 (函数) 3.底层开发 C语言基础 IO ARM C高级与linux 进程 系统移植 数据结构 网络编程 驱动开发 嵌入式系统分层 操作 ...

  2. LV.9 ARM体系结构与接口技术

    1 计算机硬件基础 Day1-1 底层课程导学 课程回顾 1.编程基础 1.C语言基础 2.C高级及Linux 3.数据结构 2.应用开发 1.IO 2.进程 3.网络编程 3.底层开发 1.ARM ...

  3. 【计算机系统结构】~ ROM/PROM/EPROM/E2PROM/FLASH、SOC 片上系统、总线、CPU 处理器、Cache、DDR、ARM 体系结构、虚拟内存、内核 kernel

    1. ROM/PROM/EPROM/E2PROM/FLASH ROM 指的是"只读存储器",即 Read-Only Memory.这是一种线路最简单半导体电路,通过掩模工艺, 一次 ...

  4. 01 ARM体系结构与汇编指令

    注:本文章是由笔者学习朱有鹏arm的学习笔记,特此感谢朱老师. 关于汇编: 1.汇编的实质是机器指令(机器码)的 助记符,是一款CPU的本质特征. 2.不同CPU的机器指令集设计不同,因此 汇编程序不 ...

  5. 深度剖析Linux内核(ARM体系结构)

    一.ARM处理器简介及RISC特点 1.ARM处理器简介: ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下 的微处理器 ...

  6. 最全ARM体系结构知识:汇编、架构、异常级别和安全状态

    关注.星标公众号,直达精彩内容 来源:智能软件研究中心 | 直接来源:华为开发者社区 作者:罗宇哲 01 ARM汇编指令 操作系统中硬件相关的部分集中体现在汇编指令和对寄存器的操作中,因此我们对ARM ...

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

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

  8. ARM处理器寄存器和汇编指令系统

    1.ARM的处理器模式 ARM体系结构支持7种处理器模式,分别是:用户.FIQ.IRQ.管理.中止(abort).未定义和系统模式.除了用户模式外,其余都称之为特权模式.除了用户和系统模式外,其余都称 ...

  9. intel 指令集_苹果首款ARM Mac来了,浅谈ARM和Intel处理器

    点击蓝字 关注我们 苹果发布会 在11月11日凌晨,苹果的新品发布会中 ,推出了基于首款ARM框架的Mac. 苹果的Mac将不再使用 Intel的芯片,而且ARM 版 Mac 会采用自研 GPU.这意 ...

最新文章

  1. Bitmap Font 报错“characters from the file are not available in the font”解决办法
  2. 干货丨从基础知识到实际应用,一文了解「机器学习非凸优化技术」
  3. UVA10780:Again Prime? No Time(数论)
  4. 深度学习-清晰易懂的马尔科夫链原理介绍
  5. python写程序求多项式的和_用正则编译和搜索在python中计算区分多项式的系数
  6. 堆(heap)和栈(stack)
  7. Rearrange an array of positive and negative integers
  8. 5 SD配置-企业结构-定义-定义销售组
  9. 程序员看的JPEG图像压缩介绍(多图慎入)
  10. (转)Hibernate的优化方案
  11. java 设计模式 示例_Java示例中的装饰器设计模式
  12. IDEA 使用 学习列表
  13. docker设置不同网络和迁移到指定网络
  14. linux电子教室软件,在Deepin Linux系统下安装和设置Veyon多媒体电子教室的方法
  15. js页面跳转与url获取
  16. YYText识别链接和点击事件
  17. html放大镜小图标,canvas初尝试之放大镜图标绘制
  18. 系统集成项目管理工程师章节重点第一章
  19. dnf服务器文件夹,有效提升DNF游戏稳定性 缓存文件清理教学
  20. Forward Secrecy

热门文章

  1. “被提拔3个月,我离职了”:给想做管理的人提个醒!
  2. 【贪心】加勒比海盗船-最优装载问题
  3. Verilog时序逻辑硬件建模设计(四)移位寄存器
  4. 一个老牛的视频sdk
  5. Python 分组处理
  6. 【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全)
  7. 疯狂Java讲义(读书笔记)(第五章)
  8. pptx文件怎么打开
  9. dock运行环境对linux的版本要求,Latte Dock 0.8发布,KDE Plasma 5.12或更高版本才能用...
  10. 局域网访问提示无法访问检查拼写_访问某一个共享提示windows无法访问,请检查名称的拼写,访问其他共享正常...