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
SHORT
INT
LONG
LONG LONG
POINTER 汇编指令B,BL,BX,BLX 和 BXJ的区别:
、B------跳转指令
跳转指令B使程序跳转到指定的地址执行程序。
例:B 0x1234 ;跳转到绝对地址0x1234处。
、BL-----带返回的连接跳转
BL指令用于实现子程序调用。子程序的返回可通过将LR寄存器的值复制到PC寄存器来实现。下面的指令可实现子程序返回:()、BX R14 ()、MOV PC,R14
例:BL func ;跳转到子程序func处执行,同时将当前pc值保存到LR中。
、BX------跳转并切换状态
带状态切换的跳转指令BX使程序跳转到指令中指定的参数Rm指定的地址执行程序。若 Rm 的 bit[] 为1,切换到 Thumb 指令执行;若 Rm 的 bit[] 为0,切换到 ARM 指令执行。
指令的语法格式:BX{<cond>} <Rm>
例:BX R0 ;跳转到R0中的地址,如果R0[]=,则进入Thumb状态。
、BLX------带返回的跳转并切换状态
该指令为无条件执行指令。
跳转、带链接跳转、跳转并切换指令集(thumb arm)、带链接跳转并切换指令集、跳转并转换到 Jazelle 状态
BL: 指令存储返回地址到LR, 我理解是子函数调用需要用这个,B跳过去之后就去那边执行了不在回到现在这个地方
ARM-常见考题和知识点的更多相关文章
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- [原创]Java常见笔试题知识点汇总
前天数梦工厂来学校招聘,笔试题比较有特点,全是Java题,基本就是Java的一些特点.凭记忆按照题目找到一些必备知识点 (1). try {}里有一个return语句,那么紧跟在这个try后的fina ...
- Salesforce Admin考题解析 | 流程自动化考题与知识点拓展
[题目1] A record is modified on 1/1/2008. It meets criteria for a time-based workflow rule; this rule ...
- Java 链表常见考题总结
首先定义自定义结点类,存储节点信息: public class Node { Node next=null; int data; public Node(int data){ this.data=da ...
- 常见的javascript知识点
1.js获取标签.class.id 获取id: document.getElementById("name") 获取标签:document.getElementsByTagName ...
- Python语言基础考察点:python语言基础常见考题(一)
一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...
- 【安卓逆向】ARM常见汇编指令总结
跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态的无条件跳转 存储器与寄存器交互数据指令(核心) 存储器:主存和内存 寄存器中放的数据:可以是字符 ...
- 数据库常见考题查询SQL
1.列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 执行查询: select count(*), a.deptid from employee a groub by depti ...
- 常见数据结构之JavaScript实现
常见数据结构之JavaScript实现 随着前端技术的不断发展,投入到前端开发的人数也越来越多,招聘的前端职位也越来越火,大有前几年iOS开发那阵热潮.早两年,前端找工作很少问到关于数据结构和算法的, ...
随机推荐
- Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config
目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...
- JavaWeb_(Mybatis框架)主配置文件介绍_四
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- linux java -jar
常见命令1 nohup java -jar /xxx/xxx/xxx.jar >/dev/>& & 分析各个指令代表什么意思: >,重写文件,如果文件里面有内容会覆盖 ...
- CentOS6.8安装Docker
在CentOS6.8上安装Docker 1.Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EOEL包:如下命令: yum insta ...
- mysql 常见面试题
附录: https://mp.weixin.qq.com/s/pC0_Y7M7BkoUmlRwneZZdA 一.为什么用自增列作为主键 1.如果我们定义了主键(PRIMARY KEY),那么InnoD ...
- pwn学习日记Day9 基础知识积累
知识杂项 libc是Linux下的ANSI C的函数库. LOOKUP函数 数组形式:公式为= LOOKUP(lookup_value,array) 式中 array-包含文本.数字或逻辑值的单元格区 ...
- Promise初尝试
promise.ts export function showAlert() { console.log("开始调用showAlert"); return new Promise( ...
- 静态库和动态库的区别和win平台和linux平台代码实现
静态库和动态库的区别 什么是库 库是写好的,现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说,库是一种可 ...
- ubuntu下如何安装hg(mercurial)?
答: sudo apt-get install mercurial
- (翻译) Poor misunderstood 'var'
It seems most programmers coming to JavaScript from C, C++, Java, and the like equate the var statem ...