ARM System Developer's Guide 学习笔记 Chapter 3


ARM System Developer’s Guide 学习笔记 Chapter 3

介绍

本章是整个ARM嵌入式系统开发手册中最基本的章节。在做嵌入式研发无论是深度优化还是高效算法都需要本章知识为基础。这里介绍了最常用和实用的ARM 指令。

指令系统

一个CPU所能够处理的全部指令集合,比如多数个人电脑采用的是x86指令集。CPU对指令需要进行译码才能运行。

  • 指令分类 :CISC(复杂指令集)和RISC(精简指令集)。

寄存器

CPU的一个组成部分,里面存放着指令、数据和地址等供CPU计算使用,速度比较快。

  • 寄存器分类:通用寄存器(完成通用的计算功能,谁都可以使用)和 专用寄存器(状态寄存器,下一条执行指令寄存器,栈寄存器等,不能随便修改)。

不同的ARM架构支持不同的指令,然而,新的版本通常加一些新的指令保留向下兼容。ARMv4T架构应在ARMv5TE处理器上执行。下表展示的完整的可用的ARM指令为ARMv5TE指令集集架构(ISA)。
ARM指令集(1)

ARM指令集(2)

ISA包括了所有的核心指令。
我们发现处理器操作使用了pre-conditions和post-conditions来描述指令执行前后的寄存器和存储器。
PRE
<instructon/s>
PRO
在pre- 和 post-conditions,存储器表示为:

mem<data_size>[addresses]

data_size比特的存储器起始地址为addresses 字节。比如:mem32[1024]为起始地址为1KB的32位存储器。
ARM指令处理在寄存器中的数据,并且只能使用加载(load)和存储(store)指令来访问存储器。ARM指令集通常有两个或者三个操作数(operands)。
指令集格式示例

在上述指令中,ADD指令是将 r1 和 r2 寄存器(source源寄存器)中的值相加,然后把结果写回到r3 (destination 目标寄存器)。

ARM 汇编特点1:LDR/STR架构

ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。

  • ldr(load register)指令将内存内容加载入通用寄存器。
  • str(store register)指令将寄存器内容存入内存空间中。
  • ldr/str组合用来实现 ARM CPU和内存数据交换

ARM 汇编特点2:指令后缀

同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:

  • B(byte)功能不变,操作长度变为8位
  • H(Half word)功能不变,长度变为16位
  • S(Signed)功能不变,操作数变为有符号
    如ldr, ldrb, ldrh, ldrsb, ldrsh
  • S(S标志)功能不变,影响CPSR标志位,如mov, movs

AEM 汇编特点3:条件后缀

  • EQ 相等
  • NE 不相等
  • CS/HS 无符号数大于或等于
  • CC/LO 无符号数小于
  • MI 负数
  • PL 正数或零
  • VS 溢出
  • VC 没有溢出
  • HI 无符号数大于
  • LS 无符号数小于或等于
  • GE 有符号数大于或等于
  • LT 有符号数小于
  • GT 有符号数大于
  • LE 有符号数小于或等于
  • AL 无条件执行(指令默认条件)
  • NV 从不执行(不要使用)
  • 例子:moveq r0, r1 @如果eq后缀成立,则直接执行mvo r0, r1; 如果eq不成立则本句代码直接作废,相当于没有。
  • 条件后缀执行注意两点:
    1.条件后缀是否成立,不是取决于本句代码,而是取决于这句代码之前的代码运行后的结果。
    2.条件后缀决定了这句代码是否被执行,而不影响其他代码的执行。
  • 多级指令流水线:为增加处理器指令流的速度,ARM使用多级流水线

ARM 指令集分类

ARM指令集根据指令的类别来划分为以下几类
1.数据处理指令(data processing instructions)
2.分支指令(branch instructions)
3.访存指令(load-store instructions)
4.软件中断指令(software interrupt instructions)
5.程序状态寄存器指令(program status instructions)

将通过3.1~3.5 五个笔记对每个类进行详解。
ARM System Developer’s Guide 学习笔记 Chapter 3
同步滚动:
介绍
本章是整个ARM嵌入式系统开发手册中最基本的章节。在做嵌入式研发无论是深度优化还是高效算法都需要本章知识为基础。这里介绍了最常用和实用的ARM 指令。

指令系统
一个CPU所能够处理的全部指令集合,比如多数个人电脑采用的是x86指令集。CPU对指令需要进行译码才能运行。

指令分类 :CISC(复杂指令集)和RISC(精简指令集)。
寄存器
CPU的一个组成部分,里面存放着指令、数据和地址等供CPU计算使用,速度比较快。

寄存器分类:通用寄存器(完成通用的计算功能,谁都可以使用)和 专用寄存器(状态寄存器,下一条执行指令寄存器,栈寄存器等,不能随便修改)。
不同的ARM架构支持不同的指令,然而,新的版本通常加一些新的指令保留向下兼容。ARMv4T架构应在ARMv5TE处理器上执行。下表展示的完整的可用的ARM指令为ARMv5TE指令集集架构(ISA)。

