直接寻址,间接寻址级别不同怎么区分

3.2.1 关于操作数的寻址方式
微机原理与接口技术多媒体教学课件
位置:--第二节
寻 址 方 式
  计算机在运行过程中需要的数据称为操作数,寻找指令中所需要的操作数或操作数地址的方式称为寻址方式。80486指令系统的寻址方式包括三种类型:操作数寻址、转移地址寻址及I/O端口寻址。
     
关于操作数的寻址方式
&& 指令中所需要的操作数来自以下几个方面。
&&& ① 操作数包含在指令中。在取指令的同时,操作数也随着取出,这种操作数被称为立即数。
&&& ② 操作数包含在CPU的某个内部寄存器中。由于寄存器在CPU的内部,因此取操作数也比较简单。
&&& ③ 操作数在内存储器中。由于内存储器在CPU的外部,因此在寻找这种操作数时需要执行一个总线周期。首先找到该操作数在内存中存放的地址,再从该地址中取出操作数。
  在80486微机系统中,任何内存单元的地址由段基址和偏移地址(又称偏移量)组成,段基址由段寄存器提供,而偏移地址则由以下四个部分组合而成。
&&& ① 基址寄存器。
&&& ② 间址寄存器(或称变址寄存器)。
&&& ③ 比例因子。
&&& ④ 位移量。
  以上四个部分被称为偏移地址四元素。一般将这四个元素按某种计算方法组合形成的偏移地址称为有效地址EA。有效地址的组合方式和计算方法如下:
EA=基址+(间址×比例因子)+位移量
  采用16位寻址时,位移量是八位或16位,用BX和BP作基址寄存器,SI和DI作为间址寄存器,比例因子为1。
  采用32位寻址时,可使用8位和32位的位移量,32位通用寄存器都可以作为基址寄存器或间址寄存器(ESP不用于间址),并且可采用2, 4或8三种不同的比例因子。
  以上四个因素可优化组合出九种存储器寻址方式,加上立即寻址和寄存器寻址,共有11种寻址方式。
  以汇编语言中的MOV指令为例,其指令格式为:
目标操作数, 源操作数 将源操作数传送到目标操作数
1.立即数寻址(immediate
addressing)
  立即数寻址的特点:操作数就在指令中,跟在操作码后面,称为立即数。在指令格式中,立即数一般为源操作数。
  注意:在汇编语言中立即数是以常数形式出现的。常数可以是二进制数(后缀字母B或b)、十进制数(不用后缀字母,或用D或d)、十六进制数(后缀字母H或h,以A~F开头时前面要加一个0)、字符串(用单引号扩起来的字符,表示对应的ASCII码值)。
AL, 0FH 将8位立即数0FH传送到AL寄存器中
AX, 0102H 将16位立即数0102H传送到AX寄存器中
这两条指令的指令码在内存中的存放格式及指令执行过程如图3.1所示。
立即数寻址操作
&&& 注意:当立即数寻址时,只允许源操作数为立即数,目标操作数必须是寄存器或存储器,其作用是给寄存器或存储单元赋值。
2.寄存器寻址(register
addressing)
  寄存器寻址的特点:指令中所需的操作数在CPU的某个寄存器中,由于存取此类操作数在CPU内部进行,所以执行速度快。
例如:MOV AX, CX 将CX中的内容传送到AX中
该指令的寻址及执行过程如图3.2所示。
3.直接寻址(direct
addressing)
&&& 直接寻址的特点:操作数一般存放在存储器的数据段中,而操作数的有效地址EA由指令给出。
物理地址=(DS)×16+EA
例如: MOV AX,
[2000H] ; 将有效地址EA=2000H字单元中的内容
&&&&&&&&&&&&&&&&&&&&&& ; 传送到AX寄存器。
  在汇编语言中,带方括号“[ ]”的操作数表示存储器操作数,括号中的内容作为存储单元的有效地址EA。存储器操作数本身并不能表明地址的类型,而需通过另一个寄存器操作数的类型或别的方式来确定。上例中由于目标操作数AX为字类型,源操作数也应与之配套,所以有效地址EA=2000H为字单元。该指令的寻址及执行过程如图3.3所示。
设DS=3000H
物理地址=3000H×16+2000H=32000H
  即将存储器32000H和32001H两个存储单元的内容高位字节对应高地址,低位字节对应低地址,送到AX寄存器中。
  直接寻址允许用符号地址来代替数值地址,例如:MOV
AX, [DATA],变量DATA为存放操作数的存储单元的符号地址。还可写成MOV
AX, DATA。直接寻址适用于处理单个变量。
4.寄存器间接寻址(register
indirect addressing)
&&& 寄存器间接寻址的特点:操作数在存储器中,其有效地址EA存放在某个寄存器中。
&&& 注意:寄存器的使用在16位寻址和32位寻址时不一样。
(1)16位寻址
  有效地址存放在SI, DI, BX, BP中。
  如果指令中指定的寄存器是BX, SI, DI,则操作数在数据段中,段基址在DS中,操作数的物理地址为:
  如果指令中指定的寄存器是BP,则操作数在堆栈中,段基址在SS中,操作数的物理地址为:
  物理地址=(SS)×16+(BP)
  例如:
  设SS=3000H,BP=1000H该指令寻址及执行过程如图3.4所示。
