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相关推荐

  1. Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解

    一.ToggleButton(开关按钮) 1.1.简介 ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本.         public class ToggleBut ...

  2. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

    Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canva ...

  3. Android基础入门教程——2.5.3 AlertDialog(对话框)详解

    Android基础入门教程--2.5.3 AlertDialog(对话框)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节继续给大家带来是显示提示信息的第三个控件AlertDia ...

  4. FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输

    博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...

  5. FPGA基础知识极简教程(8)详解三态缓冲器

    博文目录 写在前面 正文 全双工与半双工 FPGA和ASIC中的三态缓冲器 如何在VHDL和Verilog中推断出三态缓冲区 参考资料 交个朋友 写在前面 下面用举例子的方式引出三态门,内容过长,大家 ...

  6. bootice 此功能仅在uefi环境下可用_电脑新手必掌握基础知识:BIOS、EFI与UEFI详解!...

    本文估计很多小白看不懂,但是还是建议你硬着头皮看完,这篇文章主要讲解了这几种"BIOS"的启动方式,对电脑启动问题判断的理解会有益处. BIOS是个程序,存储在BIOS芯片中,而现 ...

  7. 五、操作系统——内存相关基础知识 和 进程运行的基本原理(详解)

    一.概述 二.什么是内存?有何作用? 内存是用于存放数据的硬件.程序在执行之前,需要先放到内存中才能被CPU处理. 平时,我们各种各样的软件都是存储在外存(辅存)里.电脑的话,一般是存储在硬盘里,但是 ...

  8. iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解

    IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...

  9. 安全基础知识 最强0到33600端口详解(5)

    导读: 端口:1024 服务:Reserved 说明:它是动态端口的开始,许多程序并不在乎用哪个端口连接网络,它们请求系统为它们分配下一个闲置端口.基于这一点分配从端口1024开始.这就是说 第一个向 ...

最新文章

  1. 如何优雅地在公众号输入数学公式?推荐几款神器
  2. 打印出系统所有即未被assign到business transaction和IBASE component的product ID列表
  3. c语言编码风格,讲嵌入式C语言编码风格.ppt
  4. 天线发射功率计算公式_增加发射功率,提高接收灵敏度就能提高通信距离吗?...
  5. linux下启动tomcat,Cannot find setclasspath.sh
  6. iphone开发常用代码
  7. STL模型文件修改软件magics 21.0的安装及使用
  8. haneWIN NFS Server|haneWIN NFS Server(优秀NFS服务器)V1.2.16官方版-绿色下载吧
  9. 找到自己的优势,才能干活不累,事半功倍!
  10. boost电路输出电流公式_Boost电路的参数计算及仿真
  11. php中的列表属性,php类中的长属性列表 – 我可以缩短它吗?
  12. 视频库:人工智能开发_人工智能工程师_AI人工智能
  13. SAP中通过格式调整解决导出EXCEL表字段显示不全问题
  14. python 爬取豆瓣的美剧
  15. secureCRT串口传送文件
  16. GPS授时服务器在电厂视频监控系统中的应用
  17. 程序员必备git客户端PortableGit-2.34.0-64-bit.7z.exe
  18. Navicat导出ncx解析数据库密码
  19. 细读 Thinking in Java (一)一切都是对象
  20. web基础(一)--------标签

热门文章

  1. constraint PK_LDBACKUPTEXTINFO primary key (xx) using index tablespace lisi
  2. 【人工智能项目】- 深度学习实现猫狗大战
  3. 例3.2 计算存款利息。有1000元,存一年。(1)活期,年利率为r1,(2)一年期定期,年利率为r2,(3)存两年半年定期,年利率为r3。
  4. 爱情应该给人一种自由感,而不是囚禁感
  5. 搭建一个点歌QQ机器人,另外还能看美女
  6. CUDA out of memory解决办法
  7. 探索性分析——某医院18年销售数据分析
  8. 微信小程序 涉及播放视频解决办法(证书or腾讯视频插件)
  9. 软件工程到底是学啥的?就业前景咋样?
  10. 空气流量传感器原理解析