汇编语言笔记04_80x86寻址方式(小甲鱼笔记总结)

物理地址

  • 存储器以字节为单位存储信息。
  • 每一个字节单元有一个惟一的存储器地址,称为物理地址
  • 一个字存入存储器要占有相继的两个字节,存放时低位字节存入低地址,高位字节存入高地址。
  • 字单元的地址采用它的低地址表示。
  • 画内存时下边是高地址,上边是高地址。栈底是高地址。
  • 每个存储单元有惟一的物理地址,但它却可由不同的段地址和不同的偏移地址组成。

逻 辑 地 址 = 段 地 址 : 偏 移 地 址 逻辑地址=段地址:偏移地址 =

物 理 地 址 = 段 地 址 左 移 四 位 + 偏 移 地 址 物理地址=段地址左移四位+偏移地址 =+

与数据有关的寻址方式

立即寻址方式

操作数直接存放在指令中,这样的操作数称为立即数
操 作 数 = 立 即 数 操作数=立即数 =

  • mov ax,3

注意

  • 立即寻址方式只能用于源操作数字段。
  • 源操作数长度应与目的操作数长度一致。

寄存器寻址方式

操作数存放在寄存器中,指令指定寄存器号

  • mov ax,bx

操 作 数 = 指 定 寄 存 器 中 的 内 容 操作数=指定寄存器中的内容 =


以上两种寻址方式都不涉及存储器。


以下各种寻址方式的操作数都存放在存储区中。

在80x86中,把操作数的偏移地址称为有效地址EA(Effective Address)

以下各种寻址方式通过不同途径求得操作数的有效地址,进而获得操作数。
有 效 地 址 = 基 址 + 变 址 × 比 例 因 子 + 位 移 量 有效地址=基址+变址\times比例因子+位移量 =+×+
有效地址可以有以下四种成分组成:

  • 位移量

    (displacement),是存放在指令中的数字,但它不是立即数,而是一个地址。

  • 基址

    (base),是存放在基址寄存器(BP、BX)中的内容,通常用来指向数据段中数组或字符串的首地址。

  • 变址

    (index),是存放在变址寄存器(SI、DI)中的内容,通常用来访问数组中的某个元素或字符串中的某个字符。

  • 比例因子

    (scale factor),其值可为1,2,4,8。(386及后继机型才有比例因子)

    表1 16位寻址时有效地址三种成分的组成
成分 16位寻址
位移量 0,8,16位
基址寄存器 BX,BP
变址寄存器 SI,DI
表2 默认段选择规则
访存类型 所用段及段寄存器 缺省规则
指令 代码段 CS 用于取指令
堆栈 堆栈段 SS 进出栈,ESP、BP或ESP作为基址寄存器
局部数据 数据段 DS 除堆栈和串指令的目的串之外
目的串 附加数据段 ES 串处理指令的目的串

禁止使用段跨越前缀的三种情况

  • 串处理指令的目的串必须使用ES段
  • PUSH和POP指令的源必须使用SS段
  • 指令必须存放在CS段

直接寻址方式

有 效 地 址 = 位 移 量 有效地址=位移量 =

  • mov ax,[0]

位移量可以用符号地址(变量)表示。

  • mov ax,table
  • mov ax,[table]

默认段寄存器为DS

该寻址方式适用于处理单个变量。

寄存器间接寻址方式

有 效 地 址 = 基 址 寄 存 器 或 变 址 寄 存 器 的 内 容 有效地址=基址寄存器或变址寄存器的内容 =

  • mov ax,[bp]
  • mov ax,[bx]

有效地址就在某个寄存器**(BX,BP,SI,DI)**中。(不允许使用AX,CX,DX)

BP的默认段寄存器为SS,其他三个寄存器的默认段为DS。

寄存器相对寻址方式

又称直接变址寻址方式。
有 效 地 址 = 一 个 基 址 寄 存 器 或 变 址 寄 存 器 的 内 容 + 位 移 量 有效地址=一个基址寄存器或变址寄存器的内容+位移量 =+
默认段情况与寄存器间接寻址方式相同。

  • mov ax,count[si]
  • mov ax,[count+si]

基址变址寻址方式

有 效 地 址 = 一 个 基 址 寄 存 器 的 内 容 + 一 个 变 址 寄 存 器 的 内 容 有效地址=一个基址寄存器的内容+一个变址寄存器的内容 =+

默认段情况参看表1和表2。

  • mov ax,[bx][di]
  • mov ax,[bp][si]
  • mov ax,[bx+di]

相对基址变址寻址方式

有 效 地 址 = 一 个 基 址 寄 存 器 的 内 容 + 一 个 变 址 寄 存 器 的 内 容 + 位 移 量 有效地址=一个基址寄存器的内容+一个变址寄存器的内容+位移量 =++

  • mov ax,mask[bx][si]

与转移地址有关的寻址方式

这种寻址方式用来确定转移指令与CALL指令的转向地址。

段内直接寻址

有效地址=(IP)+位移量

平常用的jmp next等,都是这种寻址方式。

近转移

位移量大小为16bit,如jmp near ptr next

短转移

位移量为8bit,如jmp short next,看看其他与转移地址有关的寻址方式会发现只有short没有ptr

段内间接寻址

有效地址=寄存器或存储单元内容

该内容可以用除立即寻址方式以外的与数据有关的所有寻址方式。

  • jmp bx

  • jmp word ptr[bp+table]

    word ptr说明是一个字,所以是段内转移

段间直接寻址

指令中直接提供了转向段地址偏移地址

  • jmp far ptr next

段间间接寻址

取存储器中的两个相继字取代IP和CS中的原始内容,以达到段间转移的目的。

存储单元地址除立即数方式和寄存器方式外均可。

  • jmp dowrd ptr[table+bx]

    dword说明是双字,所以是段间转移

猜你喜欢

转载自blog.csdn.net/david2000999/article/details/115231973
今日推荐