在计算机中表示指令
指令是计算机程序向计算机处理器发出的命令。每条指令都是一个 0 和 1 的序列。它们有助于描述计算机应执行的物理操作。寄存器用于临时存储数据并执行指令所针对的操作。
ARM 字段说明:
1、操作码代表指令的基本操作。
2. R d表示寄存器目的操作数。执行操作得到的结果存储在这里。
3. R n表示第一个寄存器源操作数。
4. Operand2代表第二个源操作数(在数据处理指令的情况下)和偏移量(地址)在数据传输指令的情况下。
5.我代表即时,如果
- I = 0,则第二个源操作数寄存器。
- I = 1,则第二个源操作数是 12 位立即数(常数)。
6. S代表设定条件码。它与条件分支指令有关。
7.条件代表条件。它与条件分支指令有关。
8. F代表指令格式,如果
- F = 0,则为数据处理格式
- F = 1,则为数据传输格式
不同的指令格式:
1.数据处理(DP):包括一般算术运算(例如:加法,减法等)
Condition | F | I | Opcode | S | Rn | Rd | Operand2 |
---|---|---|---|---|---|---|---|
4 bits | 2 bits | 1 bit | 4 bits | 1 bit | 4 bits | 4 bits | 12 bits |
2.数据传输(DT):包括数据传输操作(例如:加载,存储)Condition F Opcode Rn Rd Offset2 4 bits 2 bits 6 bits 4 bits 4 bits 12 bits
ARM 字段的表示:
每条指令长 32 位。在图中,上述信息以表格形式表示。这里,
Reg refers to the Register numbers between 0 and 15.
Constant: 12 bit constant
Address: 12 bit address
下图也表示了 ARM 指令编码。
ARM指令编码:
Instruction | Format | Condition | F | I | Opcode | S | Rn | Rd | Operand |
---|---|---|---|---|---|---|---|---|---|
ADD | DP | 14 | 0 | 0 | 4 | 0 | Register | Register | Register |
SUB | DP | 14 | 0 | 0 | 2 | 0 | Register | Register | Register |
ADD WITH IMMEDIATE | DP | 14 | 0 | 1 | 4 | 0 | Register | Register | Constant |
LDR(LOAD) | DT | 14 | 1 | – | 24 | – | Register | Register | Address |
STR(STORE) | DT | 14 | 1 | – | 25 | – | Register | Register | Address |
每个指令段称为一个字段。包含 4 位(对于 DP)和 6 位(对于 DT)的操作码表示指令执行的操作类型。 (例如:DP 情况下的加法、减法等,DT 情况下的加载或存储)。包含 4 位的 R n给出了作为第一个源操作数的寄存器的编号。包含12 位的操作数 2 为指令要执行的操作提供另一个源操作数。包含 4 位的 R d给出了要接收和的寄存器的编号,称为目标寄存器。
笔记 :
- 尽管多种格式(DP 和 DT)使硬件复杂化,但通过保持格式相似可以降低复杂性。
- 两种格式的前两个字段和后三个字段的大小相同,其中四个具有相同的名称。
- DT格式的操作码字段长度(6位)等于DP格式的三个字段长度之和(操作码,S,I:4+1+1位)。
- 在图中,数字以十进制数字系统表示,但它们实际上存储为二进制(0 和 1)
将 ARM 指令翻译成机器指令:
示例 1:考虑这条 ARM 指令。
添加 r3,r1,r2Condition F I Opcode S Rn Rd Operand2 14 0 0 4 0 1 3 2
字段的值在表中表示。数字以二进制形式存储。
I = 0 because here the second source operand is a register but not a constant.
Opcode = 4(0100) corresponds to the Addition operation.
Since, it is an arithmetic operation, F = 0.
The value in,
Rn field is 1. (Because r1 is the first source operand)
Operand2 is 2. (Because r2 is the second source operand)
Rd field is 3. (Because r3 is destination register in which result achieved by
adding contents of registers r1 and r2 is stored)
示例 2:考虑这条 ARM 指令。
SUB r2,r2,#6Condition F I Opcode S Rn Rd Operand2 14 0 1 2 0 2 2 6
I = 1 because here the second source operand is a constant.
Opcode = 2(0010) corresponds to the Subtraction operation.
Since, it is an arithmetic operation, F = 0.
The value in,
Rn field is 2. (Because r2 is first source operand)
Operand2 is 6. (Constant)
Rd field is 2. (Because r2 is destination register in which result achieved by subtracting 6 from r2 is stored).
示例 3:考虑这条 ARM 指令。
LDR r4,[r3,#24]Condition F Opcode Rn Rd Offset2 14 1 24 3 4 24
Opcode = 24(011000) corresponds to the Load operation.
Since,it is a data transfer operation, F = 1.
The value in,
Rn field is 3. (Because r3 is first source operand).
Address is 32. (offset to be added to the base register r3)
Rd field is 4.
这样,ARM 汇编指令就被翻译成了机器指令。
指令完整性:
如果指令具有以下每个类别,则称该指令集是完整的:
- 算术、逻辑和移位指令。
- 数据传输指令(即加载和存储)。
- 输入/输出指令。
- 程序控制指令包括借助标志检查状态条件的指令。