(2)32位寻址
  八个32位通用寄存器均可作为寄存器间接寻址使用。除ESP和EBP默认段寄存器为SS外,其余六个通用寄存器均默认段寄存器为DS。
  寄存器间接寻址方式用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。
5.基址寻址(based
relative)
  基址寻址的特点:操作数在存储单元中,操作数的有效地址EA由基址寄存器的内容和指令中给出的位移量之和算出。
(1)16位寻址
  BX和BP作为基址寄存器。BX以DS作为默认段寄存器,BP以SS为默认段寄存器。位移量可以是8位或16位。
  EA=(BX或BP)+位移量(8或16位)
(2)32位寻址
  八个32位通用寄存器均可作为基址寄存器,其中ESP, EBP以SS为默认段寄存器,其余均以DS为默认段寄存器。位移量为8位或32位。
  EA=(基址寄存器)+位移量(8位或32位)
6.间址寻址(indexed
relative)
间址寻址中,有效地址的计算公式如下:
EA=(间址寄存器)+位移量(8位或32位)
(1)16位寻址
  仅SI和DI可作为间址寄存器,默认DS为段基址寄存器。
(2)32位寻址
  除ESP外的其他七个32位的寄存器均可作为间址寄存器,EBP默认SS作为段基址寄存器,其余以DS作段基址寄存器。
  基址寻址和间址寻址适用于对一维数组的数组元素进行检索操作。常用位移量表示数组起始地址的偏移量,基址/间址寄存器表示数组元素的下标,可通过修改下标来获取数组元素的值。
7.比例间接寻址(proportion
indirect addressing)
比例间接寻址中有效地址的计算公式如下:
EA=(间址寄存器)×比例因子(2, 4或8)+位移量(8位或32位)
比例间接寻址方式只适用于32位寻址。
EAX,TABLE[ESI×4]
其中:TABLE为位移量,4是比例因子,ESI乘以4的操作在CPU内部完成。
8.基址加间址寻址(based
indexed addressing)
&&& 基址加间址寻址方式也包括16位寻址和32位寻址,有效地址的计算公式如下:
&&& EA=(基址寄存器)+(间址寄存器)
&&& 例如:
RSSA[BX][SI]
&&& ( 也可写成MOV
DX, RSSA[BX+SI]或MOV
DX, [RSSA+BX+SI])
&&& 若:DS=3000H, BX=2000H,
SI=1000H,位移量RSSA=0250H时,则
物理地址=DS×16+BX+SI+RSSA
    =30000H+2000H+1000H+0250H
    =33250H
其寻址及执行过程如图3.5所示。
  注意:当基址寄存器和间址寄存器默认的段寄存器不同时,一般以基址寄存器决定的段寄存器为段基址寄存器。
&&& 例如:MOV
EAX, [EBP][ECX]
&&& 由于基址寄存器是EBP,所以默认SS为段基址寄存器。
&&& 基址加间址寻址主要用于二维数组的操作。
9.基址加比例间址寻址(based indexed proportion addressing)
&&& 在基址加比例间址寻址方式中,有效地址的计算公式如下:
&&& EA=(间址寄存器)×比例因子+(基址寄存器)
&&& 例如:MOV
EAX, [ECX×8][EDX]
&&& 基址加比例间址寻址方式只适用于32位寻址。
10.带位移的基址加间址寻址(based indexed relative)
&&& 在带位移的基址加间址寻址方式中,有效地址的计算公式如下:
&&& EA=(间址寄存器)+
(基址寄存器)+位移量
&&& 带位移的基址加间址寻址方式分为16位和32位寻址两种情况。
&&& 例如:MOV
AX, [BX+SI+MASK]
EDX, [ESI][EBP+0FFF0000H]
11.带位移的基址加比例间址寻址(based indexed proportion relative)
(间址寄存器)
×比例因子+
(基址寄存器)
&&& 这种寻址方式只有32位寻址一种情况。
&&& 例如: INC
BYTE PTR [EDI×8][EDX+40H]
&&& 11种寻址方式分为两大类。
&&& ① 非存储器操作寻址方式:包括立即数寻址和寄存器寻址。这类寻址方式不需要访问存储器,故执行速度快。
&&& ② 访问存储器操作寻址方式:后九种寻址方式属于这一类。在进行访问存储器操作时,除要计算有效地址EA外,还必须确定操作数所在的段,即确定有关的段寄存器。
&&& 一般情况下,指令不特别指出段寄存器。80486微机约定了默认的段寄存器。
&&& 有的指令允许段超越寻址,这时指令中应加上超越前缀。
&&& 程序只能存放在代码段中,只能用IP(EIP)作为偏移地址寄存器。
&&& 堆栈操作数只能在堆栈中,只能用SP或BP(ESP或EBP)作为偏移地址寄存器。
&&& 在串操作中,目的操作数只能在附加数据段ES中,其他操作虽然也有默认段,但都是允许段超越的。
                      当前位置: >
寄存器直接寻址操作数在()中,寄存器间接寻址操作数在()中,所以执行指令的速度前者比后者 ()
所属学科:
试题类型:主观题
所属知识点:
试题分数:3.0 分
暂未组卷。
暂无学习笔记。
&&&&&&&&&&&&&&&长沙希赛教育科技有限公司 版权所有 & &&

我要回帖

更多关于 s7 200间接寻址 的文章

 

随机推荐