计算机系统(6)
◆指令寻址方式:
顺序寻址方式:执行一段程序时,是一条指令接着一条指令的顺序执行。
跳跃寻址方式:下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。
◆指令操作数的寻址方式
1. 立即寻址(Immediate Addressing)
-
定义:操作数直接包含在指令中(即立即数)。
-
格式:
MOV R1, #10
(将常数 10 存入寄存器 R1) -
特点:
-
速度快(无需访存)。
-
但操作数大小受限(如 8/16/32 位立即数)。
-
-
适用场景:初始化寄存器、短常数运算。
2. 寄存器寻址(Register Addressing)
-
定义:操作数在 CPU 寄存器中。
-
格式:
ADD R1, R2
(R1 = R1 + R2) -
特点:
-
速度最快(直接访问寄存器)。
-
寄存器数量有限(如 x86 有 16 个通用寄存器)。
-
-
适用场景:高频数据运算。
3. 直接寻址(Direct Addressing)
-
定义:指令直接给出操作数的内存地址。
-
格式:
MOV R1, [0x1000]
(将内存地址 0x1000 的数据加载到 R1) -
特点:
-
需要访存,速度较慢。
-
地址范围受限(取决于指令编码位数)。
-
-
适用场景:访问固定内存位置(如全局变量)。
4. 寄存器间接寻址(Register Indirect Addressing)
-
定义:寄存器中存储的是操作数的内存地址。
-
格式:
MOV R1, [R2]
(R2 存放地址,读取该地址的数据到 R1) -
特点:
-
比直接寻址灵活(地址可动态计算)。
-
仍需访存,速度较慢。
-
-
适用场景:指针操作、数组遍历。
5. 基址寻址(Base Addressing)
-
定义:操作数地址 = 基址寄存器 + 偏移量。
-
格式:
MOV R1, [R2 + 0x10]
(R2 是基址,0x10 是偏移量) -
特点:
-
适用于数组、结构体访问。
-
需额外计算地址。
-
-
定义:操作数地址 = PC(程序计数器) + 偏移量。
-
格式:
JMP +0x20
(跳转到当前指令地址 + 0x20) -
特点:
-
用于分支/跳转指令。
-
支持位置无关代码(PIC)。
-