Android基础知识 — 1.3-ARM和Thumb指令详解1
Thume指令可以理解为ARM指令集的一个子集
1. 指令格式
ARM指令的基本格式:
<opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn>{,<operand2>}
opcode:为指令助记符,如MOV,ADD等.
cond:为执行条件
条件码助记符 标志
EQ Z=1 @相等
NE Z=0 @不相等
CH/HS C=1 @无符号数大于或等于
CC/LO C=0 @无符号数小于
MI N=1 @负数
PL N=0 @正数或零
VS V=1 @溢出
VC V=0 @没有溢出
HI C=1,Z=0 @无符号大于
LS C=0,Z=1 @无符号小于或等于
GE N=V @有符号数大于或等于
LT N!=V @有符号数小于
GT Z=0,N=V @有符号数大于
LE Z=1,N!=V @有符号数大于或等于
AL 任何 @无条件执行(默认)
S:指令是否影响CPSR寄存器的值,如ADDS,SUBS等
.W与.N为指令宽度说明符,编码默认是16位,也可以是32位则需要为指令加上.W宽度说明
Rd:为目的寄存器、
Rn:为第一个操作数寄存器
operand2:为第二个操作数,可以是立即数、寄存器、寄存器移位操作。如 MOV R0, #2
2. 跳转指令
(1)B跳转指令 : B {cond} label
(2) BL带链接的跳转指令: BL {cond} label
(3) BX带状态切换跳转指令: BX {cond} Rm, 如果cond条件满足,则处理器会判断Rm的位[0]是否为1,则跳转时自动将CPSR寄存器的标志T置位,反之,标志T复位
(4)BLX带链接和状态切换的跳转指令: BLX {cond} Rm
3. 存储器访问指令
存储器访问操作包括从存储器中加载数据、存储数据到存储器、寄存器与存储器之间数据交换
LDR: 用于从存储器中加载数据到寄存器中,格式如下:
LDR{type}{cond} Rd, label
LDRD{cond} Rd, Rd2, label
LDRD R0, R1, label2 @从label2指向的内存加载2个字的数据到R0和R1寄存器中
STR: 用于存储数据到指定地址的存储单元中,格式如下:
STR{type}{cond} Rd, label
STRD{cond} Rd, Rd2, label
STR R0, [R2, #04] @将R0寄存器的数据存储到R2+4所指向的存储单元
LDM:用于从指定的存储单元加载多个数据到一个寄存器列表,格式如下:
LDM{addr_mode}{cond} Rn{!} reglist
LDMIA R0!, {R1-R3} @依次加载R0指向的存储单元的数据到R1、R2、R3寄存器。 @R0为基寄存器,用于存储初始地址, !为可选,有!则最终地址将写回R0寄存器中
STM:将一个寄存器列表的数据存储到指定的存储单元,格式如下:
STM{addr_mode}{cond} Rn{!} reglist
STMDB R1!, {R3-R6, R11} @将R3-R6,R11寄存器的内容存储到R1指向的存储单元
STMFD SP!, {R3-R7} @将R3-R7寄存器压入堆栈
PUSH:将寄存器推入满递减堆栈,格式如下:
PUSH{cond} reglist
PUSH {r0, r4-r7} @将R0/R4-R7寄存器内容压入堆栈
POP:从满递减堆栈中弹出数据到寄存器,格式如下:
POP{cond} reglist
POP {r0, r4-r7} @R0,R4-R7寄存器内容压入堆栈
SWP:用于寄存器与存储器之间的数据交换,格式如下:
SWP{B}{cond} Rd, Rm, [Rn]
SWP R1, R1, [R0] @将R1寄存器与R0指向的存储单元的内容进行交换
Android基础知识 — 1.3-ARM和Thumb指令详解1相关推荐
- Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解
一.ToggleButton(开关按钮) 1.1.简介 ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本. public class ToggleBut ...
- Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash
Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canva ...
- Android基础入门教程——2.5.3 AlertDialog(对话框)详解
Android基础入门教程--2.5.3 AlertDialog(对话框)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节继续给大家带来是显示提示信息的第三个控件AlertDia ...
- FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...
- FPGA基础知识极简教程(8)详解三态缓冲器
博文目录 写在前面 正文 全双工与半双工 FPGA和ASIC中的三态缓冲器 如何在VHDL和Verilog中推断出三态缓冲区 参考资料 交个朋友 写在前面 下面用举例子的方式引出三态门,内容过长,大家 ...
- bootice 此功能仅在uefi环境下可用_电脑新手必掌握基础知识:BIOS、EFI与UEFI详解!...
本文估计很多小白看不懂,但是还是建议你硬着头皮看完,这篇文章主要讲解了这几种"BIOS"的启动方式,对电脑启动问题判断的理解会有益处. BIOS是个程序,存储在BIOS芯片中,而现 ...
- 五、操作系统——内存相关基础知识 和 进程运行的基本原理(详解)
一.概述 二.什么是内存?有何作用? 内存是用于存放数据的硬件.程序在执行之前,需要先放到内存中才能被CPU处理. 平时,我们各种各样的软件都是存储在外存(辅存)里.电脑的话,一般是存储在硬盘里,但是 ...
- iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解
IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...
- 安全基础知识 最强0到33600端口详解(5)
导读: 端口:1024 服务:Reserved 说明:它是动态端口的开始,许多程序并不在乎用哪个端口连接网络,它们请求系统为它们分配下一个闲置端口.基于这一点分配从端口1024开始.这就是说 第一个向 ...
最新文章
- 如何优雅地在公众号输入数学公式?推荐几款神器
- 打印出系统所有即未被assign到business transaction和IBASE component的product ID列表
- c语言编码风格,讲嵌入式C语言编码风格.ppt
- 天线发射功率计算公式_增加发射功率,提高接收灵敏度就能提高通信距离吗?...
- linux下启动tomcat,Cannot find setclasspath.sh
- iphone开发常用代码
- STL模型文件修改软件magics 21.0的安装及使用
- haneWIN NFS Server|haneWIN NFS Server(优秀NFS服务器)V1.2.16官方版-绿色下载吧
- 找到自己的优势,才能干活不累,事半功倍!
- boost电路输出电流公式_Boost电路的参数计算及仿真
- php中的列表属性,php类中的长属性列表 – 我可以缩短它吗?
- 视频库:人工智能开发_人工智能工程师_AI人工智能
- SAP中通过格式调整解决导出EXCEL表字段显示不全问题
- python 爬取豆瓣的美剧
- secureCRT串口传送文件
- GPS授时服务器在电厂视频监控系统中的应用
- 程序员必备git客户端PortableGit-2.34.0-64-bit.7z.exe
- Navicat导出ncx解析数据库密码
- 细读 Thinking in Java (一)一切都是对象
- web基础(一)--------标签
热门文章
- constraint PK_LDBACKUPTEXTINFO primary key (xx) using index tablespace lisi
- 【人工智能项目】- 深度学习实现猫狗大战
- 例3.2 计算存款利息。有1000元,存一年。(1)活期,年利率为r1,(2)一年期定期,年利率为r2,(3)存两年半年定期,年利率为r3。
- 爱情应该给人一种自由感,而不是囚禁感
- 搭建一个点歌QQ机器人,另外还能看美女
- CUDA out of memory解决办法
- 探索性分析——某医院18年销售数据分析
- 微信小程序 涉及播放视频解决办法(证书or腾讯视频插件)
- 软件工程到底是学啥的?就业前景咋样?
- 空气流量传感器原理解析