您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机系统与接口教学资料第三章
3.48088(8086)的指令系统一、IBMPC(8086/8088)指令系统二、数据传送指令三、算术运算指令四、逻辑运算指令五、串操作指令六、控制转移指令七、处理机控制指令一、IBMPC(8086/8088)指令系统8086/8088指令系统可分为六组:数据传送指令(Datatransfar);算术指令(Arithmetic);逻辑指令(Logic);串处理指令(Stringmanipulation);控制转移指令(Controltransfar);处理机控制指令(Processorcontrol);二、数据传送指令分类名称格式功能OSZAPC基本传送指令MOVDST,SRC字、字节传送不影响进栈指令PUSHOPRD字压入堆栈不影响出栈指令POPOPRD字弹出堆栈不影响交换指令XCHGDST,SRC字、字节交换不影响有效地址送寄存器指令LEAREG,SRC有效地址寄存器不影响指针送寄存器及DS指令LDSREG,SRC地址指针寄存器,DS不影响指针送寄存器及ES指令LESREG,SRC地址指针寄存器,ES不影响输入指令INAL,PORT外设数据AL不影响输出指令OUTPORT,ALAL外设数据不影响换码指令XLATAL中数据转换不影响读取标志指令LAHFFlag低字节AH不影响设置标志指令SAHFAHFlag低字节ZAPC标志寄存器入栈指令PUSHF把Flag内容压入堆栈不影响标志寄存器出栈指令POPF把Flag内容弹出堆栈OSZAPC通用数据传送指令地址传送指令累加器专用指令标志寄存器传送指令1.通用数据传送指令(1)基本传送指令MOVDST,SRC源操作数——寄存器、存储器、立即数目的操作数——寄存器、存储器执行的操作:DSTSRCMOV指令最简单、最常用,用来赋初值,或传送数据,或对数据进行暂存等。rSSDIBPICPUINSTmCSr/segESAXDSImmr/rSPIMCXDXr/mSIseg/mmBX其中源操作数(src)和目的操作数(dst)均可采用多种寻址方式,其传送关系如图所示:SRMIMCS:IP不能直接改变由图可知MOV指令有6种格式:(1)CPU通用寄存器之间传送(r/r)MOVCL,AL;将AL中的8位数据传到CL(2)通用寄存器和段寄存器之间(r/SEG)MOVDS,AX;将AX中的16位数据传到DS(3)用寄存器和存储单元之间(r/M)MOVAL,[BX];将[BX]所指存储单元内容传到AL(4)段寄存器和存储单元之间(seg/M)MOVDS,[2000H];将2000H和2001H两存储单元内容传到DS(5)立即数到通用寄存器(r/Imm)MOVSP,2000H;将2000H送SP(6)立即数到存储单元(M/Imm)MOVWORDPTR[SI],4501H;将立即数4501H送(SI)所指的字单元注意:①MOV指令可以传8位或16位数据例:MOVES,AL;错MOVCL,4321H;错②MOV指令的操作数中必用一个寄存器,不允许两存储单元之间传送数据MOV[2000H],[3000H];错例:MOVAL,[SI]MOV[DI],AL③不能用CS,IP作目的操作数④不允许在段寄存器之间直接传送数据例:MOVDS,ES;错⑤不允许用立即数作目的操作数MOV2000H,AL;错⑥不能向段寄存器送立即数MOVDS,3000H;错例:MOVAX,3000HMOVDS,AX*MOV指令不影响标志位。例1:把地址为AREA1(段内偏移量)的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中。AREA1AREA265F3020024E00500MovAREA2,AREA1MovAL,AREA1MovAREA2,AL例2:若要传送的不是一个字节,而是一个数据块,(例如内有100个字节),如何实现?movsi,offsetarea1movdi,offsetarea2movcx,100Again:moval,[si];mov[di],alincsiincdideccxjnzagainint3AREA1AREA265F302……0500100=Leasi,area2(2)栈操作指令PUSHOPRDPOPOPRD堆栈——按照先进后出的原则组织的一段内存区域。8088中规定堆栈设置在堆栈段(SS段)内,堆栈指针SP的初值决定了堆栈的大小。SP始终指向堆栈的顶部,即始终指向最后推入堆栈的信息所在的单元。操作数:16位通用寄存器;段寄存器;16位内存操作数(除立即数之外的任何寻址方式)。00000SS:0000SS:SP堆栈段方式:(1)CPU通用寄存器入/出栈,如:PUSHAXPOPBX(2)段寄存器入/出栈,如PUSHCSPOPDS(3)存储单元入/出栈PUSH[BX+DI]POP[2000H]PUSHAX指令分两步执行:1.SP-2SP2.将AH内容送至SP+1所指单元;3.再将AL内容送至SP所指单元;例:MOVAX,1234HPUSHAXPOPAX指令分两步执行:1.先将SP所指单元内容送至AL,然后2.再SP+1所指单元内容送至AH,然后3.SP+2SP例:MOVAX,5678HPOPAX入栈和出栈指令性用于程序保存和恢复数据,或用于转子或中断时保护现场和恢复现场。其主要注意:(1)堆栈操作指令中,有一个操作数是隐含了的,这个操作数就是(SP)指示的栈顶存储单元;(2)8086堆栈都是字操作(3)每执行一条指令,(SP)自动增减2(4)CS寄存器可以入栈,但不能随意弹出一个数据到CS(5)在使用堆栈指令时,要按“先进后出”原则来编写程序(3)交换指令XCHGOPRD1,OPRD2在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。源操作数:寄存器、存储器目的操作数:寄存器、存储器执行的操作:(OPRD1)(OPRD2)例:XCHGBX,[BP+SI](BX)=6F30H(BP)=0200H(SI)=0046H(SS)=2F00H(2F246H)=1234H结果:(BX)=1234H(2F246H)=6F30H例如:XCHGAL,BL;(AL)与(BL)间进行字节交换XCHG[2200H],DX;(DX)与(2200H)、(2201H)两单元间的字交换使用时注意:(1)OPR1和OPR2不能同时为存储器操作数;(2)任一个操作数都不能使用段寄存器,也不能使用立即数。用来对寻址机构进行控制的指令。指令传送到16位目标寄存器中的是存储器操作数的地址,而不是它的内容。1.地址传送指令LEA,LDS,LES把地址传送到指定寄存器。(1)LEA——有效地址送寄存器。LEAREG,SRC(REG)(SRC)目的操作数源操作数(16位通用寄存器)(内存操作数)•该地址常用来设置一个16位的寄存器作为地址指针;•该指令的执行效果与movreg,offsetsrc相同。(三)地址—目标传送指令例:LEABX,[BP+SI];执行后,BX中为(BP)+(SI)的值LEASP,[0520H];执行后,使堆栈指针(SP)=0520H例:leabx,[bx][si]执行前(bx)=1000h(si)=2000h执行后bx=1000h+2000h=3000h(2)LDS把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中LDSREG,SRC(REG)(SRC)(DS)(SRC+2)目的操作数源操作数(16位通用寄存器)(内存操作数)(1)该指令完成一个32位地址指针的传送;(2)该指令通常指定SI作寄存器REG。DS=1000h10100h000200200200h2000hSIDS例:ldsSI,[100h](3)LES把源操作数指定的内存的4个相继字节的内容送至指定寄存器及ES中。LESREG,SRC(REG)(SRC)(ES)(SRC+2)目的操作数源操作数(16位通用寄存器)(内存操作数)(1)该指令完成一个32位地址指针的传送;(2)该指令通常指定DI作寄存器REG。ES=1000h10100h000200200200h2000hDIES例:lesdi,[100h]3.累加器专用指令IN,OUT,XLAT输入输出指令PC机中,所有I/O端口与CPU之间的通信都有IN,OUT指令完成。长格式(直接方式):INAL,PORTOUTPORT,ALPORT——端口地址短格式(间接方式):INAX,DX;从(DX)和(DX)+1所指的两个端口输一个字到AX,低地址端口的值输入到AL,高地址端口的值输到AH1.输入/输出(I/O)指令输入指令长格式:INAL,PORT;将PORT端口字节数据输入到AL短格式:INAX,DX;从(DX)和(DX)+1所指的两个端口输一个字到AX低地址端口的值输到AL,高地址端口的值输到AH输出指令:长格式:OUTPORT,AL;将AL中的1个字节数据输出到PORT端口短格式:OUTDX,AX;将AL中低位字节输出到(DX)所指端口,同时将AH中的高位字节输出到(DX)+1所指的端口例3—3:欲将12位A/D变换器所得数字量输入。这时,A/D变换器应使用一个字端口,设为20H。MOVDX,02F0HINAX,DX注意:(1)指令只能用累加器AX/AL作I/O过程机构,不能用其它寄存器;(2)长格式的I/O指令端口范围为0~FFH。(3)运行有I/O指令的程序时,若无硬件端口的支持,机器将出现死锁(4)在使用短格式I/O指令时,端口地址只能赋给DX。(2)换码指令XLAT功能:将AL指向的换码表中的一个字节的内容送到AL中。操作数:隐含的寄存器BX,AL操作:(AL)((BX)+(AL))应先将表格的首地址送入BX寄存器,将待查的值(码)放入AL中,用它来表示表中某一项与表首址的距离。例3—4:数字0-9对应的格雷码为:18H、34H、05H…(见图)。依次放在内存以TABLE开始的区域,当#10端口输入一位十进制数时,要求将其转换为相应的格雷码再输出给该端口。MOVBX,TABLE;BX指向TABLE的首址INAL,10;从端口0AH输入待查值XLATTABLE;查表转换OUT10,AL;查表结果输出到0AH端口(AL)=70AH12H11H(BX)-TABLE06H(DS)0CH18H(BH)+(AL)11HAL05H09H34H14H18H若10端口输入值为7,则查表转换后输出值为11H如图所示:4.标志寄存器传送指令(1)读取标志指令LAHF功能:把Flag的低字节内容装入寄存器AH中。操作数:隐含的操作数标志寄存器Flag,AH执行的操作:AHFlag的低位字节。ODITSZAPCD7D6D4D2D0FlagAH(2)设置标志指令SAHF功能:把Ah的内容装入Flag的低字节。操作数:隐含的操作数标志寄存器Flag,AH执行的操作:Flag的低位字节AHODITSZAPCFlagAHD7D6D4D2D0注:该指令影响标志位Z、A、P、C、S(3)标志寄存器入栈指令PUSHF功能:将标志寄存器Flag的内容压入堆栈保存。(4)标志寄存器出栈指令POPF功能:把栈中内容弹出至标志寄存器Flag。PUSHF指令将标志寄存器内容推入堆栈顶部,同时修改堆栈指针:(SP)←(SP)-2。该指令执行后,标志寄存器内容不变。POPF指令功能正好相反。注:该指令影响标志位O、S、Z、A、P、C。三、算术运算指令分类名称格式功能OSZAPC加法指令ADDDST,SRC加法(字、字节)OSZAPC带进位加法指令ADCDST,SRC带进位加法(字、字节)OSZAPC加1指令INCOPRD加1(字、字节)OSZAP减法指令SUBDST,SRC减法(字、字节)OSZAPC带借位减法指令SBBDST,SRC带借位减法(字、字节)OSZAPC减1指令DECOPRD减1(字、字节)OSZAP比较指令CMPDST,SRC比较(字、字节)OSZAPC求补指令NEGOPRD求补码OSZAPC无符号数乘法MULSRC不带符号数乘法(字,字节)OC带符号数乘法IMUL
本文标题:微机系统与接口教学资料第三章
链接地址:https://www.777doc.com/doc-3356535 .html