ARM指令集(1)
ARM指令集(1)
ARM指令集(2)
ARM指令集(2)
ISA包括了所有的核心指令。
我们发现处理器操作使用了pre-conditions和post-conditions来描述指令执行前后的寄存器和存储器。
PRE
<instructon/s>
PRO
在pre- 和 post-conditions,存储器表示为:

mem<data_size>[addresses]

data_size比特的存储器起始地址为addresses 字节。比如:mem32[1024]为起始地址为1KB的32位存储器。
ARM指令处理在寄存器中的数据,并且只能使用加载(load)和存储(store)指令来访问存储器。ARM指令集通常有两个或者三个操作数(operands)。

指令集格式示例
指令集格式示例
在上述指令中,ADD指令是将 r1 和 r2 寄存器(source源寄存器)中的值相加,然后把结果写回到r3 (destination 目标寄存器)。

ARM 汇编特点1:LDR/STR架构
ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。

ldr(load register)指令将内存内容加载入通用寄存器。
str(store register)指令将寄存器内容存入内存空间中。
ldr/str组合用来实现 ARM CPU和内存数据交换
ARM 汇编特点2:指令后缀
同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:

B(byte)功能不变,操作长度变为8位
H(Half word)功能不变,长度变为16位
S(Signed)功能不变,操作数变为有符号
如ldr, ldrb, ldrh, ldrsb, ldrsh
S(S标志)功能不变,影响CPSR标志位,如mov, movs
AEM 汇编特点3:条件后缀
EQ 相等
NE 不相等
CS/HS 无符号数大于或等于
CC/LO 无符号数小于
MI 负数
PL 正数或零
VS 溢出
VC 没有溢出
HI 无符号数大于
LS 无符号数小于或等于
GE 有符号数大于或等于
LT 有符号数小于
GT 有符号数大于
LE 有符号数小于或等于
AL 无条件执行(指令默认条件)
NV 从不执行(不要使用)
例子:moveq r0, r1 @如果eq后缀成立,则直接执行mvo r0, r1; 如果eq不成立则本句代码直接作废,相当于没有。
条件后缀执行注意两点:
1.条件后缀是否成立,不是取决于本句代码,而是取决于这句代码之前的代码运行后的结果。
2.条件后缀决定了这句代码是否被执行,而不影响其他代码的执行。
多级指令流水线:为增加处理器指令流的速度,ARM使用多级流水线
ARM 指令集分类
ARM指令集根据指令的类别来划分为以下几类
1.数据处理指令(data processing instructions)
2.分支指令(branch instructions)
3.访存指令(load-store instructions)
4.软件中断指令(software interrupt instructions)
5.程序状态寄存器指令(program status instructions)

将通过3.1~3.5 五个笔记对每个类进行详解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
内容简介回到顶部↑本书从软件设计的角度,全面、系统地介绍了ARM处理器的基本体系结构和软件设计与优化方法。内容包括:ARM处理器基础;ARM/Thumb指令集;C语言与汇编语言程序的设计与优化;基本运算、操作的优化;基于ARM的DSP;异常与中断处理;固件与嵌入式OS;cache与存储器管理;ARMv6体系结构的特点等。全书内容完整,针对各种不同的ARM内核系统结构都有详尽论述,并有大量的例子和源代码。附录给出了完整的ARMv4/v5/Thumb指令的功能、编码、周期定时以及汇编参考。 本书适于从事ARM嵌入式系统教学与研发,或想把其它嵌入式平台的软件移植到ARM平台上去的专业技术人员使用,要求对ARM处理器有一定的了解,并有C语言和汇编语言基础。若在编译原理、操作系统、数字信号处理、计算机体系结构等方面有一定的基础,则效果会更好。 本书也可作为嵌入式系统专业方向的本科生和研究生相关课程的教材或教学参考书。 本书从开发者的角度,侧重于软件方面,全面描述了ARM内核的操作。它不仅示范了如何用C语言和汇编语言编写高效的ARM软件,还说明了如何优化代码。本书中的所有范例程序都可以集成到商用产品中,或者作为模板,以加速软件开发。 本书涵盖了ARM和Thumb指令集、Intel的XScale处理器,概括了ARM体系结构的不同版本之间的差异,示范了如何实现DSP算法,解释了异常和中断处理,描述了围绕ARM内核的cache技术,以及最有效的存储器管理技术。 最后一章介绍了ARMv6体系结构的特征和ARM未来的发展,以及对指令集所做的最新改进,这些改进增强了ARM体系结构的DSP和多媒体处理能力。 本书特色 ●本书从系统和软件的角度来描述ARM内核,这是与其它书的显著差别。 ●作者结合了丰富的ARM软件工程经验和ARM开发者所需要的广泛、透彻的知识。 ●书中提供了许多实用的可运行代码范例,并作了详尽的解释,可以从出版商的网站下载:http://www.mkp.com/companions/1558608745。 ●包含了一个简单的嵌入式操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值