微型计算机原理及应用学习笔记 8086指令的寻址方

发布日期:2018-05-23 编辑整理:山东自考网 【字体: 】  【加入自考交流群】

所谓指令的寻址方式是指在指令中操作数的表示方式。由于程序编写上的需要,大多
数情况下,指令中并不直接给出操作数的数值,而是给出操作数存放的地址或存放的存储
单元的地址,即操作数的地址。同时,在许多情况下,操作数的地址也不直接给出,而是
给出计算操作数地址的方法。计算机执行程序时,根据指令给出的寻址方式,计算出操作
数的地址,然后从该地址中取出操作数进行指定的操作,或者把操作结果送入某一操作数
地址中去。一般说来,计算机的寻址方式越丰富,指令系统的功能就越强,工作的灵活性
也越大。
    8086的寻址方式有:立即寻址、寄存器寻址、存储器寻址、串操作寻址、外设I/O
端口寻址以及程序转移操作寻址。其中变化最多的是存储器寻址,这种寻址方式又可分
为:直接寻址、寄存器间接寻址、基址寻址、变址寻址以及基址变址寻址。
    注意:根据寻址方式计算而得的地址只是有效地址EA—段内偏移地址,这还需与所在段的段基值组合才能形成20位的物理地址。
    一、立即寻址(Immediate Addressing)
    立即寻址的指令直接给出操作数的数值,即指令机器码的最后1个或2个字节就是操作数——立即数。立即数只能作为源操作数,在汇编码指令中,它可以用二进制数、八进制数、十进制数和十六进制数表示。由于立即数是直接从指令中取得的,所以取数速度较快,这种寻址方式常用来给寄存器或存储器赋初值。
以立即寻址方式表示的加法指令ADD AX,3064H的操作过程如图3-2所示。

图3-2  立即寻址
 
  二、寄存器寻址(Register Addressing)
  寄存器寻址的指令,操作数在寄存器中,亦即寄存器的内容就是操作数的数值。在汇编码指令中,操作数用寄存器的符号来表示。例如,INC AX ,其功能为 AX+1 → AX。
  这类寻址方式的指令,其机器码字节最短,因为8 个通用寄存器只要用3 位代码即可区分。另外,寄存器是在微处理器芯片内部进行,不必执行访问内存的总线周期,因为其执行速度最快。
8086的寄存器寻址中,可用的寄存器有通用寄存器和段寄存器,寄存器可作为源寄存器或/与目的寄存器。例如,MOV DS,AX。
 
  三、存储器寻址(Memory Addressing)
   存储器寻址的指令,其操作数在存储器中。在指令操作中,存储器操作数出入微处理器都需经过总线,当EU需读或写一个存储器操作数时,必须将一个“偏移量”(Offset  Address)传送给BIU,BIU经过地址运算后产生一个20位的物理地址,然后执行存取该操作数所需的总线周期。EU为一个存储器操作数而计算出来的偏移量称为操作数的有效地址EA,这是一个16位无符号数,表示该操作数所在存储单元与所在段起始地址之距离(以字节为单位)。
一条存储器寻址的指令能访问由基址寄存器内容或/与变址寄存界内容或/与DISP值组合而得的有效地址EA所决定的存储单元。其中DISP(Displacement)为位移量,是一个8位或16位数,DISP包含在指令中,根据程序中操作数名称(变量或标号)的位置推算而得,程序员可修改或规定此值。
  存储器操作数的寻址方式按其有效地址EA的形成方法不同可分为如下几种:
   1.直接寻址(Direct Addressing)
由指令直接给出操作数的偏移地址,它紧跟在指令操作码之后。例如INC BYTE PIR [04A3H]指令中存储器操作数的偏移地址为4AOH,其操作过程见图3-4所示。
             图3-4 直接寻址
    直接寻址指令的另一种表示形式为INC ADDR,指令中存储器操作数的地址用符号地址(变量,Variable ) ADDR表示。
  2.寄存器间接寻址(Register Indirect Addressing)
  存储器操作数的有效地址直接取自一个基址寄存器,例如INC BYTE PTR[BX],操作过程如图3-5所示。
              图3-5寄存器间接寻址
  3. 基址寻址(Based Addressing)
