1.汇编指令:执行一条汇编指令,可以完成某个特定功能
2.汇编指令集:很多条指令的集和
3.架构:根据指令集设计的抽象模式
4.内核:操作系统的核心,arm公司根据不同的架构,设计出不同的内核
5.SOC:system on chip 片上系统 (系统级芯片),架构上SOC=MCU+外围控制器
6.常见简称:
MPU:Microprocessor Unit微处理器,高端处理器,运行linux操作系统
MCU:Microcontroller Unit微控制单元,运行裸机开发
CPU:Central Processing Unit 中央处理器
GPU:graphics processing unit图形处理器
FPU:floating point unit 浮点处理单元
DSP:Digital Signal Processing 数字信号处理
FPGA: Field Programmable Gate Array 可编程逻辑阵列
MMU: Memory Management Unit 内存管理单元
1.A系列:可以运行Linux操作系统,手机,平板,电脑
v7架构:属于32位处理器
v8架构:属于64位处理器,向下兼容32位处理器
2.M系列:物联网种用的比较多,单片机开发中使用,可以运行小型操作系统
3.R系列:常用于实时性操作比较高的场合,如汽车电子,摄像机等
1.为什么安装交叉编译工具链
Ubuntu是x86架构,目标板是ARM架构,编译出来的程序无法直接运行,需要使用交叉编译工具链将程序编译生成ARM架构指令集的文件
指令周期:执行一条指令所需要的事件
指令宽度:指令编译成机器码,占用的代码段空间
1.RISC===精简指令集(ARM架构):在负载指令集种提取一些比较常用和简单的指令集,指令周期和指令宽度是固定的。
执行:1. arm-linux-gnueabihf-gcc -marm 1.c
2. file a.out
反汇编 : arm-linux-guneabihf-objdump -D a.out > a.dis
2.CISC===复杂指令集(X86架构):指令周期和指令宽度不固定
反汇编:objdump -D a.out > a.dis
1.v7属于32位架构,v8属于64位架构,v8向下兼容v7架构
2.v7指令占32位空间,一次可以完成32位数据的运算
v8指令占32位空间,一次可以完成64位数据的运算
3.Thumb指令集:支持32位 / 16位。一条指令占16位内存空间
4.v7架构寻址空间 0~2^32-1, v8架构寻址空间0~2^64-1
A7核: 1.特权模式:1.SVC,复位模式
2.FIQ,快速中断模式
3.IRQ,普通中断模式
4.undef,未定义模式
5.abort,终止模式:1)取数据终止模式,2)取指终止模式
6.system,系统模式
2.非特权模式:user,用户模式,执行用户相关代码
M4核: 1.线程模式:正常运行代码运行模式
2.异常模式:中断当前正在执行程序,执行中断处理程序,中断程序执行完成后,回到代码原处继续执行代码
总计:在特定的模式下,执行特定的代码,完成某个特定的功能。
特权模式比非特权模式权限高,工作模式可以进行切换:1)软件编程切换 2)外部硬件中断进入。
系统模式和用户模式共用一套寄存器。
arm处理器7种工作模式,cortex另有一种 monitor安全监控模式
1.register变量:寄存器变量,运行速度比较快,不能取地址,只能通过编号进行访问
2.volatile变量:对地址进行操作时,需要在变量前加上volatile,保证每次去内存中取值,而不是在cache缓存器种取值
寄存器:属于核内部的存储器,一般存放暂时参与运算的数据
3.每种工作模式下,都有自己的寄存器,user和system共用一套寄存器,有私有寄存器时,不可以访问共有寄存器,没有私有寄存器,可以访问共有寄存器
4.cortex有43个寄存器,arm有37个寄存器
1.sp----the stack pointer 栈指针寄存器:指向栈空间某一片地址,压栈和出栈时需要移动栈指针
2.lr----the linking register 链接寄存器:保存函数返回地址
3.pc----program counter 程序计数器:指向当前取值指令的地址,pc中的值会自动+4,指向下一条指令
4.cpsr----currented program statued register 当前程序状态寄存器:用于保存当前程序的状态
5.spsr----saved program statued register 保存程序状态寄存器:保存cpsr寄存器中的值
cpsr当前状态寄存器详解:
N[31]:执行结果是否为负数,N=1:负数,N=0:非负数(negative)
Z[30]:结果是否为0 ,Z=1:零,Z=0:非零 (zero)
C[29]:进位 / 借位标志位 (carry)
进位:加法运算产生进位标志位,低32位寄存器向高32位寄存器进行进位
C = 1:低32位寄存器向高32位寄存器产生进位
C = 0:低32位寄存器向高32位寄存器没有产生进位
借位:减法运算产生借位标志位,低32位寄存器向高32位寄存器进行借位
C = 0:低32位寄存器向高32位寄存器进行借位
C = 1:低32位寄存器向高32位寄存器没有没有进行借位
V[28]:符号位,V=1:变化,V=0:没有变化
I[7]:IRQ中断标志位
I = 1:屏蔽IRQ中断标志位
I = 0:不屏蔽IRQ中断标志位
F[6]:FRQ中断标志位
F = 1:屏蔽FIQ中断标志位
F = 0:不屏蔽FIQ中断标志位
T[5]:状态标志位 (state)
T = 0:ARM状态,执行arm指令集,一条汇编指令占用4字节空间
T = 1:thumb状态,执行thumb指令集,一条汇编指令占用2字节空间
M[4:0]:模式位 (mode)
10000 User mode;
10001 FIQ mode;
10011 SVC mode;
10111 Abort mode;
11011 Undef mode;
11111 System mode;
10110 Monitor mode;
10010 IRQ mode;