【教学课件】第3章8086的寻址方式和指令系统.ppt
《【教学课件】第3章8086的寻址方式和指令系统.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第3章8086的寻址方式和指令系统.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 8086的寻址方式和的寻址方式和指令系统指令系统【本章重点】掌握指令系统的的基本格式,指令系统的操作功能及使用方法。【本章难点】8086的寻址方式,数据传送类指令 和算术运算类指令的使用。3.1 8086的寻址方式的寻址方式3.1.1操作数的寻址方式操作数的寻址方式 立即数寻址立即数寻址在这种寻址方式中,操作数直接跟在操作码的后面,参加指令所规定的操作,并且操作数与操作码一起放在代码段中。这种方式叫立即数寻址方式。例:MOVAX,1234H这条指令的功能是:把立即数1234H送入AX中。图3-1立即寻址示意图寄存器寻址寄存器寻址如果操作数就在CPU的内部寄存器中,那么寄存器名在指令
2、中给出。这种寻址方式就叫寄存器寻址方式。例:MOVDS,AX图3-2寄存器寻址示意图对16位操作数来说,寄存器可以为AX、BX,CX,DX、SI、DI、SP或者BP,对于8位操作数来说,寄存器可为AH,AL、BH,BL,CH,CL、DH,DL。采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要使用总线周期,因此,执行速度快。直接寻址直接寻址使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。假如DS=3000H 例:MOVAX,DS:2010H物理地址=DS162010H=3000H162010H=320
3、10H指令功能是将32010H和32011H两单元的内容送到AX中。要注意的是采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。寄存器间接寻址寄存器间接寻址采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX、BP,SI和DI之一,由于上述4个寄存器所黙认的段寄存器不同,这样又可以分两种情况:以SI、DI、BX进行间接寻址,则操作数通常存放在现行数据段中。此时数据段寄存器内容加上SI、DI、BX中的16位段内偏移地址,即得操作数的地址例:MOVAX,SI和直接寻址的情况样,如果指令前面没有用前缀指明
4、具体的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器为BP时,则对应的段寄存器为SS。寄存器BP间接寻址,则操作数存放在堆栈段区域中。此时堆栈段寄存器内容加上BP中的16位段内偏移地址,即得操作数的地址。假如SS=3000H例:MOVAX,BP物理地址=SS16BP=30000H2000H=32000H指令功能是将32000H和32001H两单元的内容送到AX中。寄存器相对寻址寄存器相对寻址在这种寻址方式中,操作数存放在存贮器中。操作数的地址是由段寄存器内容加上SI、DI、BX、BP之一的内容,再加上由指令所指出的8位或16位相对地址偏移量而得到的例:MOVAX,DISPSI物理地址=D
5、S16SIDISP=30000H1000H0300H=31300H指令功能是将31300H和31301H两单元的内容送到AX中。基址、变址寻址基址、变址寻址在8086中,通常把BX和BP作为基址寄存器,而把SI、DI作为变址寄存器。将这两种寄存器联合起来进行的寻址就称为基址、变址寻址。这时,操作数的地址应该是段寄存器内容16加上基址寄存器内容(BX或BP内容),再加上变址寄存器内容(SI或DI内容)而得到的.例:MOVAX,BXSI物理地址=DS16SIBX=30000H1000H3000H=34000H指令功能是将34000H和34001H两单元的内容送到AX中。例:MOVAX,BPSI物理
6、地址=SS16BPSI=30000H3000H1000H=34000H指令功能是将340000H和34001H两单元的内容送到AX中。例:MOVAX,DISPBXSI物理地址=DS16SIBXDISP=30000H1000H3000H0300H=34300H指令功能是将34300H和34301H两单元的内容送到AX中。基址、变址相对寻址基址、变址相对寻址这种寻址实际上是基址、变址寻址的扩充。即操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对偏移地址而得到的3.1.2 3.1.2 转移地址的寻址方式转移地址的寻址方式段内直接寻址段内直接寻址段内直接寻址方式也称为相对寻
7、址方式,转移的目标地址是当前IP内容和一个8位或16位的位移量DISP之和。即物理地址=CS16IPDISP例:JMPDISP图3-10中,1000H是CPU读取这条指令的位移量50H后IP的内容。所以,该指令使CPU转向31050H去执行。段内间接寻址段内间接寻址这种寻址方式在段内进行,其转移的目标地址是16位寄存器或两个相邻的存储单元的内容,即以寄存器或存储器单元内容来更新IP的内容。如图3-11所示。例:JMPCXJMPWORDPTRBX段间直接寻址段间直接寻址在这种寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址。例:JMPFARPTRDADD1段间间接寻址这种寻址方
8、式和段内间接寻址相似。但是,由于确定转移地址需要32位信息,因此只适用于存贮器寻址方式。用这种寻址方式可计算出存放转移地址的存贮单元的首地址,与此相邻的4个单元中,前两个单元存放16位的段内偏移地址;而后两单元存放的是16位的段地址,如图3-13所示。例:JMPDWORDPTRBPDI8086的指令系统大致可分为6种类型:数据传送指令算术运算指令逻辑运算和移位指令串操作指令程序控制指令处理器控制指令3.2 8086指令系统指令系统3.2.13.2.1数据传送指令数据传送指令8086有5类传送指令,以实现CPU的内部寄存器之间、CPU和存储器之间、CPU和I/O端口之间的数据传送。1 1通用传送
9、指令通用传送指令通用传送指令中包括最基本的传送指令MOV,交换指令XCHG,椎栈指令PUSH和POP,字节、字转换指令CBW和CWD。(1)最基本的传送指令指令格式:MOV OPRDl,OPRD2执行功能:该指令可把一个字节或一个字操作数从源地址传送到目的地址中去。OPRD1:可以是累加器、寄存器、存贮器以及立即操作数OPRD2:可以是累加器、寄存器和存贮器。图3-14数据传送方向示意图1)在CPU各内部寄存器之间传送数据(除代码段寄存器CS和指令指针IP以外)。MOVAL,BL;BL中的8位数据送ALMOVDH,CL;CL中的8位数据送DHMOVCX,AX;将AX中的16位数据送CXMOVB
10、X,DI;将DI中的16位数据送BXMOVDS,AX;将AX中的16位数据送DSMOVES,AX;将AX中的16位数据送ES2)立即数传送至CPU的内部通用寄存器(即AX、BX、CX、DX、BP、SP、SI、DI),给这些寄存器赋值。MOV CL,4;立即数8送入CL中MOV AX,03FFH;将立即数数03FFH送入AX中MOV CX,1000H;将立即数1000H送入CX中MOV BL,40;将立即数40送BL中MOV SI,057BH;将立即数057BH送入SI中3)CPU内部寄存器(除了CS和IP以外)与存贮器(所有寻址方式)之间的数据传送,与前述一样可以传送一个字节也可以传送一个字。
11、MOVAL,BUFFER;将BUFFER为首地址的一个单元内容送ALMOVAX,BX;BX和BX+1所指的两个内存单元的内容送AXMOVDI,AX;累加器的内容送DI和DI+1所指的两个单元MOVAX,SI+4;将SI+4和SI+4+1所指的两个单元内容送入AX需要注意的是,MOV指令不能在两个存贮器单元之间进行数据直接传送。为了实现存贮器单元之间的数据传送,必须用内部寄存器作为中介。MOVAL,DATAlMOVDATA2,AL(2)交换指令指令格式:XCHGOPRDl,OPRD2执行功能:交换指令把一个字节或一个字的源操作数与目的操作数相交换。XCHGAL,CL;累加器低8位和通用寄存器CL
12、之间交换XCHGAX,DI;累加器AX和通用寄存器DI之间交换XCHGBX,SI;通用寄存器BX和通用寄存器SI之间交换XCHGAX,BUFFER;累加器AX和BUFFER为首地址的两个单元交换XCHGBX,SI;通用寄存器BX和存储器SI和SI+1两个单元交换(3)堆栈操作指令PUSHOPRD(压入堆栈指令)POPOPRD(弹出堆栈指令)例如:MOV AX,1234H MOV DX,5678H MOV SP,2000H PUSH AX PUSH DX POP DX POP AX当执行完两条压入堆栈的指令时,堆栈中的内容如图3-15所示。SPlSP;SP=1FFFH,(SP)AHSPlSP;S
13、P=1FFEH,(SP)ALSPlSP;SP=1FFDH,(SP)DHSPlSP;SP=1FFCH,(SP)DL每执行一条压入堆栈指令,堆栈地址指针SP减2,压入堆栈的数据放在栈项。弹出堆栈的过程与此刚好相反,每弹出1个字,栈顶指针SP的值加2。DL(SP);SPlSP,SP=1FFDHDH(SP);SPlSP,SP=1FFEHAL(SP);SPlSP,SP=1FFFHAH(SP);SPlSP,SP=2000H2地址传送指令地址传送指令8086有3条地址传送指令。(1)LEA指令指令格式:LEAOPRDl,OPRD2执行功能:该指令把源操作数OPRD2的地址偏移量传送至目的操作数OPRDl中。
14、源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。这条指令通常用来建立串指令操作所需的地址指针。LEABX,DATA和MOVBX,OFFSETDATA等价LEASI,BUFFER和MOVSI,OFFSETBUFFER等价(2)LDS指令该指令完成一个地址指针的传送。地址指针包括段地址和地址偏移量。指令执行时,将段地址送入DS,地址偏移量送入一个16位的指针寄存器或变址寄存器。例如:LDSSI,BX是把BX所指的32位地址指针的段地址送入DS,偏移地址送入SI。(3)LES指令这条指令除将地址指针的段地址送入ES外,其他操作与LDS的类似。例如:LESDI,BX是把BX所指的
15、32位地址指针的段地址送入ES,偏移地址送入DI。3输人输出指令输人输出指令输入/输出指令用来完成累加器(AX/AL)与I/O端口之间的数据传送功能。执行输入指令时,CPU可以从一个8位端口读入一个字节到AL中,也可以从两个连续的8位端口读一个字到AX中。指令格式:IN累加器,端口地址执行输出指令时,CPU可以将AL中的一个字节写到一个8位端口中,或者将AX中的一个字写到两个连续的8位端口中。指令格式:OUT端口,累加器端口地址的寻址范围是64K(0000HFFFFH),若端口地址在00HFFH之间,可以使用直接寻址方式,否则只能由16位寄存器DX来作间接寻址。例如:INAX,20H;读20H
16、、21H端口一个字的数据到AX中OUT22H,AL;将AL中的数据从22H端口输出MOVDX,210H;端口地址210H送DXINAL,DX;读210H端口一个字节到AL中OUTDX,AX;将AX中的数据从210H端口输出3.2.23.2.2算术运算指令算术运算指令8086可提供加、减、乘、除4种基本算术运算的操作指令。这些指令可实现字节或字的运算,也可以用于符号数和无符号数的运算。进行加、减运算的源操作数和目的操作数的关系1加法指令加法指令(1)不带进位的加法指令指令格式:ADDOPRDl,OPRD2指令功能:OPRDl(OPRDl)+(OPRD2)ADD指令两个操作数相加,结果送至目的操作
17、数。源操作数可以是累加器、通用寄存器、存贮器和立即数。目的操作数可以是累加器、通用寄存器或存贮器。例如:ADDAL,30;AL(AL)30ADDAX,1000H;AX(AX)1000HADDBX,3FFH;BX(BX)3FFHADDAX,SI;AX(AX)(SI)ADDSI,AX;SI(SI)(AX)ADDDI,CX;DI(DI)(CX)ADDAL,DATABX;AL(AL)(BXDATA)ADDDX,DATABX+SI;DX(DX)(BXSIDATA)ADDBETASI,100;(SI+DETA)(SI+BETA)100ADDBETASI,AX;(SI+DETA)(SI+BETA)(AX)注
18、意,两个存储器操作不能直接相加,段寄存器也不能参加运算。在使用时还要注意两个操作数类型一致。例如:ADDAX,0CFA8H若指令执行前,(AX)=5623H,则指令执行后,(AX)=25CBH,且CF=1,OF=0,SF=0,ZF=0,AF=0,PF=1。这些指令执行时,对标志位CF、OF、SF、ZF和AF都会产生影响。(2)带进位的加法指令指令格式:ADCOPRD1,OPRD2指令功能:OPRD1(OPRD1)+(OPRD2)+CY这条指令与ADD指令基本相同,只是在对两个操作数进行相加运算时还应加上进位位的当前值,然后再将结果送至目的操作数。例如:现有两个双精度字00127546H和001
19、09428H,其中被加数00127546H存放在DATA1为首的内存单元中,加数00109428H存放在DATA2为首的内存单元中。要求结果存放在DATA3为首的单元中。MOVAX,DATA1ADDAX,DATA2MOVDATA3,AXMOVAX,DATA1+2ADCAX,DATA2+2MOVDATA3+2,AX该指令对标志位的影响与ADD指令对标志位的影响相同。(3)INC加1指令指令格式:INCOPRD指令功能:OPRD(OPRD)1这条指令对指定的操作数进行加1操作,在循环程序中常用于修改地址指针和循环次数等。其操作数可以是通用寄存器,也可以是存储器。该指令执行结果对标志位AF、OF、P
20、F、SF和ZF有影响,而对CF位不产生影响,例如:INCALINCCXINCWORDPTRSIINCBYTEPTRSI+BX2减法指令减法指令 (1)不带借位的减法指令指令格式:SUBOPRDl,OPRD2指令功能:OPRD1(OPRD1)(OPRD2)该指令用来对目的操作数和源操作数的字或字节进行相减,其结果存放在目的操作数。源操作数OPRD2:可以是累加器、通用寄存器、存储器、立即数。目的操作数OPRD1:可以是累加器、通用寄存器、存储器。SUBAL,78H;AL(AL)78HSUBBX,5678H;BX(BX)5678HSUBAX,CX;AX(AX)(CX)SUBAL,4SI;AL(AL
21、)(SI4)SUBDX,1000HBX+SI;DX(DX)(BXSI1000H)SUBSI5,100;(SI+5)(SI+5)100SUBSI2000H,AX;(SI+2000H)(SI+2000H)(AX)指令执行后对各状态标志位OF、SF、AF、PF和CF均可产生影响。(2)带借位的减法指令指令格式:SBBOPRD1,OPRD2指令功能:OPRD1(OPRD1)(OPRD2)CY该指令与SUB相类似,只不过在两个操作数相减时,还应减去借位标志CF的当前值。这条指令主要用于多字节的减法运算。该指令对标志位AF、CF、OF、PF、SF和ZF都将产生影响。(3)DEC减1指令指令格式:DECOP
22、RD指令功能:OPRD(OPRD)1该指令实现对操作数的减1操作,所用的操作数可以是寄存器的,也可以是存储器。在相减时,把操作数看作为无符号的二进制数。该指令执行结果将影响标志位AF、OF、PF、SF和ZF,但对CF标志不产生影响,例如:DECBLDECCXDECBYTEPTRSI(4)NEG求补指令指令格式:NEGOPRD指令功能:OPRD0(OPRD)该指令用来对操作数进行求补操作,即用零减去操作数,然后再将结果送回。相当于操作数求反加1并保存在目的操作数中。例如:NEGALNEGBYTEPTRSI如果操作数的值为128(16进制数为80H)或者一32768(16进制数为8000H),执行
23、求补指令后,操作数没有变化,但溢出标志OF=1。(5)比较指令指令格式:CMPOPRDl,OPRD2指令功能:(OPRD1)(OPRD2)该指令执行减法操作,不保存相减的结果。指令执行后两操作数的内容不变,但相减的结果影响标志位。在程序设计时,比较指令通常为程序的转移提供条件。例如:CMPAX,2000HCMPAL,50HCMPDX,SICMPAX,BXSI10H比较指令在执行时,会影响标志位AF、CF、OF、PF、SF、ZF。如何利用状态标志来判断两操作数的关系呢?下面分三种情况来分析。1)两个操作数相等如果所比较的两个操作数相等时,那么标志位ZF=1,所以根据ZF就可以判断两数是否相等。2
24、)两个操作数不等两个无符号数的比较无符号数相减时,CF就是借位标志。如果CF=0,表示无借位,即被减数大,减数小。如果CF=1,表示有借位,即被减数小,减数大。两个有符号数的比较两个有符号的比较时,同符号数相比较,相减的结果不会超出带符号数的表示范围,即不会产生溢出,OF=0;两个不同号的带符号数比较,相减的结果有可能产生溢出。这时可以用如下结论判断。当OFSF=0时,OPRD1OPRD2。当OFSF=1时,OPRD1OPRD2。CMPAL,0;AL和0进行比较JGENEXT;若AL0则转到NEXT执行例如,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将
25、它放到MAX单元中。MOVSI,OFFSETBLOCKMOVAL,SIINCSIMOVCX,99AGAIN:CMPAL,SIJGNEXTMOVAL,SINEXT:INCSIDECCXJNEAGAINMOVMAX,ALHLT3乘法指令乘法指令8086的乘法指令分为无符号数乘法指令和带符号数乘法指令两种。(1)无符号数乘法指令MUL指令格式:MULOPRD指令功能:若OPRD为字节数据,则执行AX(AL)(OPRD)若OPRD为字数据,则执行DX、AX(AX)(OPRD)目的操作数为:AL或AX(隐含给出)源操作数为:通用寄存器、存储器。不能为立即数和段寄存器。MUL指令对状态标志CF、OF有影响
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 8086 寻址 方式 指令系统
限制150内