简单介绍指令结构

指令格式三地址指令格式, 二地址指令格式, 一地址指令格式, 零地址指令格式

当指令字(Instruction Word)超过机器字(Machine Word)时,确实需要通过分部分存储逐字读取的方式来表示和执行。 第一字可能包含操作码(opcode)和一些基本的操作数或寄存器信息,而指令的第二字(或者第三字)则可能包含其他信息.

因此,指令又会说什么指令第二字这些就是指令的分部分的第二部分.

操作码 (op) 地址码 (A1) 地址码 (A2)
二进制数 (具体多少看位数) 二进制数 (具体多少看位数) 二进制数 (具体多少看位数)

数据寻址方式总结

总结:

  • 立即寻址:操作数在指令中。
  • 直接寻址:操作数的内存地址在指令中。
  • 间接寻址:操作数的地址存储在寄存器或内存中,指令通过这个地址间接访问。
  • 寄存器寻址:操作数存储在寄存器中。
  • 寄存器间接寻址:操作数的地址存储在寄存器中,指令通过该寄存器间接访问。
  • 变址寻址:通过基址和变址寄存器计算地址。
  • 基址寻址:通过基址寄存器和偏移量计算地址。
  • 相对寻址:通过程序计数器加上偏移量计算地址,通常用于跳转指令。

1. 立即寻址 (Immediate Addressing)

  • 定义:操作数直接嵌入指令中,不需要从内存读取。
  • 例子:假设有一条指令:MOV AX, 5。这条指令将数值 5 直接赋值给寄存器 AX,不需要从内存中获取数据。
    • 操作数5,它是立即数。

2. 直接寻址 (Direct Addressing)

  • 定义:操作数的地址直接由指令给出,指令包含了内存地址。
  • 例子:假设有一条指令:MOV AX, [1000H]。这条指令表示从内存地址 1000H 读取数据,并将其存入寄存器 AX
    • 内存地址 1000H 直接给出,因此直接访问该地址。

3. 间接寻址 (Indirect Addressing)

  • 定义:操作数的地址存储在一个寄存器或内存单元中,指令提供的是该寄存器或内存单元的地址。
  • 例子:假设有一条指令:MOV AX, [BX]。这条指令表示从寄存器 BX 指定的地址位置获取数据,并将其存入寄存器 AX
    • 地址存储在寄存器 BX 中,程序通过间接方式获取数据。

4. 寄存器寻址 (Register Addressing)

  • 定义:操作数存储在寄存器中,指令直接使用寄存器。
  • 例子:假设有一条指令:MOV AX, BX。这条指令将寄存器 BX 中的数据复制到寄存器 AX 中。
    • 数据直接存在寄存器 BX 中。

5. 寄存器间接寻址 (Register Indirect Addressing)

  • 定义:操作数的地址存储在一个寄存器中,指令通过该寄存器来间接访问内存。
  • 例子:假设有一条指令:MOV AX, [SI]。这条指令表示从寄存器 SI 指定的内存地址中读取数据,并将其存入寄存器 AX
    • SI 寄存器提供内存地址,程序通过这个寄存器间接访问内存。

6. 变址寻址 (Indexed Addressing)

  • 定义:通过将基址寄存器和变址寄存器的值相加,计算出内存地址。
  • 例子:假设有一条指令:MOV AX, [BX+SI]。这条指令表示从内存地址 BX + SI 读取数据,并将其存入寄存器 AX
    • 变址寄存器 SI基址寄存器 BX 相加,得出操作数的地址。

7. 基址寻址 (Base Addressing)

  • 定义:通过基址寄存器计算操作数的地址,常用于访问结构体或数组。
  • 例子:假设有一条指令:MOV AX, [BP+4]。这条指令表示从内存地址 BP + 4 读取数据,并将其存入寄存器 AX
    • BP 寄存器提供基址,偏移量 4 用于定位具体的内存位置。

8. 相对寻址 (Relative Addressing)

  • 定义:指令中提供的地址是相对于程序计数器(PC)当前值的偏移量,通常用于跳转指令。
  • 例子:假设有一条指令:JMP [PC+8]。这条指令表示从当前程序计数器的位置向前跳转 8 个字节。
    • 偏移量8,通过相对计算来决定跳转的目标地址。

例子

p1

p2