ARM基础知识
ARM基础知识
一、ARM是什么?
-
ARM既可以认为是一个公司的名字 ,也可以认为是对一类处理器的统称 ,还可以认为是一种技术的名字 。
-
ARM公司是专门从事基于RISC技术芯片设计开发 的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可 ,由合作公司生产各具特色的芯片。
-
ARM处理器的内核是统一的 ,由ARM公司提供,而片内部件则是多样的 ,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设 ,从而具有很大的优势。
二、ARM内核与架构
任何一款arm芯片主要由两大部分组成:arm内核 ,外设 。
ARM内核
arm内核: arm内核主要由:寄存器 、指令集 、总线 、存储器映射规则 、中断逻辑 和调试组件 等。
内核是由ARM公司设计并以销售方式授权给个芯片厂商使用的(ARM公司本身不做芯片)。
外设: 包括计时器、A/D转换器、存储器、I2C、UART、SPI、ROM等等。
由各个芯片厂商自己设计并与ARM内核衔接配套。不同的芯片厂商就有不同的外设,因此构成了数量和规格庞大的ARM芯片产业。
arm指令集架构
指令集的设计是处理器结构中最重要的部分,用arm的术语称之为ISA(Instruction Set Architecture)。
对于32位的cpu,这些指令就是一个个32位的01的序列,不同的值就代表了不同的机器指令 ,cpu的硬件能完美的解析并执行这些指令,比如寻址、运算、异常处理等等。
从1985年ARMv1架构诞生起,到2011年,ARM架构已经发展到了第八代ARMv8。
Cortex-A32/35/53/57/72/73/77/78采用的都是ARMv8 架构,这是ARM公司的首款支持64位指令集的处理器架构 。
ARM11芯片之前,每一个芯片对应的架构关系如下:
ARM11之后处理器和指令集架构
ARM11芯片之后,也就是从ARMv7架构 开始,ARM的命名方式有所改变。
新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。
ARM处理器型号
用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域 ,如智能手机、平板电脑、汽车娱乐系统、数字电视,智能本、电子阅读器、家用网络、家用网关和其他各种产品。
针对需要运行实时操作 的系统应用,面向如汽车制动系统 、动力传动解决方案 、大容量存储控制器 等深层嵌入式实时应用。
其实,除了上述三大系列之外,还有一个主打安全的Cortex-SC系列(SC:SecurCore),主要用于政府安全芯片 。
三、什么是SOC?
SoC的全称叫做:System-on-a-Chip ,中文的的意思就是“把系统都做在一个芯片上 ”。
SoC上集成了很多手机上最关键的部件 ,比如CPU 、GPU 、内存 、也就说虽然它在主板上的存在是一个芯片,但是它里边可是由很多部件封装组成的。
比如通常我们所说的高通801,麒麟950.三星的exynos 4412,A6等等都只是系统部件打包封装(SoC)后的总称。然而各家的打包封装的内容则不尽相同,原因也不尽相同。
四、ARM工作模式
五、汇编指令
汇编指令:机器指令(32位的二进制数)的助记符,需要经过编译得到机器指令,由cpu读取执行
伪指令:不是真正的汇编指令,是用来指导编译过程的,由编译器提供
立即数:就类似c语言的常量 1 2,在汇编中:#1
5.1数据搬移指令
Mov r0, #1 @将立即数1拷贝到寄存器r0中
Mov r1,r0 @ r1 = r0
汇编指令的格式:
<opcode> {<cond>} {s} <rd>,<rn>,{<operand2>}
Opcode:汇编指令
Cond:执行条件
S:是否影响cpsr寄存器的高四位
Rd:目标寄存器
Rn:第一个操作数寄存器,只能是寄存器,mov没有
Operand2:第二操作数,可以是寄存器,也可以是立即数
5.2算术指令
Add r2,r1,r0 @r2 = r1+r0
Add r2,r2,r1 @r2 = r2+r1 -->add r2,r1 @r2 += r1
Add r2,r1,lsl #2 @r2 = r2 + r1 << 2; 注意:第二操作数只能是寄存器
Sub r2,r1,r0 @r2 = r1-r0
Mul r2,r1,r0 @r2 = r1 * r0
5.3逻辑指令
And r2,r1,r0 @r2 = r1 & r0
Orr r2,r1,r0 @r2 = r1 | r0
Bic r2,#0x11 @将r2的第四位和第0位清0
5.4比较指令
Cmp r0,r1 @比较r0和r1的大小
cmp r0,r1
moveq r2,#0xee
movhi r2,#0xdd
movcc r2,#0xcc
Tst r0,#0x10 @判断r0的第4位是否为0
5.4跳转指令
B aa
5.5内存操作指令
Ldr:将内存的内容(指令或者数据)拷贝到寄存器
Str:将寄存器的内容拷贝到内存
内存和内存拷贝:内存1--》寄存器--》内存2
ldr r0,[r1] --> 将r1这个内存地址处的内容拷贝到寄存器r0
Str r0,[r1] -->将寄存器r0拷贝到r1这个内存
每次操作2个字节
ldrh r2,[r0]
strh r2,[r1]
每次操作1个字节
ldrb r2,[r0]
strb r2,[r1]
Ldrb r2,[r0,#1] @r2 = *(r0+1)
Ldrb r2,[r0],#1 @r2 = *r0, r0 = r0+1
更多推荐
所有评论(0)