【基于Android的ARM汇编语言系列】之四:ARM处理器的寻址方式

原创 2015年07月06日 16:55:38

作者:郭嘉
邮箱: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处理器支持9中寻址方式。

一 立即寻址

立即寻址指令后面的地址码部分为立即数(常量或常数),立即寻址多用于给寄存器赋值。

举例

MOV RO, #1234

指令执行后,R0=1234。

二 寄存器寻址

寄存器寻址中,操作数在寄存器中,指令执行时直接从寄存器中取值进行操作。

举例

MOV R0, R1

指令执行后,R0=R1。

三 寄存器移位寻址

寄存器移位寻址是ARM指令集特有的寻址方式,和寄存器寻址类似,只是操作前需要对寄存器操作数进行移位操作。

  • LSL:逻辑左移,移位后寄存器空出的低位补0。
  • LSR:逻辑右移,移位后寄存器空出的高位补0。
  • ASR:算术右移,移位过程中,符号位保持不变,如果源操作数是正数,则空出的高位补0,否则补1.
  • ROR:循环右移,移位后移除的低位填入空出的高位。
  • RRX:带扩展的循环右移,操作数右移一位,移位空出的高位用C标志的值填充。

举例

MOV R0, R1, LSL #2

R1寄存器左移两位赋值给R0,指令执行后,R0=R1*4。

四 寄存器间接寻址

寄存器间接寻址中地址码给出的寄存器是操作数的地址指针,所需的操作数保存在寄存器指定的存储单元中。

举例

LDR R0, [R1]

将R1寄存器的数值作为地址,取出此地址中的值赋给R0寄存器。

五 基址寻址

基址寻址是将地址码给出的基址寄存器和偏移量相加,形成操作数的有效地址,所需的操作数保存在有效地址所指向的存储单元中。基址寻址多用于查表和数组访问等操作。

举例

LDR R0, [R1, #-4]

将寄存器R1的数组减去4作为地址,取出此地址中的值赋值给R0。

六 多寄存器寻址

多寄存器寻址一条指令最多可以完成16个通用寄存器的传送。

举例

LDMIA R0, {R1, R2, R3, R4}

LDM是数据加载指令,指令的后缀IA表示每次执行完加载操作后R0寄存器的值自增1个字。指令执行后,R1=[R0],R2=[R0+#4],R3=[R0+#8],R4=[R0+#12]。

七 堆栈寻址

堆栈寻址是ARM处理器特有的一种寻址方式,堆栈寻址使用特定的指令来完成。

  • LDMFA/STMFA
  • LDMEA/STMEA
  • LDMFD/STMFD
  • LDMED/STMED

举例

STMFD SP1, {R1-R7, LR}

将R1-R7,LR入栈,多用于保存子程序现场。

LDMFD SP1, {R1-R7, LR}

将数据出栈,放入R0-R7,LR寄存器,多用于恢复程序现场。

八 块拷贝寻址

块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。

  • LDMIA/STMIA
  • LDMDA/STMDA
  • LDMIB/STMIB
  • LDMDB/STMDB

举例

LDMIA R0!, {R1-R3}

从R0寄存器的存储单元中读取3个字到R1-R3寄存器中。

STMIA R0!, {R1-R3}

存储在R1-R3寄存器的内容到R0指向ed存储单元。

九 相对寻址

相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数作为有效地址。

举例

BL NEXT
   ...
NEXT:
   ...

BL NEXT是跳到NEXT标号处执行,这里的BL就是采用相对寻址,标号NEXT是偏移量。

【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构

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

【基于Android的ARM汇编语言系列】之二:C/C++程序生成ARM汇编程序的过程分析

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

ARM处理器 八种寻址方式

ARM处理器的八种寻址方式: 前言:1.什么是寻址?数据都存在存储器中,寻址简单地说就是找到存储数据或指令的地址。存储器有很多存储单元,用于存储数据。或者说,寻址就是读取数据所在储存装置中对应地址编...

ARM处理器体系结构知识—[1]寻址方式

不同平台下的机器指令基本上都是进行数据处理的指令,这些指令大致可分为:读取、写入和运算。从CPU的视角看来重要的不是数据的值是多少,而是我该从哪里获取数据。从处理数据的机器指令把数据的位置分为: 立即...
  • txx_683
  • txx_683
  • 2017年01月16日 17:23
  • 201

ARM汇编语言学习笔记(二)---ARM汇编的寻址方式

ARM处理器的寻址方式 立即寻址 MOV R0,#12345 @R0 = 12345立即数以#开头,十六进制表示为 #0xFF 寄存器寻址 MOV R0,R1 寄存器移位寻址LSL:逻辑左移,移动后...

四 ARM汇编--寻址方式

ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集。  ARM指令集效率高,但是代码密度高  Thumb指令集具有较高的代码密度,却仍然保持着ARM的大多数性能上的优势,它是A...
  • ludeng8
  • ludeng8
  • 2011年08月11日 21:47
  • 687

X86处理器架构------汇编语言寻址方式

第一部分 指令系统简介 寻址方式是指寻找指令中操作数或者指令转移地址的方式,分为数据寻址方式和指令转移地址方式两类。 指令系统是指机器所支持的所有指令的集合。   数据寻址方式有:立即数寻址,...
  • a_jige
  • a_jige
  • 2013年12月01日 16:17
  • 1112

ARM寻址方式与指令系统.

  • 2013年04月16日 23:01
  • 665KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【基于Android的ARM汇编语言系列】之四:ARM处理器的寻址方式
举报原因:
原因补充:

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