1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五讲,8086/8088寻址方式,第1页,什么叫寻址方式?,寻找指令中所需操作数各种方法叫寻址方式。,8086/8088中指令中所需操作数来自:,通用存放器,段存放器,指令代码,存放单元,输入/输出端口,第2页,8086寻址方式,数据寻址方式,转移地址寻址方式,第3页,数据寻址方式,马上(数)寻址,存放器寻址,直接寻址,存放器间接寻址,存放器相对寻址(基址寻址和变址寻址),基址加变址寻址(基址变址,(相对),寻址),隐含寻址,第4页,马上(数)寻址,指令中所需操作数,直接包含在指令代码中。,比如:指令,M
2、OV AX,256,源操作数 256 直接出现在指令中,这么源操作数叫做马上数。因为存取这类操作数完全在CPU内部进行,不需要执行总线周期,所以执行速度快。,注意:马上数不能是,目标操作数,,只能是,源操作数,。,第5页,存放器寻址,指令中所需操作数在CPU某存放器(通用存放器和段存放器)中,和马上寻址一样,取操作数完全在CPU内部进行,不需要执行总线周期,所以执行速度快。,比如:指令,MOV AX,BX,源操作数保留在存放器BX中,这种情况叫做存放器寻址,第6页,存放器寻址,接下来要讨论寻址方式中操作数要从存放器取得,我们称为存放器寻址。,这类情形最为复杂,在讨论详细寻址方式之前,我们需要讨
3、论以下,三个问题,:,缺省段存放器,段超越问题,不一样存放器寻址方式,第7页,缺省段存放器,首先我们要明确一下使用哪个段存放器问题。,我们已经知道,8086/8088采取,段:偏移量,逻辑地址表示方式。,通常在指令中出现地址均为,偏移地址,,操作数地址也不例外,那么物理地址终究是多少呢?显然我们还需要知道段起始地址。,第8页,缺省段存放器,普通情况下,指令中操作数段起始地址不需尤其指出,因为8086/8088要求了缺省段存放器,段起始地址就在其中。,而缺省段存放器终究是哪一个,取决于指令,寻址方式及包括存放器。,第9页,段超越问题,如前所述,缺省段存放器取决于指令,寻址方式和包括存放器,但有时
4、使用缺省段存放器并不适当。,多数情况下,8086/8088允许程序自行选择段存放器,这时需要,显式指定,,这种情况叫做,段超越,。,段超越格式为,段存放器:,操作数(位于需要段超越指令操作数之前,所以也叫段超越前缀。),第10页,段超越问题,例:指令,Mov AX,DS:,BP,(,BP,缺省是使用SS作为段存放器,但上面指令显式地指明DS作为段存放器。),第11页,不一样存放器寻址方式,存放器寻址方式,又能够分为三种:,不包括存放器:,直接寻址,包括一个存放器:,存放器间接寻址和存放器相对寻址,包括两个存放器:,基址变址寻址(和基址变址相对寻址),能够参加存放器寻址存放器只有,4个,,分别是
5、BX,和,BP,,称为基址存放器,SI,和,DI,,称为变址存放器,第12页,直接寻址,这是从存放器中寻找操作数最简单一个寻址方式,,有效地址EA,直接由位移量给出。,在源程序中,直接寻址方式能够用符号或常数(要加方括号)来表示。,比如:,1.MOV AX,1234H,2.MOV AX,VAR,缺省段存放器为 DS;,这里VAR为符号地址,能够了解为变量,第13页,存放器间接寻址,操作数有效地址EA直接从,基址存放器,(,BX,或,BP,)或,变址存放器,(,SI,或,DI,)中取得。这种寻址方式实际上是把偏移量事先存放在一个存放器(BX,BP,SI或DI)中,所以这个存放器就如同一个地址
6、指针。,假如存放器内容在程序运行期间进行修改,那么使用这种寻址方式同一指令能够对不一样存放单元进行操作。,第14页,存放器间接寻址,比如:1.,MOV AX,BX,2.,MOV AX,SI,3.,MOV AX,BP,注意:,用BX,SI,DI 间接寻址时,缺省段存放器为,DS,,用BP间接寻址时,缺省段存放器为,SS,。允许段超越。,(要切记),第15页,存放器相对寻址(基址寻址和变址寻址),操作数有效地址EA是基址或变址存放器(BX,BP,SI或DI)与指令中给出位移量(8位或16位)之和。,使用,BX,或,BP,叫,基址寻址,,使用,SI,或,DI,叫,变址寻址,。,当使用,BP,时,隐含
7、使用段存放器,SS,;,使用,其它三个存放器,时,隐含使用段存放器都是,DS,。,第16页,存放器相对寻址(基址寻址和变址寻址),只包括一个存放器,带8位或16位位移量,也允许段超越。例以下面2条指令,MOV AX,DI+5,MOV AX,05H,DI,这里位移量为 5,第17页,基址变址寻址,操作数有效地址EA是一个基址存放器(BX或BP)与一个变址存放器(SI或DI)内容之和。,基址存放器为BX时,缺省段存放器为DS,基址存放器为BP时缺省段存放器为SS。也允许段超越。例:1,MOV AX,BXDI,2,MOV AX,BP+SI,基址存放器BX,BP只能选取其中1个,变址存放器SI和DI中
8、也只能选取其中一个。,第18页,基址变址相对寻址,操作数有效地址EA是三个地址分量之和:一个基址存放器(BX或BP),一个变址存放器(SI或DI),指令中给出位移量。,缺省段存放器以及段超越要求与基址变址寻址相同。例:1,MOV AX,5BXDI,2,MOV AX,BPSI+5,第19页,隐含寻址,有些指令没有显式地给出操作数,但指令隐含使用某一个存放器中内容,这种寻址方式叫做隐含寻址。,如:指令,MULCL,这条乘法指令隐含使用了存放器AX,但在指令中并没有明确指出。,第20页,转移地址寻址方式,我们已经知道,在计算机中,程序计数器PC在程序运行时会不停地自动加1,所以内存中程序,多数情况下
9、会按照指令在内存中位置,从低地址到高地址,逐条次序执行。,但循环、分支、子程序等结构在计算机程序中是不可缺乏,使用这些结构势必要破坏程序自然执行次序,于是产生一个问题:怎样决定下一条指令位置?,第21页,转移地址寻址方式,这就需要,转移地址,。,所以我们要了解与转移地址相关寻址方式。,8086 与转移相关指令有没有条件转移(jmp),过程调用(call),循环(loop),条件转移(Jxx)和中止(int)。后三种指令寻址方式有严格要求,比较简单。前两种指令寻址方式比较丰富。,第22页,转移地址寻址方式,CPU在程序运行过程中,利用内部存放器记载下一条指令地址。8086采取,段-偏移,地址转
10、换方式,所以用代码段存放器,CS,和指令指针存放器,IP,保留即将执行指令地址。其中CS保留段地址,IP保留段内偏移地址。,在8086中,下一条指令地址由,CS:IP,决定。,第23页,转移地址寻址方式,次序执行情形,IP内容随指令执行自动取得增量(当前机器指令占据字节数)。CS内容不发生改变。,而执行一条转移指令,意味着需要修改下一条指令地址,也就是,要依据转移指令要求,修改CS和IP内容。,第24页,转移地址寻址方式,段内转移,转移目标地址在当前代码段内,CS内容无须修改,需要将IP内容修改为目标地址。,段间转移,转移目标地址未必在本段,CS和IP内容都需要修改。,第25页,段内转移,又分
11、为,段内直接,转移与,段内间接转移。,段内直接,转移,转移目标地址能够直接从指令中求得,相当于与数据相关寻址方式中马上寻址。,段内间接转移,转移目标地址保留在存放器或存放器中,,从指令中能够得到存放器名或保留目标地址存放器地址。,第26页,段内,直接转移,在汇编语言源程序中,直接转移指令是在jmp后写跳转目标标号。汇编程序自动计算该标号代表地址,将汇编跳转指令转换成对应机器指令.段内直接转移又分为直接短转移和直靠近转移,取决于目标地址与IP内容(下一条指令地址)之差(称为位移量,位移量将出现在机器指令中)。,位移量为8位时,形成短转移,不然,位移量为16位,形成近转移。,第27页,段内直接短转
12、移,例1:段内直接短转移,JMP SHORT PTR LBL,LBL为标号,位移量8位,指令执行后,(IP)变为LBL,第28页,段内直靠近转移,例2:段内直靠近转移,JMP NEAR PTR LBL1,LBL1为标号,位移量16位,指令执行后,(IP)变为LBL1,第29页,段内,间接转移,跳转目标地址能够在存放器或存放器中。,假如是在存放器中,则指令格式为,JMP 存放器名,能够取八个通用16位存放器中任何一个,其内容是转移目标段内偏移地址,这种方式与数据寻址中存放器寻址对应。,第30页,段内,间接转移,例3:段内间接转移,存放器寻址,JMP AX JMP SP,指令执行结果,(IP)取得
13、指定存放器内容,第31页,段内,间接转移,假如是在存放器中,则指令格式为,JMP WORD PTR 存放器地址,与数据寻址中操作数在存放器中寻址方式对应,能够采取五种寻址方式任何一个。,第32页,段内,间接转移,例4:段内间接寻址,存放器寻址,JMP WORD PTR TBL JMP WORD PTR BX+TBL JMP WORD PTR BP+SI+TBL,指令执行结果,(IP)取得指定存放单元内容,第33页,段间转移,段间转移分为段间直接转移和段间间接转移。,段间直接转移汇编指令普通要求在指令中写明,远跳转,,指令格式普通是:,JMP FAR PTR 标号,执行这么指令,(IP)将取得标
14、号段内偏移地址,而(CS)将取得标号所在段段地址。汇编程序自动将这些地址填入机器指令。,第34页,段间转移,例5 段间直接转移,JMP FAR PTR LBL,其中FAR PTR 是操作符,表示直接远转移,指令执行操作是把 LBL 所在段地址送CS,LBL偏移地址送IP。,第35页,段间转移,段间间接转移,只能是存放器寻址,存放器中连续两个字,高位字存放新代码段段址,低位字存放指令指针。指令格式普通是:,JMP DWORD PTR 存放器地址,存放器地址能够采取五种存放器寻址中任何一个。,第36页,段间转移,例6 段间间接转移,只能用存放器寻址,JMP DWORD PTR TBL JMP DW
15、ORD PTR TBL+BP JMP DWORD PTR TBL+BX+DI,指令执行操作是,指定存放单元(双字)高位字送CS,低位字送IP。,第37页,习题,一、试分别说明以下各指令中源操作数和目标操作数使用寻址方式:,AND AX,0FFH,AND BL,0FFH,MOV DS,AX,CMP SI,CX,MOV DS:0FFH,CL,SUB BPSI,AH,ADC AX,0ABHBX,OR DX,-35BXDI,PUSH DS,第38页,二、已知SS=H,DS=3000H,BP=0001H,BX=0002H,SI=0003H,DI=0004H,相关存放单元情况如右图所表示,问以下各指令执行后,AL值分别是多少?,1、Mov AL,BH,2、Mov AL,BL,3、Mov AL,02H,4、Mov AL,02H,5、Mov AL,BP,6、Mov AL,02HBX,7、Mov AL,BPDI,8、Mov AL,02HBXSI,习题,30H,1AH,78H,56H,04H,20H,10H,4BH,59H,3DH,0,H,30000,H,2EH,35H,0FFH,00H,6,H,30007,H,物理地址,71H,第39页,






