简单介绍指令结构
指令格式有 三地址指令格式, 二地址指令格式, 一地址指令格式, 零地址指令格式
当指令字(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用于定位具体的内存位置。
- BP 寄存器提供基址,偏移量
8. 相对寻址 (Relative Addressing)
- 定义:指令中提供的地址是相对于程序计数器(PC)当前值的偏移量,通常用于跳转指令。
- 例子:假设有一条指令:
JMP [PC+8]。这条指令表示从当前程序计数器的位置向前跳转 8 个字节。- 偏移量是
8,通过相对计算来决定跳转的目标地址。
- 偏移量是
例子

