您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 8086的寻址方式和指令系统
1第三章8086的寻址方式和指令系统3.18086指令格式和寻址方式3.38086指令系统教学重点23.18086指令格式和寻址方式3.1.1、指令格式3.1.2、寻址方式33.1.1指令格式操作码操作数……,操作数标号:;注释标号:是该指令所在地址的名字,其后必须跟“:”,可缺省操作码:指示计算机执行什么操作指令有单操作数、双操作数和无操作数之分源操作数/目的操作数加注释使程序容易读懂,前加“;”43.1.2寻址方式一寻址方式和有效地址的概念二各种寻址方式三存储器寻址时的约定5一寻址方式和有效地址的概念寻址方式就是寻找指令中的操作数的方式。8086/8088指令中的操作数的3种存放位置:操作数就在指令中,立即数,立即寻址。某寄存器中,寄存器寻址。内存的数据区中,存储器寻址。6有效地址(EA):存储器寻址时,指令的操作数部给出的地址是段内偏移地址,也称有效地址。EA包括:基址寄存器内容;变址寄存器内容;位移量;比例因子计算方法:EA=[基址寄存器]+([变址寄存器]*比例因子)+位移量BX,BPSI,DI10,8,16例:(BX)=2000H,(SI)=1000H,偏移量=0250H,则EA=2000H+1000H+0250H=3250H7二各种寻址方式8086/8088的寻址方式有8种:1立即数寻址(Immediateaddressing)2寄存器寻址(Registeraddressing)3存储器寻址(Memoryaddressing)直接寻址(Directaddressing)寄存器间接寻址(RegisterIndirectaddressing)寄存器相对寻址(Registerrelativeaddressing)基址变址寻址(Basedindexedaddressing)相对基址变址寻址(Relativebasedindexedaddressing)81立即数寻址例如:MOVAX,1234H操作码…12H34H…Memory低高码段AXAHAL1234操作数就包含在指令中,作为指令的一部分,跟在操作码后。立即数可以是8位,也可以是16位。如是16位,按“高高低低”原则存放。主要用于赋初值。注:立即数不能作目的操作数。以A~F打头的数字,前面要加一个0,如MOVAX,0FF00H92寄存器寻址注意:源、目的操作数的长度一致操作数包含在某寄存器中,指令中指定寄存器名称。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。不需要访存来取得操作数,所以速度较快。例如:MOVSI,AXMOVAL,DH103直接寻址操作数EA段地址段寄存器存储器指令操作数在存储器中,指令中直接包含其有效地址EA。操作数一般在DS段中,若对其它段中的数据寻址,要在指令中加段前缀指出段寄存器名,这称为段超越。直接寻址的地址放在方括号内,在源程序中常用变量名表示。11例:(1)MOVAX,[2000H]将DS段中的2000H和2001H单元内容分别送AL和AH(2)MOVAX,ES:[2000H]将ES段中的2000H和2001H单元内容分别送AL和AH直接寻址中存储器操作数的有效地址也可用变量名的形式给出。例:VALUEDB12HMOVAL,[VALUE]或MOVAL,VALUE段超越12AXAHAL6789操作码…12H34H…M代码段……数据段67H89H51234500001234DS50000+51234例如:MOVAX,[1234H];(DS)=5000HMOVAX,ES:[1234H]134寄存器间接寻址操作数在存储器中,有效地址EA=[寄存器]。若以SI、DI、BX间接寻址,则默认DS的内容作为段地址。若以BP间接寻址,则默认SS的内容作为段地址。该寻址方式可用于表格处理,在处理完表中的一项后,修改指针寄存器的内容就可以处理表中的另一项。寄存器间接寻址时,寄存器名一定要放在方括号中。MOVAX,[SI];寄存器间接寻址MOVAX,SI;寄存器寻址14AXAHAL6789操作码……M代码段……数据段67H89H5123450000DS50000+512341234SI例如:MOVAX,[SI]假设:(DS)=5000H,(SI)=1234H155寄存器相对寻址操作数的有效地址EA=[基址或变址寄存器]+位移量基址寄存器为BP、BX,BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。变址寄存器为SI、DI,以DS作为默认段寄存器位移量在指令中给出,位移量可以是8位或16位的。书写时寄存器名要放在方括号中,位移可不写在方括号中。MOVAX,[BX+3]MOVAX,3[SI]16例如:MOVAX,[BP+1223H]假设:(SS)=5000H,(BP)=3678HAXAHAL55AA操作码…12H23H…M代码段……堆栈段55HAAH5489B50000…536781223SS50000+5489B3678BP122317例如:MOVAX,[SI+1223H]假设:(DS)=5000H,(SI)=3678HAXAHAL55AA操作码…12H23H…M代码段……数据段55HAAH5489B50000…536781223DS50000+5489B3678SI1223186基址变址寻址操作数的有效地址:EA=[基址寄存器]+[变址寄存器]一般以基址寄存器来决定默认寄存器。可以使用段超越。该寻址方式主要用于二维数组。用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素。下面两种表示方法是等价的:MOVAX,[BX+DI]MOVAX,[DI][BX]19例如:MOVAX,[BX+DI]假设:(DS)=5000H,(BX)=1223H,(DI)=54HAXAHAL55AA……M…数据段55HAAH5127750000…51223DS50000+512771223BX0054DI207相对基址变址寻址又叫带位移量的基址变址寻址:EA=[基址寄存器]+[变址寄存器]+位移量一般以基址寄存器来决定默认寄存器。该寻址方式也主要用于二位数组操作,位移量即为数组起始地址。下面四种表示方法是等价的:MOVAX,[BX+DI+1234H]MOVAX,1234H[BX+DI]MOVAX,1234H[DI][BX]MOVAX,1234H[BX][DI]21例如:MOVAX,[BX+DI-2]假设:(DS)=5000H,(BX)=1223H,(DI)=54HAXAHAL55AA操作码…FEH…M代码段……数据段55HAAH5127550000……DS50000+512751223BX0054DIFFFE5127722存储器寻址时的约定存储器操作类型默认段寄存器允许超越的段寄存器偏移地址寄存器取指令代码CS无IP堆栈操作SS无SP源串数据访问DSCS、ES、SSSI目的串数据访问ES无DI通用数据访问DSCS、ES、SS偏移地址以BP、SP间接寻址的指令SSCS、DS、ES偏移地址程序只能在CS段、堆栈操作数只能在SS段、目的串操作数只能在ES;其他操作虽然也有默认段,但允许段超越。231、给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1)立即寻址(2)直接寻址(3)使用BX的寄存器寻址(4)使用BX的间接寻址(5)使用BX的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址2、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?(1)MOVAX,0ABH(2)MOVAX,BX(3)MOVAX,[100H](4)MOVAX,VAL(5)MOVAX,[BX](6)MOVAX,ES:[BX](7)MOVAX,[BP](8)MOVAX,[SI](9)MOVAX,[BX+10](10)MOVAX,VAL[BX](11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]243.38086/8088指令系统3.3.1数据传送类指令3.3.2算术运算类指令3.3.3逻辑运算与移位指令3.3.4串操作指令3.3.5控制转移类指令3.3.6处理器控制类指令253.3.1数据传送类指令一、通用数据传送类指令二、地址传送指令三、标志位传送指令四、输入输出数据传送指令IN/OUT26一、通用数据传送类指令1.MOV传送指令2.堆栈操作指令PUSH/POP3.交换指令XCHG4.查表转换指令XLAT(或称换码指令)271.MOV指令指令格式:MOVDST,SRC功能:将源操作数SRC送至目的操作数DST。SRC和DST可以是字或字节,两者必须等长。源操作数可以是通用寄存器、段寄存器、存储器以及立即数;目的操作数可以是通用寄存器、段寄存器(CS除外)或存储器。28注意:立即数和段寄存器CS不能作为目标操作数;立即数不能直接传送到段寄存器;两个存储单元之间不能直接传送数据;两个段寄存器之间不能直接传送数据。通用寄存器AX,BX,CX,DXBP,SP,SI,DI段寄存器DS,ES,SS,CS存储器立即数MOV指令允许传送数据的途径29MOVAL,BL;通用寄存器之间传送字节数据MOVDS,AX;通用寄存器与段寄存器之间传送数据MOVAX,0FF3BH;立即数传送到通用寄存器MOVAL,[1000H];通用寄存器与存储器之间传送数据MOV[BP+DI],ES;段寄存器与存储器之间传送数据MOVAX,DATA_SEGMOVDS,AX段地址必须通过寄存器如AX寄存器送到DS寄存器。MOV指令举例30MOVAL,’E’把立即数(字符E的ASCII码)送到AL寄存器。MOVBX,OFFSETTABLE把TABLE的偏移地址(而非内容)送到BX寄存器。其中OFFSET为属性操作符,表示把后面符号地址的值(不是内容)作为操作数。MOVAX,Y[BP][SI]把地址为16*(SS)+(BP)+(SI)+位移量Y的存储单元的内容送给AX寄存器。31(1)OPR1与OPR2位数匹配;MOVAL,BXMOVAL,BL(2)立即数只能作源操作数,不能作目的操作数。MOV5H,ALMOVAL,5H(3)、不能直接在两个存储单元之间进行数据交换,必须用内部寄存器作为过渡传送数据。如:MOV[3000H],[2000H]MOVAL,[2000H]MOV[3000H],ALMOV[BX],[SI]MOVBX,SI练习32(4)不能用立即数直接对段寄存器赋值,必须用内部寄存器或存储单元作为过渡。也不允许在两段寄存器之间直接传送数据,但可以由段寄存器向内部寄存器或存储单元传送数据。MOVDS,2000HMOVDX,2000HMOVDS,DX(5)CS和IP不能作为目的操作数。(6)MOV指令不影响标志位。332.堆栈操作指令PUSH/POP在8086/8088系统中,堆栈是一段RAM区域。栈底的一端地址较大,栈顶的一端地址较小。段基址在SS中,SP始终指向栈顶。堆栈操作始终遵守“FILO”原则,数据的存入和取出都在栈顶进行。在8086/8088系统中,PUSH/POP以字为单位。堆栈的主要用途:(1)现场和返回地址的保护(2)寄存器内容的保护(3)传递参数(4)存储局部变量34指令格式:PUSHSRC;压入堆栈指令PUSHPOPDST;弹出堆栈指令POP功能:PUSH指令使SP-2SP,然后将16位的源操作数压入堆栈,先高位后低位。源操作数可以是通用寄存器、段寄存器和存储器。(SP)←(SP)–2,((SP)+1,(SP))←(SRC)POP指令与PUSH指令相反,它从栈顶弹出16位操作数到目标
本文标题:8086的寻址方式和指令系统
链接地址:https://www.777doc.com/doc-3097554 .html