RISC,精简指令集 ARM
ISC,complex 复杂指令集 X86
指令集 ARM核 SOC
ARMV4 ARM7 s3c44b0
ARMV5 ARM9 s3c2410/s3c2440
ARMV6 ARM11 s3c6410
ARMV7
ARMV8 cortx-A: sp56818 (cortex-A53)
高大尚领域 多媒体数据处理 例如手机 PC
cortx-R:
real time 高实时性领域
cortx-M:
以单片机的价格实现32bit处理器能力
stm32
1、流水线
三级流水线:取指令 解码指令 执行指令
for(i=0; i<1000000; i++)
{
for(j=0; j<100; j++)
{
...
}
}
for(j=0; j<100; j++) //这种方式代码执行效率高(外层循环次数越少效率越高)
{
for(i=0; i<1000000; i++)
{
...
}
}
经典书籍:ARM体系结构与编程.pdf
ARM嵌入式系统开发:软件设计与优化.pdf
2、工作模式
ARM有7种工作模式
1、SVC: 管理模式 系统上电 (内核态)
2、FIQ: 快速中断模式 产生了高优先级中断
3、IRQ: 中断模式 产生了低优先级中断
4、Abort:终止模式 产生了非法的存储器访问
5、Undef:未定义模式 执行到非法的指令
6、System:系统模式
7、User:用户模式 (用户态)
前5种称为异常模式,前6种称为特权模式
3、工作状态
arm状态, 执行32bit机器指令时
thumb状态, 执行16bit机器指令时
这种两种工作状态软件可以控制自由切换
当处理异常代码时,异常代码必须是ARM指令
4、寄存器组织结构
寄存器与特殊功能寄存器的区别:
1)存在位置不同
寄存器在ARM 核内
特殊功能寄存器在ARM 核外
2)访问方式不同
寄存器只有名字没有地址,C语言很难访问到
特殊功能寄存器都有特定的物理地址,可以通过指针访问
3)功能不同
特殊功能寄存器是驱动硬件的媒介
ARM核中有37个32bit的寄存器
其中有31个通用寄存器,被命名为r0 r1 r2 ... r15
r13(sp, 栈指针寄存器)
r14(lr, 保存函数的返回地址)
r15(pc, 取指令的地址)
有6个状态寄存器
1个CPSR寄存器
[4:0] MODE,工作模式
[5] T =0 处于ARM工作状态,T =1 处于thumb工作状态
[6] F 0/1 使能/禁止 FIQ异常
[7] I 0/1 使能/禁止 IRQ异常
[28] V overflow 有符号数据运算是否溢出 (忽略)
[29] C CARRAY 最高位(第31bit)是否有进位或者借位
例如 0xfffffffc + 8 该运算会使C=1,0xfc +8 C=0
[30] Z zero 运算结果是否为0,为0 Z=1,反之 Z=0
[31] N negative 负数
5个SPSR寄存器,它是CPSR的备份寄存器,每种工作模式下只能访问其中的一个子集
5、异常与异常向量表
ARM 支持7种异常
Reset 按下复位键 SVC
Undef 执行到不认识的机器指令 Undef
SWI 软中断汇编指令swi的执行 SVC
PRETCH ABORT 取指令时产生了非法的存储器访问 Abort
DATA ABORT 取数据时产生了非法的存储器访问 Abort
IRQ 产生了低优先级的中断 IRQ
FIQ 产生了高优先级的中断 FIQ
ARM收到异常信号后,硬件会自动做4件事
1)备份CPSR
SPSR_=CPSR
2) 修改CPSR
mode
T = 0//切换为ARM工作状态
F = 1 //屏蔽FIQ异常
I =1 //屏蔽IRQ异常
3) 保存返回地址到LR_
4) 给PC赋值
reset pc = vec_base + 0x00
undef pc = vec_base + 0x04
swi pc = vec_base + 0x08
pre ab pc = vec_base + 0x0c
dat ab pc = vec_base + 0x10
irq pc = vec_base + 0x18
fiq pc = vec_base + 0x1c
异常处理结束后 软件必须完成的工作
1)恢复CPSR
CPSR=SPSR_
2) 给PC赋值
PC = LR_
6、对齐方式
struct test
{
int a;
char c;
short n;
char x;
long m;
}test1;(32位机器)
sizeof(test1) = 4+4+4 +4 = 16
4字节对齐:起始地址可以被4整除
7、ARM支持的数据类型
byte 8bit(1个字节)
half word 16bit(2个字节)
word 32bit(4个字节)
double word 64bit(8个字节)
8、大小端问题
int x = 0x12345678;
地址 大 小
0x100 12 78
0x101 34 56
0x102 56 34
0x103 78 12
高位放在低地址就是大端模式
低位放在低地址就是小端模式
union
{
int a;
char c[4];
}test;
test.a=1;
if(test.c[0]==1)
小端
---------------------------------
int x= 0x12345678;
*((char *)&x)==0x78
小端
ARM 既支持大端模式 也支持小端模式
RISC,精简指令集 ARM
ISC,complex 复杂指令集 X86
指令集 ARM核 SOC
ARMV4 ARM7 s3c44b0
ARMV5 ARM9 s3c2410/s3c2440
ARMV6 ARM11 s3c6410
ARMV7
ARMV8 cortx-A: sp56818 (cortex-A53)
高大尚领域 多媒体数据处理 例如手机 PC
cortx-R:
real time 高实时性领域
cortx-M:
以单片机的价格实现32bit处理器能力
stm32
1、流水线
三级流水线:取指令 解码指令 执行指令
for(i=0; i<1000000; i++)
{
for(j=0; j<100; j++)
{
...
}
}
for(j=0; j<100; j++) //这种方式代码执行效率高(外层循环次数越少效率越高)
{
for(i=0; i<1000000; i++)
{
...
}
}
经典书籍:ARM体系结构与编程.pdf
ARM嵌入式系统开发:软件设计与优化.pdf
2、工作模式
ARM有7种工作模式
1、SVC: 管理模式 系统上电 (内核态)
2、FIQ: 快速中断模式 产生了高优先级中断
3、IRQ: 中断模式 产生了低优先级中断
4、Abort:终止模式 产生了非法的存储器访问
5、Undef:未定义模式 执行到非法的指令
6、System:系统模式
7、User:用户模式 (用户态)
前5种称为异常模式,前6种称为特权模式
3、工作状态
arm状态, 执行32bit机器指令时
thumb状态, 执行16bit机器指令时
这种两种工作状态软件可以控制自由切换
当处理异常代码时,异常代码必须是ARM指令
4、寄存器组织结构
寄存器与特殊功能寄存器的区别:
1)存在位置不同
寄存器在ARM 核内
特殊功能寄存器在ARM 核外
2)访问方式不同
寄存器只有名字没有地址,C语言很难访问到
特殊功能寄存器都有特定的物理地址,可以通过指针访问
3)功能不同
特殊功能寄存器是驱动硬件的媒介
ARM核中有37个32bit的寄存器
其中有31个通用寄存器,被命名为r0 r1 r2 ... r15
r13(sp, 栈指针寄存器)
r14(lr, 保存函数的返回地址)
r15(pc, 取指令的地址)
有6个状态寄存器
1个CPSR寄存器
[4:0] MODE,工作模式
[5] T =0 处于ARM工作状态,T =1 处于thumb工作状态
[6] F 0/1 使能/禁止 FIQ异常
[7] I 0/1 使能/禁止 IRQ异常
[28] V overflow 有符号数据运算是否溢出 (忽略)
[29] C CARRAY 最高位(第31bit)是否有进位或者借位
例如 0xfffffffc + 8 该运算会使C=1,0xfc +8 C=0
[30] Z zero 运算结果是否为0,为0 Z=1,反之 Z=0
[31] N negative 负数
5个SPSR寄存器,它是CPSR的备份寄存器,每种工作模式下只能访问其中的一个子集
5、异常与异常向量表
ARM 支持7种异常
Reset 按下复位键 SVC
Undef 执行到不认识的机器指令 Undef
SWI 软中断汇编指令swi的执行 SVC
PRETCH ABORT 取指令时产生了非法的存储器访问 Abort
DATA ABORT 取数据时产生了非法的存储器访问 Abort
IRQ 产生了低优先级的中断 IRQ
FIQ 产生了高优先级的中断 FIQ
ARM收到异常信号后,硬件会自动做4件事
1)备份CPSR
SPSR_=CPSR
2) 修改CPSR
mode
T = 0//切换为ARM工作状态
F = 1 //屏蔽FIQ异常
I =1 //屏蔽IRQ异常
3) 保存返回地址到LR_
4) 给PC赋值
reset pc = vec_base + 0x00
undef pc = vec_base + 0x04
swi pc = vec_base + 0x08
pre ab pc = vec_base + 0x0c
dat ab pc = vec_base + 0x10
irq pc = vec_base + 0x18
fiq pc = vec_base + 0x1c
异常处理结束后 软件必须完成的工作
1)恢复CPSR
CPSR=SPSR_
2) 给PC赋值
PC = LR_
6、对齐方式
struct test
{
int a;
char c;
short n;
char x;
long m;
}test1;(32位机器)
sizeof(test1) = 4+4+4 +4 = 16
4字节对齐:起始地址可以被4整除
7、ARM支持的数据类型
byte 8bit(1个字节)
half word 16bit(2个字节)
word 32bit(4个字节)
double word 64bit(8个字节)
8、大小端问题
int x = 0x12345678;
地址 大 小
0x100 12 78
0x101 34 56
0x102 56 34
0x103 78 12
高位放在低地址就是大端模式
低位放在低地址就是小端模式
union
{
int a;
char c[4];
}test;
test.a=1;
if(test.c[0]==1)
小端
---------------------------------
int x= 0x12345678;
*((char *)&x)==0x78
小端
ARM 既支持大端模式 也支持小端模式
举报