MENU

寻址方式 | 汇编

March 20, 2019 • 我爱学习

寻址方式

我们都知道,一条指令由两部分组成,分别是操作码和操作数。

  • 操作码:表示该指令的具体操作ADD、PUSH、POP、MOV等等,也称作助记符
  • 操作数:就是操作符要操作的对象,。一条操作符后面可以跟一个或多个操作数。

那么什么叫寻址方式?

  • 寻址方式就是找到所需操作的各种方法。也就是找到操作数储存地点的方法。

在8086/8088中提供操作数的方法有四种

  1. 立即数操作数:操作数在指令代码中提供。ADD AX, 6其中6就是立即数操作数。

    1. 寄存器操作数:操作数被储存在CPU的通用寄存器或段寄存器中。ADD AX, 6其中AX就是寄存器操作数。
    2. 存储器操作数:操作数储存在内存中。
    3. I/O端口操作数:操作数在输入/输出接口的寄存器中。

立即数寻址

  • 在立即数寻址方式中,所需操作数在指令代码中。立即数可以是8位,也可以使16位。
    例:

    MOV AH,20H
    MOV AX,20H

    第一个表示将8位立即数20H送入AH中。

    第一个表示将16位立即数20A0H送入AH中。

  • 这种寻址方式执行速度特别快,因为在指令执行的过程中,立即数直接作为指令的一部分从BIU的指令队列中取出,不需额外占用总线周期。
    注:立即数只能作为源操作数而不能作为目的操作数(就是只能做后面的那一个操作数),因为它只是一个数字,没有储存空间

###寄存器寻址

  • 寄存器寻址方式是指操作所需的操作数在CPU的某个寄存器中,可以是(8个)通用寄存器也可以是段寄存器。如AH、AL、AX、CX、DS、ES等。

    例:

    MOV AX. BX
    MOV AX. BX
  • 由于存取寄存器操作数完全在CPU中进行,不需要总线周期,所以执行速度也很快。


##存储器操作数

首先先来介绍一下存储单元逻辑地址的表示形式:段基址:偏移量

  • 段基址:由某个段寄存器提供
  • 偏移量:表示该储存单元与该段起始地址之间的距离,也叫做有效地址EA
    同时 有效地址EA 是以下三个地址分量的几种组合,有

    1. 位移量:是指令中直接给出的一个8位或16位数。一般以操作数名字(变量名或标号)的形式出现。这句话什么意思宝宝也不知道
    2. 基址:基址寄存器BX或基址指针寄存器BP所提供的内容。
    3. 变址:由源变址寄存器SI或目的变址寄存器DI所提供的内容。

    位移量、基址和变址三个地址分量进行组合时,若有两个以上的分量,将进行以$2^16$为模的十六位加法运算。

直接寻址

  • EA地址只有一个位移量分量

    直接寻址方式用符号或常数来表示

    1. 用符号表示:

      例:MOV BX, VAR => MOV BX, DX: VAR

      偏移量是VAR,段机值是DS。它表示将数据段中偏移了VAR个字节距离单元内容送到寄存器BX中。

      例:MOV AL, DATA+2 => MOV BL, DS: DATA+2

      它表示将数据段中偏移了DATA+2个字节单元内容送到寄存器AL中。

    2. 用常数表示

      例:MOV AX, DS: [64H]

      它表示从当前数据段开始,便宜100个字节的字单元内容送到AX中。不能写为:MOV AX, 64H
      不带方括号的话,就是将64H传送到AX中。

Last Modified: September 8, 2021