寻址方式
2007-10-22 20:33
204 查看
直接寻址方式(Direct addressing)
在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的物理地址可通过((DS)×16)再加上这个有效地址形成,如下图所示。
在汇编语言指令中,可以用符号地址(变量名或标号)代替数值地址。
例如: MOV AX, DATA
或 MOV AX, [DATA]
这里DATA是存放操作数单元的符号地址。
直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。
例如: MOV AX, ES:NUMBER
或 MOV AX, ES:[NUMBER]
这里NUMBER是附加段中的字变量。
直接寻址方式适合于处理单个变量。
寄存器间接寻址方式(Register indirect addressing)
这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI来保存操作数的有效地址。如果指令中使用的寄存器是SI、DI和BX,则操作数在数据段中,((DS)×16)再加上存器中的有效地址形成20位物理地址;如果指令中使用的寄存器是BP,则操作数在堆栈段中,((SS)×16)再加上BP中的有效地址形成20位物理地址。如左图所示。
指令中也可以指定段跨越前缀来取得其他段中的数据。
例如:MOV AX, ES:[BX]
这种寻址方式可以用于表格处理。
基址或变址寄存器初始化为表格的首地址,每取一个数据就修改寄存器的值,使之指向下一个数据。
寄存器相对寻址方式(Register relative addressing)
这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。如左图所示。
寄存器相对寻址方式也可以使用段跨越前缀。
例如:MOV AX, ES:[DI+10]
这种寻址方式同样可用于表格处理。
表格的首地址可设置为位移量,修改基址或变址寄存器的内容取得表格中的值。
基址变址寻址方式 (Based indexed addressing)
这是一种基址加变址来定位操作数地址的方式,也就是说,操作数的有效地址是一个基址寄存器(BP或BX)和一个变址寄存器(SI或DI)的内容之和。如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。如左图所示。
此种寻址方式也可使用段跨越前缀。
例如:MOV AX, ES:[BX][SI]
注意:一条指令中同时使用基址寄存器或变址寄存器是错误的。
例如:MOV CL, [BX+BP] 或 MOV AX, [SI+DI] 均为非法指令。
这种寻址方式同样适用于数组或表格处理。
首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于两个寄存器的值都可以修改,所以它比寄存器相对寻址方式更加灵活。
相对基址变址寻址方式(Relative based indexed addressing)
这种寻址方式与基址变址寻址方式类似,不同的是基址加变址再加上一个位移量形成操作数的有效地址。缺省段的使用仍然是DS与BX组合,SS与BP组合。如左图所示。
这种寻址方式通常用于对二维数组的寻址。
例如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。
这种寻址方式也为堆栈处理提供了方便。
一般(BP)可指向栈顶,从栈顶到数组的首址可用位移量表示,变址寄存器可用来访问数组中的某个元素。
综上所述,有效地址可以由以下三种成分组成:
· 位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址。
· 基址(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。
· 变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。
有效地址的计算可用下式表示:
EA = 基址 + 变址 + 位移量
这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。
在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的物理地址可通过((DS)×16)再加上这个有效地址形成,如下图所示。
在汇编语言指令中,可以用符号地址(变量名或标号)代替数值地址。
例如: MOV AX, DATA
或 MOV AX, [DATA]
这里DATA是存放操作数单元的符号地址。
直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。
例如: MOV AX, ES:NUMBER
或 MOV AX, ES:[NUMBER]
这里NUMBER是附加段中的字变量。
直接寻址方式适合于处理单个变量。
寄存器间接寻址方式(Register indirect addressing)
这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI来保存操作数的有效地址。如果指令中使用的寄存器是SI、DI和BX,则操作数在数据段中,((DS)×16)再加上存器中的有效地址形成20位物理地址;如果指令中使用的寄存器是BP,则操作数在堆栈段中,((SS)×16)再加上BP中的有效地址形成20位物理地址。如左图所示。
指令中也可以指定段跨越前缀来取得其他段中的数据。
例如:MOV AX, ES:[BX]
这种寻址方式可以用于表格处理。
基址或变址寄存器初始化为表格的首地址,每取一个数据就修改寄存器的值,使之指向下一个数据。
寄存器相对寻址方式(Register relative addressing)
这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。如左图所示。
寄存器相对寻址方式也可以使用段跨越前缀。
例如:MOV AX, ES:[DI+10]
这种寻址方式同样可用于表格处理。
表格的首地址可设置为位移量,修改基址或变址寄存器的内容取得表格中的值。
基址变址寻址方式 (Based indexed addressing)
这是一种基址加变址来定位操作数地址的方式,也就是说,操作数的有效地址是一个基址寄存器(BP或BX)和一个变址寄存器(SI或DI)的内容之和。如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。如左图所示。
此种寻址方式也可使用段跨越前缀。
例如:MOV AX, ES:[BX][SI]
注意:一条指令中同时使用基址寄存器或变址寄存器是错误的。
例如:MOV CL, [BX+BP] 或 MOV AX, [SI+DI] 均为非法指令。
这种寻址方式同样适用于数组或表格处理。
首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于两个寄存器的值都可以修改,所以它比寄存器相对寻址方式更加灵活。
相对基址变址寻址方式(Relative based indexed addressing)
这种寻址方式与基址变址寻址方式类似,不同的是基址加变址再加上一个位移量形成操作数的有效地址。缺省段的使用仍然是DS与BX组合,SS与BP组合。如左图所示。
这种寻址方式通常用于对二维数组的寻址。
例如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。
这种寻址方式也为堆栈处理提供了方便。
一般(BP)可指向栈顶,从栈顶到数组的首址可用位移量表示,变址寄存器可用来访问数组中的某个元素。
综上所述,有效地址可以由以下三种成分组成:
· 位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址。
· 基址(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。
· 变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。
有效地址的计算可用下式表示:
EA = 基址 + 变址 + 位移量
这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。
相关文章推荐
- ARM指令寻址方式
- ARM处理器 八种寻址方式
- ARM (二) arm指令分类及其寻址方式
- 简单的方式寻址数组中第二大数的方式
- 七种寻址方式(立即寻址、寄存器寻址)
- D3D实现BitBlt 截取贴图 UV纹理寻址方式
- Intel X86 CPU 系列的寻址方式与段式内存管理机制
- 51单片机的寻址方式
- ARM高分笔记--(三)ARM寻址方式
- 寻址方式
- ARM 汇编寻址方式
- 8086中的七种寻址方式
- ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式
- NAND FLASH 读写寻址方式
- 七种寻址方式(直接寻址方式)
- hash实现--开放寻址方式
- ARM 处理器寻址方式
- 寻址方式
- 寻址方式
- Mohican_9/26 寻址方式