
《寻址方式》PPT课件.ppt
28页第三章第三章 指令系统指令系统曲阜师范大学杏坛曲阜师范大学杏坛学院学院 3.2 8086/8088寻址方式寻址方式 寻寻址址方方式式就是指令中用于说明操作数所在地址的方法,或者说是为获取实际操作数地址而采取的方法8086/8088的基本寻址方式有六种 3.2.1 立即寻址立即寻址 操作数直接由指令提供的寻址方式称为立立即即寻寻址址方方式式在立即寻址方式中所提供的操作数直接包含在指令中它紧跟在操作码的后面,与操作码一起放在代码段区域中如图所示立即数:立即数:直接由指令提供的具体操作数称为立即数直接由指令提供的具体操作数称为立即数例如:例如:MOV AX,,3000H特点:特点:((1))立立即即数数可可以以是是8位位的的,,也也可可以以是是16位位的的若若是是16位位的的,,则则存存储储时时低低位位在在前,高位在后只能是整数,不能是小数、变量或其它数据类型前,高位在后只能是整数,不能是小数、变量或其它数据类型2))立立即即数数只只能能作作为为源源操操作作数数,,立立即即寻寻址址主主要要用用来来给给寄寄存存器器或或存存储储器器赋赋初初值 ((3)速度快(操作数直接由指令中获得,不需要运行总线周期))速度快(操作数直接由指令中获得,不需要运行总线周期)((4)立即数作为指令操作码的一部分与操作码一起放在代码段区域中。
立即数作为指令操作码的一部分与操作码一起放在代码段区域中3.2.1 立即寻址立即寻址【【例例3.1】】MOV AX,, 10执行后(执行后(AX))=??该例中源操作数为立即寻址方式,立即数为该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元存放在指令的下一单元图形表示:图形表示:执行:执行:10→AX执行后:(执行后:(AX))=000AH 操作数的有有效效地地址址EA直接由指指令令直直接接提提供供的寻址方式称为直直接接寻寻址址方方式式在直接寻址方式中操作数地址的16位偏移量直接包含在指令中它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量如图所示例如: MOV AX,DS:[2000H] 3.2.2 直接寻址直接寻址特点:(1)如果指令中没有指明操作数存放在哪一段,则系统默认为数据段如上例可写成:MOV AX,[2000H](2)操作数的有效地址与操作码—起存放在代码段区域,操作数一般在数据段区域中3)直接寻址是对存储器进行访问时可采用的最简单的形式这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。
4)操作数的实际地址为数据段寄存器DS左移4位加上操作数的有效地址(16位地址偏移量)16位地址偏移量5)如果要对除DS以外的其他段寄存器进行寻址,则在指令中必须指定段寄存器如:MOV AX,[2000H] ;数据段(可省略DS ) MOV BX,ES:[3000H] ;操作数在附加段ES (不能省略ES )(6)直接寻址的地址用“[ ]”括起来,以区别立即数3.2.2 直接寻址直接寻址【【例例5.2】】寄寄存存器器和和存存储储器器内内容容为为::((AX))=1212H,,BUF为为数数据据段段定定义义的的变变量,其偏移地址是量,其偏移地址是2000H,(,(DS))=3000H,(,(32000H))=4545H执行指令:执行指令:MOV AX ,,BUF执行后:(执行后:(AX))=?图形表示:图形表示:执行:(执行:(32000H))→AX执行后:(执行后:(AX))=4545H 操作数直接存放在CPU的内部寄存器中(如:寄存器AX、BX、CX、DX等)的寻址方式称为寄存器寻址方式例如:MOV DS,AX MOV AL,BH特点:特点:(1)操作数放在CPU的通用寄存器中。
16位:AX、BX、CX、DX、SI、DI、SP、IP 8位 :AH、AL、BH、BL、CH、CL、DH、DL 通常放在AX、 AH、AL中,因为AX是累加器,结果一般放在AX中,这样指令会更短些2)采用寄存器寻址时,操作就在CPU内部进行,不需要使用总线周期,速度快3.2.3 寄存器寻址寄存器寻址 (3)一条指令中,既可以对源操作数采用寄存器寻址,也可以对目的操作数采用寄存器寻址,也可二者均采用寄存器寻址例例3.3】】下列程序执行后,(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BX 该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式第三条指令中,AX为目的操作数地址,BX为源操作数地址源地址和目的地址皆为寄存器寻址方式3.2.3 寄存器寻址寄存器寻址3.2.4 寄存器间接寻址寄存器间接寻址 操作数是在存储器中,但是,操作数的有效地址EA(偏移量)在以下四个寄存器SI、DI、BP、BX之一中。
可以分成两种情况:(1)以SI、DI、BX间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)*16加上SI、DI、BX中的16位偏移量,为操作数的地址, 例如: MOV AX, [SI] ,操作数地址是:(DS)╳ ╳ 16 +(SI)(2)以寄存器BP间接寻址,则操作数在堆栈段区域中即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS) ╳ ╳ 16 +(BP) 若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址例如: MOV AX,DS:[BP] 操作数地址是: (DS) ╳ ╳ 16 +(BP)特点:特点:(1)指令中的基址寄存器是BX、SI、DI,则默认为操作数在数据段DS中,指令中的基址寄存器若是BP,则默认为操作数在堆栈段SS中2)如果要对其他段寄存器所指出的区域进行寻址,则在指令中应指出指定超越段前缀3)寄存器间接寻址方式适用于表格处理执行完一条指令后,只需修改寄存器的内容(+1、+2、……)就可取出表格中的相应项。
4)间址的寄存器用“[ ]”括起来,以区别寄存器寻址例例3.4】】 MOV AX,[BX] 若(DS)=2000H,(BX)=1000H,物理地址=20000H+1000H=21000H指令执行前,(AX)=2030H,(21000H)=0A0H,(21001H)=50H;指令执行后,(AX)=50A0H,(21000H)=0A0H,(21001H)=50H指令执行情况如下:若(若(DS)=)=2000H,(,(BX)=)=1000H,物理地址=,物理地址=20000H++1000H==21000H指令执行前(指令执行前(AX)=)=2030H,(,(21000H)=)=0A0H,(,(21001H)=)=50H;;指令执行后(指令执行后(AX)=)=50A0H,(,(21000H)=)=0A0H,(,(21001H)=)=50H指令执行情况如下:指令执行情况如下:AX AH AL 数据段 物理地址 A0H 21000H 50H 21001H 56H 21002H 3.2.5 寄存器相对寻址(直接变址寻址、变址寻址)寄存器相对寻址(直接变址寻址、变址寻址) 寄寄存存器器相相对对寻寻址址方方式式是是在在指指令令中中给给定定一一个个基基址址寄寄存存器器((或或变变址址寄寄存存器器))名名和和一一个个8 8位位或或1616位位的的相相对对偏偏移移量量,,两两者者之之和和作作为为操操作作数数的的有有效效地地址址。
对对BXBX、、SISI、、DIDI这这三三个个间间址址寄寄存存器器,,指指示示的的是是数数据据段段中中的的数数据据,,而而用用BPBP作作间间址址寄寄存存器器,,则则指指示示的的是是堆栈段堆栈段中的数据中的数据 汇汇编编格格式式::X[R]X[R]((X X表表示示位位移移量量,,是是8 8位位或或1616位位二二进进制制补补码码表表示示的的有有符符号号数数,, R R表表示寄存器)示寄存器)功能:操作数存放在存储器,寄存器功能:操作数存放在存储器,寄存器R R的内容加位移量的内容加位移量X X为操作数的偏移地址为操作数的偏移地址EAEA有效地址有效地址EA计算方法如下:计算方法如下:特点:特点:(1)SI、DI、BX默认的段寄存器为DS,BP默认的段寄存器为SS2)可以使用段寄存器超越前缀来寻址其他段3)寄存器相对寻址方式适用于表格处理表首的地址可设置为偏移量指针,利用修改基址或变址寄存器的内容来获得表格中的内容例例5.5】】设执行前:设执行前: ((AX))=0040H,(,(BX))=0030H,(,(DS))=2000H,,((20036H))=0050H 执行指令:执行指令:ADD 6[BX],,AX执行后:(执行后:(AX))=?,(,(BX))=?,(,(DS))=?,(,(20036H))=?图形表示如下:图形表示如下:执行前:执行前: ((AX))=0040H,((BX))=0030H,((DS))=2000H,((20036H))=0050H 执行指令:执行指令:ADD 6[BX],,AX执行:执行: ((20036H))+((AX)) →20036H执行后:(执行后:(AX))=0040H,((BX))=0030H,((DS))=2000H,((20036H))=0090H。
图形表示如下:图形表示如下: 把BX和BP看成是基址寄存器,把SI、DI看成是变址寄存器,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容作为操作数的偏移地址但指令中不能同时出现两个基址寄存器或两个变址寄存器操作数在存储器中,其有效地址有效地址EA由(基址寄存器)+(变址寄存器)形成特点:特点:(1)基址寄存器为BX时,默认为数据段DS;基址寄存器为BP时,默认为堆栈段SS;变址寄存器为SI、DI2)可以使用段寄存器超越前缀来寻址其他段3)基址变址寻址方式适用于数组或表格处理首地址可设置在基址寄存器中,变址寄存器用于访问数组中的元素或表格中的内容基址寄存器和变址寄存器均可以修改,非常灵活3.2.6 基址变址寻址基址变址寻址操作数的有效地址操作数的有效地址EA计算方法如下:计算方法如下:【【例例5.6】】 MOV AL,,[BX++SI]((MOV AL,,[BX][SI]))若指令执行前,(若指令执行前,(DS)=)=1000H,(,(BX)=)=0010H,, ((SI)=)=0002H,(,(10012H)=)=45H则则 有效地址有效地址 EA=(=(BX)+()+(SI)=)=0012H,, 实际地址实际地址 PA=(=(DS))×10H++EA==10012H指令执行后(指令执行后(AL)=)=45H。
把BX和BP看成是基址寄存器,把SI、DI看成是变址寄存器,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,如图所示 3.2.7 相对基址变址寻址相对基址变址寻址 操作数在存储器中,其有效地址EA由(基址寄存器)+(变址寄存器)+相对偏移量形成特点:特点:同基址变址寻址方式,比基址变址寻址方式更灵活 表表3-1 段寄存器使用的基本约定段寄存器使用的基本约定默认段寄存器默认段寄存器默认段寄存器默认段寄存器可指定段寄存器可指定段寄存器段内偏移地址来源段内偏移地址来源取指令码取指令码CS无无IP堆栈操作堆栈操作SS无无SP串操作源地址码串操作源地址码DSCS ES SSSI串操作目的地址码串操作目的地址码ES无无DIBP作基址寄存器作基址寄存器SSCS DS ES根据寻址方式求解一般数据存取一般数据存取DSCS SS ES根据寻址方式求解3.2.8 I/O端口端口寻址址 8086系统的I/O端口采用独立编址方式,有专门的输入输出指令(IN/OUT)可访问64K个字节端口或32个字端口,其寻址方式有直接端口寻址和间接端口寻址两种:l直接端口寻址 :指令中直接给出要访问的端口地址。
例如:IN AL,20H IN AX,30H注:访问的端口数为:0~255,并且访问的端口地址采用两位的16进制数表示l间接端口寻址:访问端口数超过256个,采用的端口间接寻址,I/O端口的地址先送入到寄存器DX中,用DX作为间接寻址的寄存器例如:MOV DX, 240H OUT DX, AL注:访问端口数0~65535作业:作业:1.请指出下列指令源操作数、目的操作数各是什么寻址方式? (1)MOV AX,0ABH (2)MOVAX,[100H] (3)MOVAX,VAL (4)MOVBX,[SI] (5)MOVAL,VAL[BX] (6)MOVCL,[BX][SI] (7)MOVVAL[SI],BX (8)MOV[BP][SI],100选择题1、某单元在数据段中,已知DS=1000H,偏移地址为1200H,则它的物理地址为_________ (A)10000H (B)11200H (C)12100H (D)13000H2、若AL=3BH,AH=7DH,则AL和AH中的内容相加后,标志CF、SF和OF的状态分别是________。
(A)0、1、1 (B)1、1、1 (C)0、0、0 (D)1、1、03、指令ADD CX,55H[SI]的源操作数的寻址方式是_________ (A)寄存器寻址 (B) 直接寻址 (C)寄存器间接寻址 (D) 寄存器相对寻址选择题4、计算机能直接执行的语言是_________ (A) 机器语言 (B) 汇编语言 (C) 高级语言 (D) 程序设计语言5、设AL=7FH,要使AL=80H,应使用下列哪一条指令 _______ (A)AND AL,80H (B) OR AL,80H (C) XOR AL,80H (D) NOT AL6、指令ADD CX,55H[BP]的源操作数的寻址方式是_________ (A)寄存器寻址 (B) 直接寻址 (C)寄存器间接寻址 (D) 寄存器相对寻址填空填空1.指出下列每条指令中源操作数的寻址方式: MOV AX,[4000H]:__________________ MOV AX,[BX+DI]:__________________ MOV AX,[BP+5000H]:_______________ 2.指令 LOOPZ/LOOPE是______且______发生循环的指令。
3.若一个数据块在内存中的起始地址为80A0H:DFF6H,则这个数据块的起始物理地址为____________填空填空题4. 若CF=1,AL=10110110,则执行指令RCR AL,1后,AL=____,CF=____,OF=____5. 设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H执行指令PUSH AX后,(SP)=____ 若再执行指令:PUSH BX POP AX后: (SP)=____,(AX)=____,(BX)=____改改错题 找出下列指令的错误之处,并加以改正找出下列指令的错误之处,并加以改正(1)PUSH DL (2)IN AX,[3FH] (3)POP [AX](4)SHL BX,5(5)XCHG DX,0FFFH程序分析程序分析1.程序段如下:CLCMOV AL,6MOV BL,9ADD AL,BLMOV BL,ALDAA执行上面程序段后,AL= ,AF= ,BL= ______ 程序分析程序分析2. 下列程序段执行后,DX、AX的内容是什么?MOV DX,0EFADHMOV AX,1234HMOV CL,4SHL DX,CLMOV BL,AHSHL AX,CL SHR BL,CLOR DL,BL则:AX= DX=________ 。
