8086 寻址方式(一)CPU和主存中的寻址方式

简介:      通常,一条带有操作数的指令要指明两个问题:一是进行什么操作,二是用什么方式寻找操作数的存放地址。我们将寻找操作数存放的地址的方式成为寻址方式。当一条指令带中有多个操作数时,每个操作数的寻址方式可能不同,因此,寻址方式是针对指令中指定的操作数(源操作数或者是目的操作数)而言的。

     通常,一条带有操作数的指令要指明两个问题:一是进行什么操作,二是用什么方式寻找操作数的存放地址。我们将寻找操作数存放的地址的方式成为寻址方式。当一条指令带中有多个操作数时,每个操作数的寻址方式可能不同,因此,寻址方式是针对指令中指定的操作数(源操作数或者是目的操作数)而言的。

   8086指令中的操作数可以存放在三种不同的部件中:一是CPU内的寄存器中,二是主存中,三是I/O设备的端口中。寻址方式不仅指明了操作数存放的部件,而且指明了操作数在该部件内的存放地址。

   下面来介绍一下8086在CPU和主存中的寻址方式。

  

一,寄存器寻址  

     在这种寻址方式中,指令所指明的寄存器就是操作数的存放地址,及操作数在指令指明的寄存器R(R是CPU内的寄存器名)中。

     使用格式  R

     功能:寄存器R的内容即为操作数(R为任意寄存器,个别指令的限制除外)。

              注意:在寄存器寻址方式中,所用寄存器的位数决定了指令操作数 的类型。例如,采用32位寄存器表示操作数是双字节类型;采用16位寄存器表示操作数是字类型。。

        由于寄存器是CPU内的存储器,因此,对于那些经常存取的操作数采用寄存器寻址的方式可以提高工作效率。

二,寄存器间接寻址

         在寄存器间接寻址方式中,操作数存放在主存储器中,而操作数的偏移地址存EA在指令指明的寄存器中,即寄存器的内容为操作数的偏移地址EA。

        使用格式 [R]

        功能  :寄存器R的内容为操作数的偏移地址EA。

        注意:在8086中,R可以是8个32位的通用寄存器中的任何一个,也可以是4个16位通用寄存器中的一个。但是不能用8位的通用寄存器。

        这种寻址方式在未指明操作数所在的段时,如果R选用的是BP,EBP,ESP,则系统默认的操作数在堆栈段中,如果选用其他32位或16位寄存器,则系统均默认操作数在DS指示的段中。

三,变址寻址

         变址寻址的方式的操作数存放在主存储器中,其偏移地址EA是指令中指定寄存器的内容乘以比例因子后与给出的位移量之和。

         使用格式  [R*F+V]   ,[R*F]+V,   V[R*F]

         功能  :寄存器R的内容乘以指定的比例因子F后加上给定的位移量V作为操作数的偏移地址。

         其中,寄存器R作为编制寄存器使用。当R为16位寄存器或ESP是,F只能为1并省略不写。

          位移量是不超过16位(当R为16位寄存器时),或不超过32位寄存器(当R为32位寄存器时)的二进制补码表示的有符号数,也可以是合乎语法规则的数值表达式,变量或者是标号名。当V中存在变量或标号名时,以其偏移地址参加运算。当V值超过了16位或者是32位的所能表示的范围时,汇编程序会做阶段处理。

 四,基址加变址寻址

       这种寻址方式的操作数存放在存储器中,其偏移地址EA是指令中指定的基址寄存器的内容,变址寄存器的内容乘以比例因子,位移量V三项相加之和。

       使用格式  [VR+IR*F+V]  ,  V[BR][IR*F]    ,V[BR+IR*F]

       功能:  将变址寄存器IR的内容乘以比例因子F,与基址寄存器BR的内容和位移量相加,作为操作数的偏移地址EA。

五,立即寻址

     立即寻址方式所提供的操作数是紧跟在指令操作码后面的一个采用8位,16位,32位的二进制补码表示的有符号数,构成了指令的一部分,位于代码段中。也就是说,操作数的存放地址就是指令操作码的下一单元,计算PA时使用的段寄存器CS,而EA的值来自指令指示器Ip/EIP中的内容。

     使用格式  n

     功能 :指定指令最后一部分单元中的内容为操作数。

     其中,n也称为立即操作数,占用的字节数由指令指定的操作数类型确定。在指令语句中,立即数n只能是常数或结果为确定值的表达式,且只能做源操作数。

     立即寻址主要用来给寄存器或存储器赋初值,也可以与寄存器操作数或存储器操作数进行算术逻辑运算。

六,直接寻址

        在直接寻址中,操作数存放在主存储器中。操作数的偏移地址EA紧跟在指令操作码后面,构成了指令的一部分,通过指令指示器IP/EIP获得。

       使用格式:  段寄存器名:[n]    或    变量   或      变量+常量

       功能:  指定操作数的下一个字或双字单元中的内容为操作数的偏移地址EA。

 

 

 

 

  

 

目录
相关文章
|
3月前
汇编指令学习(寻址方式)
汇编指令学习(寻址方式)
20 0
|
3月前
|
存储 程序员
【汇编】内存的读写与地址空间、寄存器及数据存储
【汇编】内存的读写与地址空间、寄存器及数据存储
153 1
【汇编】内存的读写与地址空间、寄存器及数据存储
|
4月前
|
存储 Linux 程序员
x86的内存寻址方式
在16位的8086时代,CPU为了能寻址超过16位地址能表示的最大空间(因为 8086 的地址线 20 位而数据线 16 位),引入了段寄存器。通过将内存空间划分为若干个段(段寄存器像 ds、cs、ss 这些寄存器用于存放段基址),然后采用段基地址+段内偏移的方式访问内存,这样能访问1MB的内存空间了。
|
6月前
|
存储
寄存器寻址和寄存器间接寻址的区别
寄存器寻址和寄存器间接寻址的区别
165 0
|
10月前
|
存储
存储器-虚拟内存
存储器-虚拟内存
52 0
|
10月前
|
缓存
CPU、处理器、内存、外存、寄存器、缓存的区别
CPU、处理器、内存、外存、寄存器、缓存的区别
1264 0
|
存储 芯片 块存储
3.2主存储器的基本组成
3.2主存储器的基本组成
99 0
3.2主存储器的基本组成
|
存储
指令系统——指令寻址
指令系统——指令寻址
133 0
指令系统——指令寻址
|
存储
指令系统——数据寻址
指令系统——数据寻址
151 0
指令系统——数据寻址
|
存储 安全 编译器
CPU和寄存器详解
CPU和寄存器详解
658 0
CPU和寄存器详解