以基址寄存器BX和BPD的内容为基准地址,指令中再给出一个地址位移量D(D8或D16)组合而得到存储器操作数的有效地址。
汇编码指令中有效地址表示方法有如下几种:            
[BX(或BP)+D],其中D为常量,例如INC BYTE PTR (BP+4);
D[BX(或BP)],其中D为变量或常量,例如INC ADDR[BX]。
 当使用BP作基址寻址时,若无指定段替换,则内定在堆栈段内寻址;若D为常量,则以带符号的二进制数表示,可为8位或16位值,当D为8位值时有效地址计算中,位移量必须进行符号扩展。基址寻址的操作过程见图3-6所示。
                            图3-6基址寻址
  4,变址寻址(Indexed Addressing)
    指令中给出一个位移量D作为基准地址,再同变址寄存器SI(或DI)的内容相加作为存储器操作数的有效地址。
    汇编码指令中有效地址可表示为:
[SI(或DI)+D],以及D[SI(或DI)]两种表示,式中D的含义同基址寻址。变址寻址的操作过程如图3-7所示。
                             图3-7变址寻址
基址寻址和变址寻址又称为“寄存器相对寻址”。
 
  5.基址变址寻址(Based Indexed Addressing)
    基址寄存器BX(或BP)中存放基准地址,变址寄存器SI(或DI)存放变址值,指令中再给出一个位移量D,三者相加构成存储器操作数的有效地址。其中D可为8位或16位的数,可以无此项。若为8位数,在计算中应进行符号扩展。
汇编码指令中有效地址可表示为:[BX(或BP)+SI(或D1)+D],例如INC BYTE PTR[BX+DI+4],以及D[BX(或BP)+SI(或DI1)],例如INC ADDR[BX+SI]。
采用BP作为基址时,规定在当前堆栈内寻址。含有D项的基址变址方式又称为“相对基址变址寻址方式”。
 
    四、程序转移寻址
    指令在顺序执行时,下一条指令的偏移地址总是由指令指针IP自动递增而得。当程序在本段内发生转移时,需要给出即将转移去执行的那条指令的偏移地址,并用它去取代IP的原有内容。如果即将转去执行的指令与原来执行的指令不在同一段中,则还需用新的代码段的段基值去取代CS中原有的内容。此时,操作数作为转移地址使用,分别送到IP和CS。
  程序转移寻址方式用于条件转移指令、无条件转移指令、循环指令和转子指令(调用指令)。
  程序转移寻址方式按目的地址的形成方式有如下几种:
    1.相对寻址
以IP的内容为基准地址,加上紧跟指令操作码后的相对位移量D,得到转移地址的偏移地址,如图3-8所示。
                 图3-8相对寻址
    由图3—8可见,转移地址的偏移地址为IP+D,D是带符号的二进制数。当D为8位数时,转移范围为 -128~+127;当D为l6位数时,转移范围为—32768~+32767(注意:不能越段)。例如,JE  A   --- 条件转移指令; 
          JMP ADDR -- 无条件转移指令。
指令中的A、ADDR为转移地址的标号。 这种寻址方式又称为“段内直接转移”。
2. 段内寄存器寻址
  以寄存器的内容为转移地址的偏移地址。  例如,JMP BX, BX中的内容即偏移地址。
  3.段内间接转移寻址
    包括前述的存储器操作数中的寄存器间接寻址、变址寻址、基址寻址以及基址变址寻
址等几种寻址方式,这些寻址方式求得之操作数即为转移地址的偏移地址。
例如:JMP WORD PTR [BX]
      JMP VAR[BX][SI],以及JMP WORD PTR[EA](EA为有效地址)指令中[BX]及VAR[BX][SI]都表示段内间接转移地址的偏移地址。
4.段间直接转移寻址
程序从一个代码段转移到另一个代码段称为“段间转移”,实现段间转移不仅要求改变IP中的指令偏移地址,还要改变CS中的段基值。这种寻址方式的转移指令中带有两个16位地址,第一个地址为转移地址的偏移地址;第二个地址为转移地址的段基值,其操作过程见图3-9。
                                 图3-9段间直接寻址
 
    5.段间间接转移寻址
这种寻址方式的转移指令中,要实现段间转移所需的两个16位地址,可以用任何数据存储器的间接寻址方式求得,其操作过程见图3-10。
                        图3-10  段间间接转移寻址
    汇编码指令形式为:JMP DWORD PTR [EA]

本文标签:山东自考 工学类 微型计算机原理及应用学习笔记 8086指令的寻址方

转载请注明:文章转载自(http://www.sdzk.sd.cn

本文地址:http://www.sdzk.sd.cn/zl_gxl/8713.html







《山东自考网》免责声明:

1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。

2、本站内容信息均来源网络收集整理,标注来源为其它媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系,本站将第一时间尽快处理删除。联系邮箱:812379481@qq.com。



山东自考-便捷服务