ARM-常见考题和知识点
1. ARMv7 7中状态,ARMv8对应的状态
2. TEE知识
3. ARM寄存器及作用
4. ARM内部总线AHB APB
5.
1. Thumb | Arm指令区别
编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。
ARM指令是32位的,而Thumb指令时16位的,如果在1K的存储空间中,可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb指令时,代码密度高。
Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其他指令均为无条件执行;
大多数Thumb数据处理指令采用2地址格式。Thumb指令集与ARM指令集的区别一般有如下几点: Ø 跳转指令 程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。 Ø 数据处理指令 数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第三个寄存器中。 数据处理操作比ARM状态的更少,访问寄存器R8—R15受到一定限制。 (除MOV和ADD指令访问寄存器R8—R15外,其他数据处理指令总是更新CPSR中ALU状态标志) 访问寄存器R8—R15的Thumb数据处理指令不能更新CPSR中的ALU状态标志 Ø 单寄存器加载和存储指令 在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0—R7 Ø 批量寄存器加载和存储指令 LDM和STM指令可以将任何范围为R0——R7的寄存器子集加载或存储
https://blog.csdn.net/ly930156123/article/details/79219303
两种状态:arm/thumb , bx跳转, CODE16/CODE32代码区分,Rn的bit0=1 thumb指令,bit0=0 arm指令
2. ARM寄存器和功能介绍 https://blog.csdn.net/lb920519/article/details/80065102
3. SIMD(Single Instruction Multiple Data 单指令多重数据)指令集,进阶SIMD叫NEON指令集(语音和视频指令)
4. ARMv8: https://blog.csdn.net/forever_2015/article/details/50285865
http://www.wowotech.net/armv8a_arch/armv8-a_overview.html
https://blog.csdn.net/zsc09_leaf/article/details/45825015
5. MMU TTB TLB:https://blog.csdn.net/chenchengwudi/article/details/80874240
6. WFI(wait for interrupt) WFE(wait for event先看看有没有event 有则返回,没有则wfi), 一般用wfi
7. http://www.sohu.com/a/118492476_464086 ***
https://blog.csdn.net/edwardlulinux/article/details/9261393
https://blog.csdn.net/mr_raptor/article/details/6556172
https://www.cnblogs.com/douzi2/p/5112743.html
8. wakelock: https://www.jianshu.com/p/67ccdac38271*** https://www.cnblogs.com/rzq232/p/3835892.html
9. 基本知识
ARM 7种状态 sys svc user FIQ IRQ Abort undefine ARMv8 ARM64 Exception Levels(EL0(APP)~EL3(TrustZone)) SIMD(Single Instruction Multiple Data 单指令多重数据)指令集,进阶SIMD叫NEON指令集(VADD v开头,语音和视频指令) EL0(app) | Secure firmwire 普通用户应用程序。 EL0对应于最低特权级别,通常被描述为非特权级别,而在EL0之上的任何异常级别执行的通常被称为特权执行。 EL1(Guest OS) | (Trusted OS) 操作系统内核。通常被描述为特权。 EL2 | -- 虚拟机管理程序(Hypervisor)。 EL3 (Secure monitor) 低级固件,包括安全监视器等。 tee(secure world | Normal world) AArch64模式下CPU的通用寄存器是64bit,但A64指令同时支持对64bit, 32bit, 16bit, 8bit数据类型的读写操作。linux下一般用LP64。 TYPE LP32 ILP32 LP64 ILP64 LLP64 CHAR 8 8 8 8 8 SHORT 16 16 16 16 16 INT 16 32 32 64 32 LONG 32 32 64 64 32 LONG LONG 64 64 64 64 64 POINTER 32 32 64 64 64 汇编指令B,BL,BX,BLX 和 BXJ的区别: 1、B------跳转指令 跳转指令B使程序跳转到指定的地址执行程序。 例:B 0x1234 ;跳转到绝对地址0x1234处。 2、BL-----带返回的连接跳转 BL指令用于实现子程序调用。子程序的返回可通过将LR寄存器的值复制到PC寄存器来实现。下面的指令可实现子程序返回:(1)、BX R14 (2)、MOV PC,R14 例:BL func ;跳转到子程序func处执行,同时将当前pc值保存到LR中。 3、BX------跳转并切换状态 带状态切换的跳转指令BX使程序跳转到指令中指定的参数Rm指定的地址执行程序。若 Rm 的 bit[0] 为1,切换到 Thumb 指令执行;若 Rm 的 bit[0] 为0,切换到 ARM 指令执行。 指令的语法格式:BX{<cond>} <Rm> 例:BX R0 ;跳转到R0中的地址,如果R0[0]=1,则进入Thumb状态。 4、BLX------带返回的跳转并切换状态 该指令为无条件执行指令。 跳转、带链接跳转、跳转并切换指令集(thumb arm)、带链接跳转并切换指令集、跳转并转换到 Jazelle 状态 BL: 指令存储返回地址到LR, 我理解是子函数调用需要用这个,B跳过去之后就去那边执行了不在回到现在这个地方
浙公网安备 33010602011771号