ARM汇编语言基础
ARM 与 Thumb 寄存器对应关系
- PC寄存器: ARM状态为R15,Thumb状态为PC
- LR寄存器: ARM状态为R14,Thumb状态为LR
- SP寄存器: ARM状态为R13,Thumb状态为SP
- IP寄存器: ARM状态为R12,Thumb状态为IP
- FP寄存器: ARM状态为R11,Thumb状态为FP
其他对应关系一一相同
ARM 与 Thumb 指令集
指令格式:
{}{S}{.W|.N} ,{,}
其中
- opcode为助记符
- cond为条件
- S指定其是否影响CPSR寄存器的值(也就是程序状态字)
- .W与.N指定指令宽带。(一个指定32,一个指定16)
- Rd 目的寄存器
- Rn 第一个操作数寄存器
- operand2为第二个操作数
跳转指令
B 跳转指令
格式:B{cond} label
BL带链接的跳转指令
格式:BL{cond} label
当条件满足时,会将当前指令的下一条指令保存到R14(LR)寄存器中,然后跳转到label中。这通常用于调用子程序,在子程序的尾部,通过 MOV PC,LR 返回
BX 带状态切换的跳转指令
格式:BX{cond} Rm
当执行BX指令时,如果条件cond满足,则处理器会检查Rm的为[0]是否为1,如果为1,这将CSPR寄存器的T置1,并将目标代码解释为Thumb代码来执行。为0的话,复位 CSPR寄存器的T。并将目标代码解释为ARM代码来执行。
eg:
.code 32
ADR R0,thumbcode+1
BX R0 @跳转到thmbcode,并将处理器切换为thumb模式
thumbcode:
.code 16
...
BLX带链接与状态切换的跳转指令
格式:BLX{cond} Rm
存储器访问指令
LDR
格式:
LDR{type}{cond} Rd,label
LDRD{cond} Rd,Rd2,label
type指定了操作的数据大小
用于从存储器中加载数据到寄存器。
LDRD 一次加载双字的数据,将数据加载到Rd,Rd2中
STR
格式:
STR{type}{cond} Rd,label
STRD{cond} Rd,Rd2,label
用于储存数据到指定的存储单元
LDM
格式:
LDM{addr_mode}{cond} Rn{!},reglist
其中 ! 为可选,如果有,则将最终地址回写到Rn中
该指令从指定的存储单元,加载数据到寄存器列表中
eg:
LDMIA R0!,{R1-R3} @依次加载R0地址处的数据到R1,R2,R3寄存器中
STM
格式:
STM{addr_mode}{cond} Rn{!},reglist
其中 ! 为可选,如果有,则将最终地址回写到Rn中
将寄存器列表中的数据存储到指定存储单元
PUSH
POP
SWP
格式:
SWP{B}{cond} Rd,Rm,[Rn]
Rd:为要从存储器加载数据的寄存器
Rm:为写入数据到存储器的寄存器
Rn:为存储器地址
如果 Rd 与 Rm 相同,则可实现寄存器与存储器的交换
数据处理指令
ARM汇编语言基础的更多相关文章
- Android ARM汇编语言
简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集. 原生程序与ARM汇编语 ...
- ARM汇编语言
---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...
- GNU ARM 汇编基础
ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...
- 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- Intel汇编语言程序设计学习-第三章 汇编语言基础-上
汇编语言基础 3.1 汇编语言的基本元素 有人说汇编难,有人说汇编简单,我个人不做评价,下面是一个简单的实例(部分代码): main PROC mov eax,5 ;5送EAX寄存器 add ...
- 1.ARM的基础知识
ARM简述 ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权.ARM技术具有很高的性能和功效,因而容易被厂商接受.同时,合作伙伴的增多,可获得更多的第三方工具.制造和软件支持,这又会使整个系统 ...
- HLA高级汇编语言基础
HLA高级汇编语言环境的搭建与设置 我的操作系统:WINDOWS7 需要下载的东西:MASM32:http://www.masm32.com/masmdl.htm HLA:http://webste ...
- linux arm mmu基础【转】
转自:http://blog.csdn.net/xiaojsj111/article/details/11065717 ARM MMU页表框架 先上一张arm mmu的页表结构的通用框图(以下的论述都 ...
随机推荐
- 设计模式之访问者模式(Visitor )
访问者模式是一种将数据操作和数据结构分离的设计模式,可以说是面向数据密集型的一种设计方式,数据的结构相对稳定,有明显的分层和分类,而对数据对象的相关操作进行分组.分析等二次加工,这些操作都是由访问者来 ...
- Ajax的实现及使用-zepto
正文 之前归纳了ajax技术的基础知识,汗颜的是这两篇本应该在年初补上的,但因为种种原因,并没有补上.不过还好最近有空,所以开始整理之前的日记.共分为两篇:对于zepto ajax代码的实现解析;对于 ...
- Windows 10修复
[以管理员运行如下命令]: 1.sfc /scannow 命令将扫描所有受保护的系统文件,并用位于 %WinDir%\System32\dllcache 的压缩文件夹中的缓存副本替换损坏的文件. 2. ...
- Lightning框架示例 - 动态建立Lightning组件
动态建立Lightning组件 组件化前端开发是Lightning框架的优点之一.在进行Lightning应用开发时,我们可以将组件进行嵌套.引用,从而实现模块的封装和重用,提高开发效率. 组件的嵌套 ...
- JavaScript日期排序
//日期排序 function sortDownDate(a, b) { return Date.parse(a.received) - Date.parse(b.received); } funct ...
- 自定义ScrollView 实现上拉下拉的回弹效果--并且子控件中有Viewpager的情况
onInterceptTouchEvent就是对子控件中Viewpager的处理:左右滑动应该让viewpager消费 public class MyScrollView extends Scroll ...
- 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念
前提必备 不急着进入正题,在前面函数作用域那一章介绍了闭包,全局变量局部变量,这里再看几个简单的闭包案例: 1):不带参数 注意: 1.这里的name属性是每个函数都有的,可以反馈函数名 2.temp ...
- PowerDesin把name复制到Comment,把Comment复制到Name
PowerDesin把name复制到Comment,把Comment复制到Name的方法: PowerDesigner->Tools->Execute Commands->Edit/ ...
- python第四十三天--第三模块考核
面向对象: 概念:类,实例化,对象,实例 属性: 公有属性:在类中定义 成员属性:在方法中定义 私有属性:在方法中使用 __属性 定义 限制外部访问 方法: 普通方法 类方法: @classmeth ...
- python第三十六天-----类中的特殊成员方法
__doc__ 查看尖的描述信息 __module__表示当前操作的对象所在的模块 __class__表示当前操作的对象所属的类 __init__构造方法 通过类创建对象自动执行 __del__析构方 ...