微型计算机原理及应用学习笔记 8086指令的寻址方
编辑整理:深圳自考网 发布时间:2018-05-23 12:28:38阅读数:
所谓指令的寻址方式是指在指令中操作数的表示方式。由于程序编写上的需要,大多
数情况下,指令中并不直接给出操作数的数值,而是给出操作数存放的地址或存放的存储
单元的地址,即操作数的地址。同时,在许多情况下,操作数的地址也不直接给出,而是
给出计算操作数地址的方法。计算机执行程序时,根据指令给出的寻址方式,计算出操作
数的地址,然后从该地址中取出操作数进行指定的操作,或者把操作结果送入某一操作数
地址中去。一般说来,计算机的寻址方式越丰富,指令系统的功能就越强,工作的灵活性
也越大。
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.zikaosz.com)
《深圳自考网》免责声明:
1、由于考试政策等各方面情况的调整与变化,本网提供的考试信息仅供参考,最终考试信息请以省考试院及院校官方发布的信息为准。
2、本站内容部分信息均来源网络收集整理或来源出处标注为其它媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:812379481@qq.com