ARM体系结构与编程(第2版)第2章.ppt

ARM体系结构与编程(第2版)第2章

在本章中,将介绍ARM指令分类以及各类指令对应的寻址方式。 * 2.1 ARM指令集概要介绍 在本节中,将介绍ARM指令相关的一些基本概念,包括指令的分类、指令的一般编码格式以及ARM指令中的条件码。 * 2.1.1 ARM指令的分类 ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理器指令和异常中断产生指令6类。 * 2.1.2 ARM指令的一般编码格式 ARM指令字长为固定的32位。一条典型的ARM指令编码格式如下: 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0 其中的符号及参数说明如下。 opcode:指令操作符编码。 cond:指令执行的条件编码。 S:决定指令的操作是否影响CPSR的值。 Rd:目标寄存器编码。 Rn:包含第1个操作数的寄存器编码。 shifter_operand:表示第2个操作数。 * cond 0 0 1 opcode S Rn Rd shifter_operand 2.1.3 ARM指令的条件码域 条件码共有16个,各条件码的含义和助记符如表2.1所示。可条件执行的指令可以在其助记符的扩展域加上条件码助记符,从而在特定的条件下执行。 参见教材P23 * 2.2 ARM指令的寻址方式 ARM指令的寻址方式有以下几种,分别进行讨论: 数据处理指令的操作数的寻址方式。 字及无符号字节的Load/Store指令的寻址方式。 杂类Load/Store指令的寻址方式。 批量Load/Store指令的寻址方式。 协处理器Load/Store指令的寻址方式。 * 2.2.1 数据处理指令的操作数的寻址方式 通常数据处理指令的格式如下所示: ? opcode{cond}{S} Rd,Rn,shifter_operand ? 其中的符号及参数说明如下。 opcode:是指令助记符,如ADD表示算术加操作指令。 {cond}:表示指令执行的条件。 {S}:决定指令的操作是否影响CPSR的值。 Rd:表示目标寄存器。 Rn:表示包含第1个操作数的寄存器。 shifter_operand:表示第2个操作数。 * 2.2.1 数据处理指令的操作数的寻址方式 shifter_operand通常有下面3种格式。 (1) 立即数方式。 (2) 寄存器方式。 (3) 寄存器移位方式。 数据处理指令操作数的具体寻址方式有下面11种。 #immediate Rm Rm, LSL #shift_imm Rm, LSL Rs Rm, LSR #shift_imm Rm, LSR Rs Rm, ASR #shift_imm Rm, ASR Rs Rm, ROR #shift_imm Rm, ROR Rs Rm, RRX * 2.2.2 字及无符号字节的Load/Store指令的寻址方式 各种类型的Load/Store指令的寻址方式由两部分组成。一部分为一个的基址寄存器;另一部分为一个地址偏移量。基址寄存器可以为任一个通用寄存器;地址偏移量可以有以下3种格式: 立即数。 寄存器。 寄存器及一个移位常数。 同样,寻址方式的地址计算方法有如下3种: 偏移量方法。 事先更新方法。 事后更新方法。 * 2.2.2 字及无符号字节的Load/Store指令的寻址方式 LDR指令的语法格式如下所示: ?LDR{cond}{B} {T}Rd,address_mode 其中,address_mode表示第2个操作数的内存地址,共有如下9种格式: [Rn, #+/–offset_12] [Rn, +/–Rm] [Rn, +/–Rm,shift#shift_imm] [Rn, #+/–offset_12]! [Rn, +/–Rm]! [Rn, +/–Rm,shift#shift_imm]! [Rn], #+/–offset_12 [Rn], +/–Rm [Rn], +/–Rm,shift#shift_imm * 2.2.3 杂类Load/Store指令的寻址方式 这里所说的杂类Load/Store指令,包括操作数为半字(无符号数或带符号数)数据的Load/Store指令;操作数为带符号的字节数据的Load 指令;双字的Load/Store指令。这类指令的语法格式为: ?LDR|STR{cond}H|SH|SB|D Rd,addressing_mode ?其中,addressing_mode是指令中内存单元的寻址方式,具体有以下6种格式: [Rn, #+/–offset_8] [Rn, +/–

文档评论(0)

1亿VIP精品文档

相关文档