补坑计划——ARM(一)
来源:互联网 发布:儒尼尼奥任意球数据 编辑:程序博客网 时间:2024/04/25 14:54
开始进入移动安全这个坑的时候,并没有好好看ARM汇编。依靠x86的基础和ARM手册,各种博客上零星的知识点外加搜索引擎也就这么过来了。最近想稍微抽空重新过一遍ARM汇编,查漏补缺,或者应该算女娲补天。。。
处理器工作模式
用户模式(usr):正常的程序执行状态
快速中断模式(fiq):用于高速数据传输或者通道处理
外部中断模式(irq):用于通用的中断处理
管理模式(svc):保护模式
中断模式(abt):当指令或者数据预取终止时进入,用于虚拟存储及存储保护
未定义指令模式(und):当未定义的指令执行时进入该模式,用于支持硬件协处理器的软件仿真(后半段看不懂)
系统模式(sys):具有特权的操作系统任务
处理器工作状态
ARM状态:执行32位的ARM指令集
Thumb状态:执行16位Thumb指令集
ARM寄存器
31个通用寄存器,6个状态寄存器
最多可有18个活动寄存器(16个数据寄存器和2个处理器状态寄存器)
通用寄存器
R0~R15
1、未分组寄存器:
R0~R7,在所有工作模式下,都指向同一个物理寄存器
2、分组寄存器:
R8~R14,每一次所访问的物理寄存器与处理器的工作模式有关
R8~R12对应两个不同的物理寄存器,fiq状态下使用Rx_fiq,其他状态下Rx_usr
R13和R14各对应6中不同的物理寄存器,用户模式和系统模式共用,其他状态下各一个。
R13常用做堆栈指针,用户也可以使用其他寄存器作为堆栈指针,在Thumb指令集中,某些指令强制使用R13做堆栈指针。
由于每种状态各有一个R13,在应用程序初始化部分,一般初始化每种模式的R13,相当于分配了不同模式的栈空间,便于保存程序运行状态。
R14作子程序连接寄存器,或连接寄存器LR。当执行BL子程序调用时,得到PC寄存器的备份。当发送中断或异常时,对应的分组寄存器保存R15的返回值。
3、程序寄存器
R15
状态寄存器
ARM体系有一个当前程序状态寄存器CPSR(R16)和5个备份的程序状态寄存器(SPSRs)。
Thumb寄存器
Thumb状态下寄存器是ARM状态下子集,可直接访问R0~R7、PC(R15)、SP(R13)、LR(R14)和CPSR
指令格式
<opcode> {<cond>} {S} <Rd> , <Rn> {, <OP2>}
<>必不可少,{}可选
<opcode>指令符
{<cond>}执行条件
{S}是否影响状态寄存器
<Rd>目的寄存器
<Rn>第一个操作数,为寄存器
<OP2>第二个操作数,可以是立即数、寄存器和寄存器移位操作符
指令可选后缀
S后缀,条件标志位将会刷新,如是否溢出,是否进位
SUB R1,R0,R3R0减R3,结果保存到R1
SUBS R1, R0,R3R0减R3,结果保存到R1,影响标志位
! 后缀,基址寄存器中的地址值发生变化
LDR R3,[R0,#4]R0加4做地址指针,将数据保存到R3
LDR R3,[R0,#4] !R0加4做地址指针,将数据保存到R3,R0的值变为原值加4
- 补坑计划——ARM(一)
- 补坑计划——ARM(二)
- ARM体系结构(一)——ARM体系结构的特点
- 嵌入式Linux ARM汇编(一)——ARM体系结构
- 嵌入式Linux ARM汇编(一)——ARM体系结构
- 每日一Vim(7)—— 自动补全
- Silverlight——施工计划日报表(一)
- 豆瓣FM-Hacker——豆瓣FM播放列表补全计划
- 豆瓣FM-Hacker——豆瓣FM播放列表补全计划
- 【补题计划】913模拟赛第一题——maze2
- YUpload补完计划
- 补题计划
- BestCoder补完计划
- CodeChef补题计划
- 补档计划
- 补档计划
- 嵌入式Linux ARM汇编(三)——ARM汇编指令(一)
- ARM微处理器的指令集概述(一)——ARM应用系统开发详解笔记
- Debian桌面编译安装Tenda U1 USB无线网卡驱动
- javascript事件
- Android sdcard 杂项记录
- Debian 8桌面安装Nvidia GTX960显卡驱动
- mina框架详解
- 补坑计划——ARM(一)
- python字符串查找和引索
- poj 3345 Bribing FIPA
- 用flask开发个人博客(13)—— 链接静态资源
- Mac下设置vim语法高亮
- CH372
- 分享一些自己的学习历程和学习方法
- 翻译 《Little Book of Semaphores》
- 【例题&结论】【单调队列(滑动窗口)】NKOJ2152 滑动窗口