【ARM体系结构】之数据类型约定与工作模式

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核有两种工作模式:
	线程模式:主要执行的是用户的代码及主函数内的代码
	异常模式:主要执行的异常代码,比如中断处理的代码,复位异常,硬件异常,按键中断......
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程远泊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值