1、RISC和CISC的区别
1.1 RISC : 精简指令集
使用精简指令集的架构:ARM架构 RISC-V架构 PowerPC架构 MIPS架构
ARM架构 :目前使用最广泛的架构,ARM面向的低端消费类市场
RISC-V架构 :第五代,精简指令集的架构, RISC-v架构开源,
PowerPC架构 :Powerpc芯片凭借其出色的性能和高度整合和技术先进特性在网络通信应用,工业控制应用,家用数字化,网络存储领域,军工领域,电力系统控制等都具有非常广泛的应用。
MIPS架构 : MIPS处理器在数字电视、网络应用、机顶盒、ADAS、物联网等领域有广泛应用。
RISC : 精简指令集特点:
精简指令集使用了一些比较常用,并且相对简单的指令
作为精简指令集,
精简指令集的指令的宽度和指令的周期固定。
指令的宽度:将指令编译生成机器码之后,指令机器码占用内存空间的大小。
ARM指令指令的宽度是32bits(4Byte).
指令的周期:执行一条指令所需要的时间,ARM指令大多数都是单周期的指令。
周期跟处理器的主频有关,T(周期) = 1s / F(主频)
linux@ubuntu:~/ARM$ arm-linux-gnueabihf-gcc -marm hello.c -o hello
// arm-linux-gnueabihf-gcc : arm的交叉编译器,可以将程序编译生成ARM可执行程序
// -marm : 编译生成arm的汇编指令
linux@ubuntu:~/ARM$ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=43f6cb611fae0c48a9d0f69afa162ca9b4d01628, with debug_info, not stripped
linux@ubuntu:~/ARM$ arm-linux-gnueabihf-objdump -D hello > hello.dis
// arm-linux-gnueabihf-objdump交叉编译器中的反汇编的命令:
// 将可执行程序反汇编生成反汇编文件,反汇编文件的后缀为.dis
000103d0 <main>:
内存地址 汇编指令机器码 反汇编指令
103d0: e92d4800 push {fp, lr}
103d4: e28db004 add fp, sp, #4
103d8: e24dd008 sub sp, sp, #8
103dc: e50b0008 str r0, [fp, #-8]
103e0: e50b100c str r1, [fp, #-12]
103e4: e300044c movw r0, #1100 ; 0x44c
103e8: e3400001 movt r0, #1
103ec: ebffffbb bl 102e0 <puts@plt>
103f0: e3a03000 mov r3, #0
103f4: e1a00003 mov r0, r3
103f8: e24bd004 sub sp, fp, #4
103fc: e8bd8800 pop {fp, pc}
1.2 CISC : 复杂指令集
使用复杂指令集的架构:X86和X64架构,电脑的CPU一般使用的都是复杂指令集。
复杂指令集更加注重指令的功能性,指令的周期和指令的宽度不固定。
linux@ubuntu:~/ARM$ gcc hello.c -o hello
linux@ubuntu:~/ARM$ objdump -D hello > hello.dis
// objdump反汇编的命令:将可执行程序反汇编生成反汇编文件,反汇编文件的后缀为.dis
0000000000001149 <main>:
内存地址 汇编指令机器码 反汇编指令
1149: f3 0f 1e fa endbr64
114d: 55 push %rbp
114e: 48 89 e5 mov %rsp,%rbp
1151: 48 83 ec 10 sub $0x10,%rsp
1155: 89 7d fc mov %edi,-0x4(%rbp)
1158: 48 89 75 f0 mov %rsi,-0x10(%rbp)
115c: 48 8d 3d a1 0e 00 00 lea 0xea1(%rip),%rdi # 2004 <_IO_stdin_used+0x4>
1163: e8 e8 fe ff ff callq 1050 <puts@plt>
1168: b8 00 00 00 00 mov $0x0,%eax
116d: c9 leaveq
116e: c3 retq
116f: 90 nop
2、ARM数据类型的约定
2.1 ARM-v7架构的数据类型的约定
字节 Byte 8bits(1字节)
半字 Half word 16bits(2字节)
字 Word 32bits(4字节)
双字 Double word 64bits(8字节)
2.2 ARM-v8架构的数据类型的约定
字节 Byte 8bits(1字节)
半字 Half word 16bits(2字节)
字 Word 32bits(4字节)
双字 Double word 64bits(8字节)
四字 Quad word 128bits(16字节)
3、ARM处理器的工作模式
3.1 Cortex-A7核的工作模式
Cortex-A核有9中工作模式,当ARM核处于不同的工作模式下执行的是不同的代码,
执行代码之后可以完成特定的功能。
安全监控模式:monitor mode ----> 运行安全相关的代码
HYP mode : 对虚拟化技术的支持
3.1.1 异常源
异常模式 异常源 备注 FIQ异常模式 FIQ类型的异常源 当发生FIQ类型的异常源,会导出处理器进入到FIQ异常模式下。FIQ类型的异常源指很多异常事件。 IRQ异常模式 IRQ类型的异常源 当发生IRQ类型的异常源,会导出处理器进入到IRQ异常模式下。IRQ类型的异常源指很多异常事件。比如按键中断,定时器中断… SVC模式 复位信号 看门狗复位,上电复位,复位按键复位 软中断指令(SWI) 执行软中断指令时也会让处理器进入到SVC模式下 Undef未定义异常模式 Undef未定义异常源 译码器翻译指令时失败,或者译码器不认识的指令 Abort异常模式 data Abort 取数据发生异常 Prefetch Abort 取指令发生异常
导致处理器进入到对应的异常模式下的事件统称为异常源。
5种异常模式对应着7种异常源,异常源具有优先级,复位的优先级最高,FIQ的优先级高于IRQ。
3.2 Cortex-M4核的工作模式
Cortex-M4核有两种工作模式:
线程模式:主要执行的是用户的代码及主函数内的代码
异常模式:主要执行的异常代码,比如中断处理的代码,复位异常,硬件异常,按键中断......