您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第二章8086微处理器的指令.
第二章微型计算机指令系统2.1、指令2.2、寻址方式2.3、指令系统2.1、指令概念1、指令:存放在内存中让CPU完成所需要的操作和处理。2、机器码:能被CPU识别并执行的唯一语言(二进制格式)。3、指令助记符与汇编程序指令格式机器指令:指挥计算机完成某种操作的命令。从计算机组成的层次结构来说,计算机指令有机器指令、伪指令和宏指令之分。指令格式如下:操作符OPD,OPSOPD:目的操作数OPS:源操作数2.2、寻址方式考核知识点:1、立即数寻址2、寄存器操作数寻址3、存储器操作数寻址:(1)直接寻址(2)寄存器间接寻址(3)变址寻址(4)基址寻址(5)基址-变址寻址1、立即数寻址立即寻址方式中,指令操作码和操作数都在存储器代码段中,源操作数通常是一个常数。功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。图形表示如右:【例2.1】MOVAX,10执行后(AX)=?该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。图形表示:执行:10→AX执行后:(AX)=000AH注意:目标操作数通常是寄存器;源操作数的位数必须与目标操作数寄存器匹配;段寄存器不能作为目标操作数。例如:MOVAL,1234HMOVAX,10MOVDS,1234H2.寄存器寻址寄存器寻址方式的操作数在指令指明的寄存器中。源操作数和目标操作数都是寄存器。功能:操作数直接存放在寄存器R中。注意:两寄存器位数匹配。例:MOVAX,BXMOVDS,AXMOVAL,DX;非法操作【例2.2】下列程序执行后,(AX)=?,(BX)=?MOVAX,1234HMOVBX,5678HADDAX,BX该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。图形表示:执行:1234H→AX5678H→BX(AX)+(BX)→AX执行后:(AX)=68ACH,(BX)=5678H3、存储器操作数寻址如果操作码所需操作数存放在内存储器中,则指令中需要给出操作数的地址信息。为了提高程序的灵活性,8086指令系统提供了多种存储器寻址方式。(1)直接寻址(2)寄存器间接寻址(3)变址寻址(4)基址寻址(5)基址-变址寻址(6)关于段跨跃前缀(1)直接寻址存储器操作数(mem)概念格式:源操作数或目的操作数其中之一直接给出了mem的有效地址(EA)。EA需要加上方括号MOV[1234H],[2345H];非法操作MOVAL,45H;立即数寻址功能:指令下一个单元的内容是操作数的偏移地址EA。图形表示:段寄存器(“偏移基准”):在直接寻址过程中,8086CPU指令中给出的EA与DS组合在一起构成逻辑地址DS:EA。但是也允许段超越。例:MOV[1234H],AXMOVES:[1234H],AXMOVAX,SS:[3100H]【例2.3】寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:MOVAX,BUF执行后:(AX)=?图形表示:执行:(32000H)→AX执行后:(AX)=4545H(2)寄存器间接寻址寄存器间接寻址方式中,操作数都是寄存器,且其中之一是包含EA的寄存器。如:MOVAX,[SI]MOV[BP],BX功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。注意:1)允许存放EA的寄存器只有四个:SI、DI、BX、BP;2)存放EA的寄存器要用“[]”3)段寄存器(“偏移基准”)SI--DS、DI--DS、BX--DS、BP—SS,允许段超越。如:MOVAX,ES:[SI]MOVDS:[BP],BX寄存器间接寻址示意图:例如:MOVAX,[BX]若(DS)=2000H,(BX)=1000H,物理地址=20000H+1000H=21000H。指令执行前,(AX)=2030H,(21000H)=0A0H,(21001H)=50H,指令执行后,(AX)=50A0H,(21000H)=0A0H,(21001H)=50H。指令执行情况如下:AXAHAL数据段物理地址A0H21000H50H20001H56H20002H【例2.4】寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234H执行指令:MOVAX,[BP]执行后:(AX)=?(BP)=?(SS)=?(20030H)=?图形表示如下:(3)变址寻址直接寻址和寄存器间接寻址的组合。MOVAX,[SI][1234H]MOVAX,[SI]1234HMOVAX,[SI]+[1234H]MOVAX,1234H[SI]能使用的寄存器:SI--DS,DI--DS功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。(4)基址寻址直接寻址和寄存器间接寻址的组合。MOVAX,[BX][1234H]MOVAX,[BP]1234H能使用的寄存器:BX--DS,BP--SS功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。【例2.5】设执行前:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H执行指令:ADD6[BX],AX执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?图形表示如下:(5)基址变址寻址基址变址寻址方式是基址寻址方式和变址寻址方式的结合(BX,BP;SI,DI)。如果基址寄存器为BX,则段寄存器使用DS;如果基址寄存器用BP,则段寄存器用SS。MOVAX,[BX][SI][1234H];EA=BX+SI+1234HMOVAX,[BX][BP][1234H];非法操作功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。【例2.6】例如MOVAL,[BX+SI](MOVAL,[BX][SI])若指令执行前,(DS)=1000H,(BX)=0010H,(SI)=0002H,(10012H)=45H则EA=(BX)+(SI)=0012H,PA=(DS)×10H+EA=10012H指令执行后(AL)=45H。(5)跨段问题按前述规定:若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。汇编格式:段寄存器名:操作数地址。功能:段寄存器名指明操作数属哪个段。【例2.7】跨段前缀示例。MOVAX,DS:[BP]MOVCX,SS:[SI]该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为:PA1=(DS)左移4位+[BP]PA2=(SS)左移4位+[SI]返回本章首页分别指出下列各指令寻址方式。(1)MOVAX,1000H(2)MOVAX,[1000H](3)MOVAX,[BX](4)MOVAX,[BX+0100H](5)MOVAX,[BX+SI+0010H](6)MOVAX,BX(7)MOVAX,[SI+0100H]历年典型考题2012年考题第7题2011年考题第7题历年典型考题2009年考题第4题2.38086指令系统包括数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、跳转指令、处理器控制指令。后几节将分别介绍这些指令的语句格式和功能。2.3.1数据传送指令2.3.2算术运算指令2.3.3逻辑运算与移位指令2.3.4串操作指令2.3.5跳转指令2.3.6处理器控制指令返回本章首页2.3.1数据传送指令1数据传送指令2输入输出指令3目标地址传送指令4标志传送指令返回本节1通用数据传送指令(1)传送指令MOV(2)堆栈指令PUSH/POP(3)数据交换指令XCHG(4)查表指令XLAT(1)传送指令MOV语句格式:MOVOPD,OPS功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)→OPD。下图4.1描述了MOV指令在传送数据时允许传送的路径及类型。图2.1MOV指令所允许的数据传送路径及类型注意:1)不允许两个操作数都是段寄存器;2)不允许立即数直接传送给段寄存器3)不允许两个操作数都是存储器操作数MOV指令的形式有如下几种:1)从通用寄存器到通用寄存器MOVreg1,reg22)立即数传送到通用寄存器MOVreg,data3)通用寄存器和存储单元之间MOVmem(reg),reg(mem)4)立即数传送到存储单元MOVmem,data5)段寄存器与通用寄存器间的数据传送MOVseg,reg或MOVreg,seg6)段寄存器与存储单元间的数据传送MOVseg,mem或MOVmem,seg【例2.8】存储器与寄存器间数据传送MOVAX,BUF;BUF是变量,源操作数为直接寻址MOVBH,[DI];源操作数为寄存器间接寻址MOVDI,ES:3[SI];源操作数为变址寻址,使用跨段前缀MOVBP,3[BX+SI];源操作数为基址加变址寻址MOVBUFA,DL;BUFA是一字节变量MOV[BP],AX;使用SS段寄存器MOVDS:[BP],DL;使用跨段前缀MOVBUF,DS;BUF是个字变量MOVES,BUF(2)堆栈操作指令1)进栈指令PUSH2)出栈指令POP1)进栈指令PUSH语句格式:PUSHOPS功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。即:①(SP)-1→SP(OPS)15~8→[SP]②(SP)-1→SP(OPS)7~0→[SP]2)出栈指令POP语句格式:POPOPD功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。从POP指令功能可看出,该指令为PUSH指令的逆过程。即:①([SP])→(OPD)7~0(SP)+1→SP②([SP])→(OPD)15~8(SP)+1→SP例:若寄存器AX,BX的内容分别为1110H,5678H时,依次执行PUSHAX,PUSHBX,POPAX,POPBX后,则寄存器AX和BX的内容分别为()A.1110H,7856HB.5678H,1234HC.5678H,1110HD.7856H,1011H(3)数据交换指令XCHG语句格式:XCHGOPD,OPS功能:将源地址与目的地址中的内容互换。即(OPD)→OPS,(OPS)→OPD。不允许两操作数同时为存储器。【例2.9】寄存器与存储器之间数据交换。MOVAX,5678H;(AX)=5678HMOVBX,0FFFFH;(BX)=0FFFFHXCHGAX,BX;(AX)=0FFFFH,(BX)=5678H(4)查表转换指令XLAT语句格式:XLAT功能:([BX+AL])→AL。执行XLAT之前,表首地址→BX,表项序号→AL;XLAT执行之后,指定序号的表项→AL。例:1、阅读程序,说明程序执行后AX,BX的值;MOVAX,2000HMOVBX,3010HPUSHAXPUSHBXPOPAXPOPBXAX=________,BX=________例:2、运行如下程序,写出运行结果MOVDX,2000HMOVWORDPTR[2000H],2340H;PTR指定存储器操作数的类型MOVBX,[2000H]PUSHBXPU
本文标题:第二章8086微处理器的指令.
链接地址:https://www.777doc.com/doc-4050964 .html