欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【教学课件】第3章8086的寻址方式和指令系统.ppt

    • 资源ID:80435850       资源大小:582KB        全文页数:107页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第3章8086的寻址方式和指令系统.ppt

    第第3章章 8086的寻址方式和的寻址方式和指令系统指令系统【本章重点】掌握指令系统的的基本格式,指令系统的操作功能及使用方法。【本章难点】8086的寻址方式,数据传送类指令 和算术运算类指令的使用。3.1 8086的寻址方式的寻址方式3.1.1操作数的寻址方式操作数的寻址方式 立即数寻址立即数寻址在这种寻址方式中,操作数直接跟在操作码的后面,参加指令所规定的操作,并且操作数与操作码一起放在代码段中。这种方式叫立即数寻址方式。例:MOVAX,1234H这条指令的功能是:把立即数1234H送入AX中。图3-1立即寻址示意图寄存器寻址寄存器寻址如果操作数就在CPU的内部寄存器中,那么寄存器名在指令中给出。这种寻址方式就叫寄存器寻址方式。例: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=32010H指令功能是将32010H和32011H两单元的内容送到AX中。要注意的是采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。寄存器间接寻址寄存器间接寻址采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX、BP,SI和DI之一,由于上述4个寄存器所黙认的段寄存器不同,这样又可以分两种情况:以SI、DI、BX进行间接寻址,则操作数通常存放在现行数据段中。此时数据段寄存器内容加上SI、DI、BX中的16位段内偏移地址,即得操作数的地址例:MOVAX,SI和直接寻址的情况样,如果指令前面没有用前缀指明具体的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器为BP时,则对应的段寄存器为SS。寄存器BP间接寻址,则操作数存放在堆栈段区域中。此时堆栈段寄存器内容加上BP中的16位段内偏移地址,即得操作数的地址。假如SS=3000H例:MOVAX,BP物理地址=SS16BP=30000H2000H=32000H指令功能是将32000H和32001H两单元的内容送到AX中。寄存器相对寻址寄存器相对寻址在这种寻址方式中,操作数存放在存贮器中。操作数的地址是由段寄存器内容加上SI、DI、BX、BP之一的内容,再加上由指令所指出的8位或16位相对地址偏移量而得到的例:MOVAX,DISPSI物理地址=DS16SIDISP=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物理地址=SS16BPSI=30000H3000H1000H=34000H指令功能是将340000H和34001H两单元的内容送到AX中。例:MOVAX,DISPBXSI物理地址=DS16SIBXDISP=30000H1000H3000H0300H=34300H指令功能是将34300H和34301H两单元的内容送到AX中。基址、变址相对寻址基址、变址相对寻址这种寻址实际上是基址、变址寻址的扩充。即操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对偏移地址而得到的3.1.2 3.1.2 转移地址的寻址方式转移地址的寻址方式段内直接寻址段内直接寻址段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前IP内容和一个8位或16位的位移量DISP之和。即物理地址=CS16IPDISP例:JMPDISP图3-10中,1000H是CPU读取这条指令的位移量50H后IP的内容。所以,该指令使CPU转向31050H去执行。段内间接寻址段内间接寻址这种寻址方式在段内进行,其转移的目标地址是16位寄存器或两个相邻的存储单元的内容,即以寄存器或存储器单元内容来更新IP的内容。如图3-11所示。例:JMPCXJMPWORDPTRBX段间直接寻址段间直接寻址在这种寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址。例:JMPFARPTRDADD1段间间接寻址这种寻址方式和段内间接寻址相似。但是,由于确定转移地址需要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通用传送指令通用传送指令通用传送指令中包括最基本的传送指令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位数据送CXMOVBX,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以外)与存贮器(所有寻址方式)之间的数据传送,与前述一样可以传送一个字节也可以传送一个字。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之间交换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;SP=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中。源操作数必须是一个内存操作数,目的操作数必须是一个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所指的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、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指令两个操作数相加,结果送至目的操作数。源操作数可以是累加器、通用寄存器、存贮器和立即数。目的操作数可以是累加器、通用寄存器或存贮器。例如: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)注意,两个存储器操作不能直接相加,段寄存器也不能参加运算。在使用时还要注意两个操作数类型一致。例如: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和00109428H,其中被加数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、PF、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)(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指令指令格式:DECOPRD指令功能:OPRD(OPRD)1该指令实现对操作数的减1操作,所用的操作数可以是寄存器的,也可以是存储器。在相减时,把操作数看作为无符号的二进制数。该指令执行结果将影响标志位AF、OF、PF、SF和ZF,但对CF标志不产生影响,例如:DECBLDECCXDECBYTEPTRSI(4)NEG求补指令指令格式:NEGOPRD指令功能:OPRD0(OPRD)该指令用来对操作数进行求补操作,即用零减去操作数,然后再将结果送回。相当于操作数求反加1并保存在目的操作数中。例如:NEGALNEGBYTEPTRSI如果操作数的值为128(16进制数为80H)或者一32768(16进制数为8000H),执行求补指令后,操作数没有变化,但溢出标志OF=1。(5)比较指令指令格式:CMPOPRDl,OPRD2指令功能:(OPRD1)(OPRD2)该指令执行减法操作,不保存相减的结果。指令执行后两操作数的内容不变,但相减的结果影响标志位。在程序设计时,比较指令通常为程序的转移提供条件。例如:CMPAX,2000HCMPAL,50HCMPDX,SICMPAX,BXSI10H比较指令在执行时,会影响标志位AF、CF、OF、PF、SF、ZF。如何利用状态标志来判断两操作数的关系呢?下面分三种情况来分析。1)两个操作数相等如果所比较的两个操作数相等时,那么标志位ZF=1,所以根据ZF就可以判断两数是否相等。2)两个操作数不等两个无符号数的比较无符号数相减时,CF就是借位标志。如果CF=0,表示无借位,即被减数大,减数小。如果CF=1,表示有借位,即被减数小,减数大。两个有符号数的比较两个有符号的比较时,同符号数相比较,相减的结果不会超出带符号数的表示范围,即不会产生溢出,OF=0;两个不同号的带符号数比较,相减的结果有可能产生溢出。这时可以用如下结论判断。当OFSF=0时,OPRD1OPRD2。当OFSF=1时,OPRD1OPRD2。CMPAL,0;AL和0进行比较JGENEXT;若AL0则转到NEXT执行例如,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到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有影响,SF、ZF、AF、PF不确定。例如:MULALMULBXMULWORDPRTSI要完成1415可以用下列指令:MOVAL,14MOVCL,15MULCL(2)带符号数乘法指令IMUL指令格式:IMULOPRD指令功能:若OPRD为字节数据,则执行AX(AL)(OPRD)若OPRD为字数据,则执行DX、AX(AX)(OPRD)目的操作数为:AL或AX(隐含给出)4除法指令除法指令8086有两条除法指令:无符号除法指令和带符号除法指令。它们都可以进行字节或字除法运算,并且规定,8位除法的被除数在AX中;16位除法的被除数在DX与AX中,除数均由指令指出。对8位数除法,商与余数分别放在AL与AH中,对16位除法,商与余数分别放在AX与DX中。(1)无符号数除法指令DIV指令格式:DIVOPRD指令功能:OPRD为字节数据:AL(AX)(OPRD)商AH(AX)(OPRD)余数OPRD为字数据:AX(DX)(AX)(OPRD)商DX(DX)(AX)(OPRD)余数(2)IDIV带符号数除法指令指令格式:IDIVOPRD指令操作:与DIV指令相同,但被除数、除数、商、余数全部均为带符号数,且余数的符号位同被除数。即IDIV执行后,CF、OF、AF、PF、ZF、SF不确定。用IDIV指令时,如果是一个双字除以一个字,则商的范围为3276832767;如果是一个字除以一个字节,则商的范围为128127。运算结果超出了表示范围,那么会作为除数为0的情况来处理,即产生0号中断。例如:在存储器中有X和Y两个单元,存有无符号数,现要求完成X/Y,将商存入Z单元。执行的指令如下:MOVAL,XMOVAH,0DIVYMOVZ,AL(3)CBW字节转换为字指令指令格式:CBW指令功能:AL中的符号位扩展到AH中。若AL中的D7=0,则(AH)=00H;若 AL的 D7=1,则(AH)=FFH。(4)CWD字转换为双字指令指令格式:CWD指令功能:AX中的符号位扩展到DX中。若AX中的D15=0,则(DX)=0000H;若 AX的 D15=1,则(DX)=FFFFH。5BCD码调整指令码调整指令在计算机中,可用4位二进制码来表示一个十进制码,这种代码叫BCD码。当然BCD码只有09共10种编码。BCD码有两类:一类叫压缩的BCD码,所谓压缩,就是用1个字节表示2位BCD码;另一类叫非压缩的BCD码,用这类代码时,1个字节只用低4位来表示BCD码,高4位为0。(1)AAA非压缩十进制数加法调整指令指令格式:AAA指令功能:AL把AL中的和调整为非组合的BCD码格式。AH(AH)调整产生的进位值。调整的步骤如下:如AL寄存器的低4位在09之间,且AF=0,则跳过第步,执行第步;如AL寄存器的低4位为十六进制数的AF或AF=1,则AL中的内容加6,AH中内容加1,并将AF置1;清除AL寄存器的高4位;AF位的值送CF位。例如:ADDAL,BLAAA指令执行前AX=0535H,BL=39H,可见AL和BL中的内容分别为5和9的ASC码。第一条指令执行后,AL=6EH,AF=0;第二条指令进行BCD码调整的结果使AX=0604H,AF=1,CF=1。(2)AAS非压缩十进制数减法调整指令指令格式:AAS指令功能:AL把AL中的差调整为非压缩的BCD码格式。AH(AH)调整产生的借位值。这条指令主要用于SUB或SBB之后,减法指令必须把两个非压缩的BCD码相减,并把结果存放在AL寄存器中。(3)AAM乘法的BCD码调整指令指令格式:AAM指令功能:AX把AL中的积调整为非压缩的BCD码格式。这条指令之前必须执行MUL指令把两个非组合的BCD码相乘(此时要求其高4位为0),结果放在AL中。本指令的调整方法是:把AL寄存器的内容除以0AH,商放在AH中,余数保存在AL中。本指令根据AL寄存器的内容设置条件标志SF、ZF、PF,但OF、CF、AF位无定义。(4)AAD除法的BCD码调整指令对BCD码进行除法运算时,也要求除数和被除数都用非压缩的BCD码形式来表示,这是与对BCD码乘法的要求类似的地方。这里要特别注意一点,对BCD码除法运算的调整是在进行除法之前,通过对除数和被除数进行调整来实现的。调整操作如下:AL10AHALAH0例如:一个数据为65,用非压缩的BCD码表示,则AH中为00000110,AL中为00000101,调整执行AAD指令,这条指令将AH中的内容乘以10,再加上AL中的内容,这样得到AL的结果为41H。AH为0。这条指令根据AL寄存器的结果设置SF、ZF和PF,OF、CF和AF无定义。3.2.33.2.3逻辑运算和移位指令逻辑运算和移位指令1逻辑运算指令逻辑运算指令8086逻辑运算指令包括AND(与)、OR(或)、NOT(非)、XOR(异或)指令和TEST(测试)指令。(1)NOT逻辑求反指令指令格式:NOTOPRD指令功能:OPRDOPRD该指令对操作数进行求反操作,然后将结果送回。操作数可以是寄存器或存贮器的内容。该指令对标志位不产生影响。例如:MOVAL,8FHNOTAL两条指令执行后AL=70H。(2)AND逻辑“与”指令指令格式:ANDOPRDl,OPRD2指令功能:OPRD1(OPRD1)(OPRD2)该指令对两个操作数进行按位相“与”的逻辑运算。即只有参加相与的两位全为“1”时,相“与”结果才为“1”,否则相“与”结果为“0”。相“与”结果送回目的操作数。AND指令可以进行字节操作,也可以进行字操作。目的操作数OPRDl:可以是累加器,也可以是通用寄存器,也可以是存储器。源操作数OPRD2:可以是立即数、寄存器,也可以是存储器。ANDAL,0FHANDAL,0CHANDAX,BXANDAX,DATAANDDX,BUFFERSI+BXANDDATA,00FFHANDBLOCKBP+DI,DX某一个操作数,如果自己与自己相“与”,操作数不变,但可以使进位标志位CF清0。该指令执行以后,标志位CF=0,OF=0。标志位PF、SF、ZF反映操作的结果,而标志位AF未定义。(3)TEST测试指令指令格式:TESTOPRD,im;im为立即数指令功能:OPRD1(OPRD1)im该指令的操作功能与AND指令相同,其结果将反映在标志位上,但结果不送回。利用该指令,可以在不改变原有操作数的情况下,用来检测某一位或某几位是“0”不是“1”。编程时作为条件转移指令的先行指令。例如:若要检测AL中的最高位是否为1,且为1时则转移。在这种情况下可以用如下指令:TESTAL,80HJNZTHERETHERE:MOVBL,05H(4)OR逻辑“或”指令指令格式:OROPRDl,OPRD2指令功能:OPRD1(OPRD1)(OPRD2)该指令对两个操作数进行按位相“或”的逻辑运算。即只要参加相“或”的两位中任一位为“1”时,相“或”结果为“1”,如果两位都为0时,其结果才为0。OR指令可以进行字节操作,也可以进行字操作。目的操作数OPRDl:可以是累加器、通用寄存器、也可以是存储器。源操作数OPRD2:可以是立即数、寄存器,也可以是 存储器。例如:ORAL,80HORAX,05FFHORBX,SIORBX,DATAORBUFFERBX,SIORBUFFERBX+SI,8000H(5)XOR逻辑“异或”指令指令格式:XOROPRDl,OPRD2指令功能:OPRD1(OPRD1)(OPRD2)该指令对两个操作数进行按位相“异或”的逻辑运算。即只有参加相“异或”的两位值不同时,其结果为“1”;否则就为0。XOR指令可以进行字节操作,也可以进行字操作。目的操作数OPRDl:可以是累加器、通用寄存器,也可以是存储器。源操作数OPRD2:可以是立即数、寄存器,也可以是存储器。例如:XORAL,0FHXORAX,BXXORCX,SI4XOR10HBX,CXXORBX+SI5,AX例如:XORAX,AXXORSI,SI指令执行后可使AX、SI清零。XOR指令执行后,标志位CF=0,OF=0,标志位PF、SF,ZF将反映“异或”操作的结果。标志AF未定义。2移位指令移位指令(1)SALSHL算术左移和逻辑左移指令指令格式:SAL/SHLOPRD,CL/1指令功能:这两条指令的操作结果是完全一样的,将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,同时最低位送0。目的操作数可以是8位,也可以16位。目的操作数OPRD:可以是累加器、寄存器、也可是存储器。利用左移1位操作可实现操作数乘2的运算。例如:SHLAL,1MOVCL,4SHLAL,CL(2)SAR算术右移指令指令格式:SAROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。该指令每执行一次移位操作,就使操作数右移一位,但符号位保持不变,而最低位移至标志位CF,目的操作数可以是8位,也可以16位。例如:MOVAH,5AHSARAH,1指令执行完后,(AH)=2DH,CF=0(3)SHR逻辑右移指令指令格式:SHROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。该指令每执行一次移位操作,就使操作数右移一位,左面的最高位将补0,最低位移至标志位CF中。目的操作数可以是8位,也可以16位。例如:MOVBL,4EHSHRBL,1指令执行后,(BL)=27H,CF=03循环移位指令循环移位指令(1)ROL不带进位的循环左移指令指令格式:ROLOPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,同时送至最低位。目的操作数可以是8位,也可以16位。例如:MOVAL,5BHROLAL,1指令执行完后,(AL)=B6H,CF=0(2)ROR不带进位的循环右移指令指令格式:ROROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。右移一位时,操作数的最低位移出送到CF中,同时送至最高位。目的操作数可以是8位,也可以16位。例如:MOVAL,6BHROLAL,1指令执行完后,(AL)=B5H,CF=1(3)RCL带进位的循环左移指令指令格式:RCLOPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,而原来的CF位送至最低位。目的操作数可以是8位,也可以16位。例如:MOVAL,4CHRCLAL,1指令执行后,(AL)=99H,CF=0(4)RCR带进位的循环右移指令指令格式:RCROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。右移一位时,操作数的最低位移出送到CF中,而原来的CF位送至最高位。例如:MOVAL,5CHRCRAL,1指令执行完后,(AL)=AEH,CF=03.2.43.2.4串操作指令串操作指令在串操作中,一般假定源串在数据段中(DS),用SI作源串地址指针,而目的串在附加段中(ES),用DI作目的串地址指针。在每做一次串操作后,若是对字节进行操作,则SI和DI的值会自动加1或减l;若是对字进行操作,则SI和DI的值就自动加2或减2,是加还是减由DF标志寄存器来决定。若DF=0,则SI和DI增量修改;DF=1,则SI和DI做减量修改。在串操作前可用STD指令使DF位置l,也可以用CLD指令使DF位清0。1MOVS串传送指令串传送指令指令格式:MOVSOPRD1,OPRD2MOVSB;字节传送MOVSW;字传送指令功能:(DI)(SI)字节操作SI(SI)1;DI(DI)1;字操作SI(SI)2;DI(DI)2;该类指令执行时,将把当前数据段中用SI指针指出的源串的一个字节或一个字传送到用DI指针指向的附加段的目的地址中去。当DF=0且是字节传送时,则传送后SI、DI加1,以使指针指向下一个地址;当DF=0且是字传送时,则SI、DI加2。若DF1,则SI、DI减1或减2。2CMPS串比较指令串比较指令指令格式:CMPSOPRD1,OPRD2CMPSB;字节比较CMPSW;字比较指令功能:(SI)(DI)字节操作SI(SI)1;DI(DI)1;字操作SI(SI)2;DI(DI)2;该类指令执行时,将当前数据段由SI所指出的字节和字同当前附加段中由DI所指出的目的串的字节或字进行比较,把比较结果送标志位。该指令对操作数不产生影响。3SCAS串扫描指令串扫描指令指令格式:SCASOPRD1,OPRD2SCASB;字节扫描SCASW;字扫描指令功能:字节操作AL(DI)DI(DI)1;字操作AX(DI)DI(DI)2;该类指令是串扫描指令,用于寻找内存区中指定的数据和字符。指令执行时,将AL或AX的值减去附加段中由DI所指定的字节或字,结果将改变标志位,但不改变操作数的值。4LODS串装入指令串装入指令指令格式LODSOPRD1,OPRD2LODSB;字节传送LODSW;字传送指令功能:字节操作AL(SI)SI(SI)1字操作AX(SI)SI(SI)2该类指令是字串装入指令。它将由SI所指定的源串字节或字装入到累加器AL或AX中去,并根据DF的值修改指针SI,以指向下一个要装入的字节或字。5STOS串存储指令串存储指令指令格式:STOSOPRD1,OPRD2STOSB;字节存储STOSW;字存储指令功能:字节操作(DI)(AL)DI(DI)1字操作(DI)AXDI(DI)2该类指令是字串存贮指令。它将AL或AX中的字节或字存贮到由DI所指定的附加段中去,且根据DF的值来修改DI的值。6REP重复操作前缀重复操作前缀它是串指令的前缀。当某一条指令需要多次重复时,就可以加上该前缀。重复次数应放在寄存器CX中。这样每重复执行一次,CX内容减1,直到CX=0,才停止重复。7REPE/PEPZ相等相等/为零时重复操作前缀为零时重复操作前缀它们是条件重复前缀。当条件满足时,才重复执行后面的串指令,一旦条件不满足,重复就停止。REPE/REPZ指令是相等重复指令,即只要ZF=l,且CX0,串指令就重复执行。8REPNE/PEPNZ不相等不相等/不为零时重复操作前缀不为零时重复操作前缀它们是条件重复前缀。当条件满足时,才重复执行后面的串指令,一旦条件不满足,重复就停止。REPNE/REPNZ指令是不相等重复指令,即只要ZF=0,且CX0,串指令就重复执行。例如:将1 000个字符的字符串从内存的BUFFERl搬移到内存的BUFFER2中去。MOVSI,OFFSETBUFFERl;BUFFERl偏移地址送SIMOVD1,OFFSETBUFFER2;BUFFER2偏移地址送DIMOVCX,1000;传送次数送CXCLDREPEMOVSBUFFER2,BUFFERl;重复搬移注意,上述程序中的BUFFERl应处于DS段中,而BUFFER2应处于ES段中。例如:将数据段中100个字的数据块BLOCKl搬移到同一个数据段的BLOCK2中去。PUSHDSPOPESLEASI,BLOCKlLEAD1,BLOCK2MOVCX,0064HCLDREPEMOVSW例:比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。CLDLEADI,DESTLEASI,SOURCEMOVCX,500REPECMPSBJCXZNEXTMATCH:DECSIMOVAL,BYTEPTRSI3.2.53.2.5程序控指令程序控指令1JMP无条件转移指令无条件转移指令这些指令都将引起程序执行顺序的改变。转移有段内转移和段间转移之分。所谓段内转移是指段地址不变,仅IP发生改变;而段间转移,CS和IP均发生改变。(1)段内直接短转移指令格式:JMPSHORTLOOP指令功能:IP(IP)8位偏移量其中LOOP为转移目标地址,可直接使用符号地址,又称标号。SHORT为属性运算符,指示汇编程序将地址汇编成8位偏移量,范围在128127之内。(2)段内直接近转移指令格式:JMPNEARPTRLOOP或JMPLOOPl;NEAR可省略指令功能:IP(IP)16位偏移量其中LOOP为转移目标地址,可直接使用符号地址,又称标号。NEARPTR为属性运算符,指示汇编程序将地址汇编成16位偏移量,范围在64K之内。近程转移JMPNEARPTRLOOPl(3)段内间接转移指令格式:JMPWORDPTROPRD指令功能:IP(OPRD地址所对应连续两单元的内容)OPRD的有效地址由寻址方式决定。OPRD可以为寄存器寻址或存储器寻址的某一种。如果是寄存器寻址,指令中直接给出寄存器号,寄存器中的内容送到IP中;如果是存储器寻址,按存储器寻址方式形成的地址所对应的单元内容给IP指针。可以直接地说,段内间接转移,其转移地址在寄存器中或存储器中。远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容。例如:JMPCXJMPWORDPTRBX(4)段间直接转移指令格式:JMPFARPTRLOOP指令功能:IPLOOP的偏移地址 CSLOOP的所在段地址段间间接转移JMPDWORDPTRBPDI该指令指定的双字指针的第一个字单元内容送入IP,第二个字单元内容送入CS,所定义的单元必定是双字单元。2子程序调用和返回指令子程序调用和返回指令(1)段内调用和返回指令)段内调用和返回指令1)段内直接调用指令)段内直接调用指令指令格式:指令格式:CALL OPRD 其中其中OPRD为被调用的过程或子程序的首地址。为被调用的过程或子程序的首地址。指令功能:指令功能:SP(SP)2,(,(SP)(IP)IPOPRD对应对应16位直接地址位直接地址在在程程序序中中,OPRD一一般般为为子子程程序序名名,汇汇编编时时汇汇编编成成16位位的的偏偏移移地地址址。在在段段内内直直接接调调用用时时,CALL指指令令首首先

    注意事项

    本文(【教学课件】第3章8086的寻址方式和指令系统.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开