ARM指令系统,ARM处理器寻址方式,指令集介绍.pdf
文本预览下载声明
3章 ARM指令系统
谷芯微 技术贡献
网址:www.threeway.cc
面对复杂多变的ARM汇编指令表,本章
重点介绍实用价值大、有一定难度且理解起来
容易出错的指令,以点带面达到全面掌握ARM
汇编指令的目的。
3章 目录
q1. ARM处理器寻址方式
q2. 指令集介绍
q3. 课后练习
3.1 ARM处理器寻址方式
ARM处理器是基于精简指令集计算机(RISC)
原理设计的,指令集和相关译码机制较为简单。
ARM9TDMI (-S)具有32位ARM指令集和16位Thumb指令
集,ARM指令集效率高,但是代码密度较低;而Thumb
指令集具有较高的代码密度,并且保持ARM的大多数性
能上的优势,它是ARM指令集的子集。所有的ARM指令
都是可以有条件执行的,而Thumb指令仅有一条指令
(分支指令B)具备条件执行功能。ARM程序和Thumb程
序可相互调用,相互之间的状态切换开销几乎为零。
说明:本章中的ARM9TDMI (-S)表示ARM9TDMI或
ARM9TDMI-S。
寻址方式是根据指令中给出的地址码字段来
实现寻找真实操作数地址的方式。ARM处理器具有8种
基本寻址方式。
3.1.1 寄存器寻址
寄存器寻址是指操作数的值在寄存器中,指令中的
地址码字段指出的是寄存器编号,指令执行时直接取出
寄存器值来操作。
应用示例:
MOV R1, R2 ;将R2 的值存入R1
SUB R0, R1, R2 ;将R1 的值减去R2的值,结果保存到R0
3.1.2 立即寻址
立即寻址指令中的操作码字段后面的地址码部
分即是操作数本身,也就是说,数据就包含在指令当中
,取出指令也就取出了可以立即使用的操作数 (这样的
数称为立即数)。
应用示例:
SUBS R0, R0, # 1 R0减1,结果放入R0,并且影响标志位
MOV R0, #0xFF000 ;将立即数0xFF000装入R0寄存器
3.1.3 寄存器移位寻址(1)
寄存器移位寻址是ARM指令集特有的寻址方式
。当 2个操作数是寄存器移位方式时, 2个寄存器操
作数在与 1个操作数结合之前,选择进行移位操作。
应用示例:
MOV R0, R2, LSL #3 R2的值左移3位,结果放入R0,即R0=R2 x 8
ANDS R1, R1, R2, LSL R3 R2的值左移R3位,然后和R1相“与”操作,结果放入R1
可采用的移位操作如下:
■ LSL:逻辑左移 (Logical Shift Left),寄存器
中字的低端空出的位补0;
■ LSR:逻辑右移 (Logical Shift Right),寄存
器中字的高端空出的位补0;
■ ASR:算术右移 (Arithmetic Shift Right),移
位过程中保持符号位不变,若源操作数为正数,则字的
高端空出的位补0,否则补1;
3.1.3 寄存器移位寻址(2 )
■ ROR:循环右移 (ROtate Right),由字的低 移
出的位填入字的高端空出的位;
■ RRX:带扩展的循环右移 (Rotate Right
eXtended by 1 place),操作数右移1位,高端空出的
位用原C标志值填充。
各种移位操作如图3.1所示。
图3.1 移位操作示意图
0 0
(a) LSL移位操作 (b) LSR移位操作
(c) ASR移位操作 (d) ROR移位操作
C
(e) RRX移位操作
3.1.4 寄存器间接寻址
寄存器间接寻址指令中的地址码给出的
显示全部