一、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-A系列(A:Application 应用)

用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域 ,如智能手机、平板电脑、汽车娱乐系统、数字电视,智能本、电子阅读器、家用网络、家用网关和其他各种产品。

Cortex-R系列 (R:Real-time 实时)

针对需要运行实时操作 的系统应用,面向如汽车制动系统 、动力传动解决方案 、大容量存储控制器 等深层嵌入式实时应用。

Cortex-SC系列(SC:SecurCore)

其实,除了上述三大系列之外,还有一个主打安全的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

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