【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集

原创 2015年07月06日 16:56:37

作者:郭嘉
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell

【基于Android的ARM汇编语言系列】章节列表

【基于Android的ARM汇编语言系列】之一:ARM汇编语言开篇
【基于Android的ARM汇编语言系列】之二:C/C++程序生成ARM汇编程序的过程分析
【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
【基于Android的ARM汇编语言系列】之四:ARM处理器的寻址方式
【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
【基于Android的ARM汇编语言系列】之六:NEON指令集与VFP指令集

写在前面:本篇文章旨在大致介绍下ARM指令集的相关内容,这里也同时提供一个有详细解释和用例的待书签的PDF版本,方便大家查阅。

ARM指令集详解

指令集是处理器的核心,ARM指令的基本格式如下所示:

opcode {cond}{S}{.W\.N}Rd, Rn{.operand2}
  • S:指定是否影响CPSR寄存器的值,如ADDS,SUBS等。
  • .W.N:指令宽度说明符。
  • Rd:目的寄存器。
  • Rn:第一个操作数寄存器。
  • operand2:第二个操作数,第二个操作数可以是立即数、寄存器或寄存器位操作,
  • cond:执行条件,它的取值如下图所示:

这里写图片描述

一 跳转指令

1.1 B

跳转指令。

1.2 BL

带链接的跳转指令。

1.3 BX

带状态切换的跳转指令。

二 存储器访问指令

2.1 LDR

从存储器中加载数据到寄存器。

2.2 STR

存储数据到指定的存储单元。

2.3 LDM

从指定的存储单元加载多个数据到一个寄存器列表。

2.4 STM

将一个寄存器列表的数据的数据存储到指定的存储单元。

2.5 PUSH

将寄存器推入满递减堆栈。

2.6 POP

从递减堆栈中弹出数据到寄存器。

2.7 SWP

用于寄存器和存储器之间的数据交换。

三 数据处理指令

3.1 MOV

将8位立即数或寄存器里的内容送到目标寄存器中。

3.2 MVN

将8位立即数或寄存器里的内容按位取反后送到目标寄存器中。

3.3 ADD

加法指令。

3.4 ADC

带进位的加法指令。

3.5 SUB

减法指令。

3.6 RSB

逆向减法指令。

3.7 SBC

带进位的减法指令。

3.8 RSC

带进位的逆向减法指令。

3.9 MUL

乘法指令。

3.10 MLS

3.11 MLA

3.12 UMULL

3.13 UMLAL

3.14 SMULL

3.15 SMLAL

3.16 SMLAD

3.17 SMLSD

3.18 SDIV

有符号数除法指令。

3.19 UDIV

无符号数除法指令。

3.20 ASR

算术右移指令。

3.21 AND

逻辑与指令。

3.22 ORR

逻辑或指令。

3.23 EOR

异或指令。

3.24 BIC

位清除指令。

3.25 LSL

逻辑左移指令。

3.26 LSR

逻辑右移指令。

3.27 ROR

循环右移指令。

3.28 RRX

带扩展的循环右移指令。

3.29 CMP

3.30 CMN

3.31 TST

位测试指令。

3.32 TEQ

四 其他指令

4.1 SWI

软中断指令。

4.2 NOP

空操作指令。

4.3 MRS

读状态寄存器指令。

4.4 MSR

写状态寄存器指令。

ARM指令如何在thumb和arm模式切换

根据arm spec, 跳转地址最低位( lsb ) 为0表示 arm 指令;最低位为1表示thumb指令。 一、绝对地址跳转进入 thumb模式 如下指令可以切换到thumb模式。 LD...

ARM / Thumb 指令混合编程之代码交织 ( interworking )

本文翻译整理自 http://stuff.mit.edu/afs/sipb/project/egcs/src/egcs/gcc/config/arm/README-interworking 针对AR...

常用的arm汇编指令(2)

1.对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时...

基于ARM的除法运算方法集锦

ARM每有除法指令,若程序中涉及到了“/”或“%”运算时,编译器将自动的调用库函数“__rt_udiv”和“__rt_sdiv”来实现该运算。但直接利用C库函数中的标准整数除法程序,根据执行情况和输入...
  • bird67
  • bird67
  • 2008年02月19日 11:55
  • 6281

【基于Android的ARM汇编语言系列】之六:NEON指令集与VFP指令集

作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWel...

【基于Android的ARM汇编语言系列】之一:ARM汇编语言开篇

作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWel...

ARM、THUMB指令集

转自:http://blog.csdn.net/huangwei101/article/details/4036102   ARM、THUMB指令集 分类: ARM 体系构架20...

嵌入式开发之 ARM和THUMB指令集

嵌入式开发之 ARM和THUMB指令集一 、 环境 上位机 32位 Ubuntu14.04 下位机 Acadia 二、 生成ARM和THUMB指令 测试代码 编译参数 通过 -mthumb -S ...

ARM及Thumb指令集练习

  • 2012年03月15日 13:27
  • 146KB
  • 下载

ARM及Thumb指令集练习

  • 2014年07月05日 01:08
  • 146KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
举报原因:
原因补充:

(最多只允许输入30个字)