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开发那阵热潮.早两年,前端找工作很少问到关于数据结构和算法的, ...
随机推荐
- 面向对象(OOP)笔记
1.本质:以类的方式组织代码,以对象的方式组织(封装)数据 2.对象:是具体的事物 3.类:是对对象的抽象(抽象 抽出象的部分) 先有具体的对象,然后抽象各个对象之间象的部分,归纳出类 通过类再认识其 ...
- Linux 修改文件夹的用户组权限
将ubsadm文件夹所属用户修改为userschown -R ubsadm:users /home/ubsadm 此命令将用户123的用户组改为rootusermod -g 123 root
- THREE.js(一)
//创建场景 var scene = new THREE.Scene(); //透视摄像机(视野角度,长宽比,远剪切面,进剪切面,) var camera = new THREE.Perspectiv ...
- Redis监控之redis-stat安装与详解
一.安装环境 安装编译环境.ruby运行环境.git代码 yum install gcc-c++ yum -y install ruby-devel yum install ruby yum inst ...
- Linux -bash: redis-cli: command not found(亲测可行)
Linux 安装完redis单独用命令: ? 1 redis-server 报错: ? 1 -bash: redis-server: command not found 说明redis-server不 ...
- 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public: ListNode* mergeTwoLists ...
- kotlin中集合
fun main(arg: Array<String>) { //可读写的集合创建 val mutableListOf1 = mutableListOf<Int>(1, 2, ...
- Linux通过AIO进行异步读文件
下面列出源代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <a ...
- smarty 对数据库的简单操作。
smarty简单配置 -------------------------------------smarty_inc.php-------------------------------------- ...
- C++ STL 排序查找最大的5个
#include <iostream>#include <algorithm>#include <deque>#include <vector>#inc ...