您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 北航微机原理课件第八讲
第八讲8088指令系统(续)2009.4.7(星期二)课程内容:五、控制传送指令六、处理器控制指令如何利用地址线产生脉冲8284时钟+5VMN/MXA19-A16CLKRESETREADYAD15-AD0DENDT/RBHEALESTBRDWRM/IOBHE存储器I/O接口数据总线地址总线控制总线8282锁存器(3片)OERESETDIRTOE8286收发器(2片)8086奇偶READY三态总线两态总线KKK:MOVAL,(BX)CALLDELAYINCBXMOVAL,(BX)CALLDELAYJMPKKK五.控制传送指令(Controltransferinstructions)控制传送指令概述控制传送指令包括四种:转移指令,循环控制指令,过程调用指令,中断指令。指令类型助记符无条件转移JMP条件转移JE/JZ,JNE/JNZ,JS,JNS,JP/JPE,JNP/JPO,JO,JNO,JC,JNC,JB/JNAE,JAE/JNB,JA/JNBE,JBE/JNA,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JCXZ循环控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ过程调用CALL,RET中断指令INT,INTO,IRET(一)、无条件转移指令1.JMP(jmp)目标标号JMP指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。(1)段内直接转移:只要改变IP寄存器的内容指在同一段的范围之内进行转移(IP)←(IP)当前+目标标号所代表的地址偏移量地址偏移量又称为符号地址目标标号为8位,称为短转移。目标标号为16位,称为近转移。例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。JMPSHORTNEXT指令执行过程:NEXT—在汇编语言中使用符号地址(IP)←(IP)当前+D8(8位带符号数)源程序:条件转移指令:JMPSHORTnext.........next:MOVAL,03HOP......OP03H......3000:1000H3000:1050H(IP)当前(NEXT的值定义为50H)(IP)=(IP)当前+D8内存向前跳,D8为正数,往回跳,D8用补码JMPSHORTABC若ABC=0F0H,则回跳16字节(2)段内间接转移:(CS)不变,只改变(IP)格式:JMPOPROPR—为16位寄存器、或存储器(除立即数以外的任何一种寻址方式)执行操作:(IP)(EA)或(IP)(reg16)IP指针的内容根据寄存器或存储器(数据段、附加段、堆栈段)的内容而改变。指令格式举例:JMPBXJMPSIJMPTABLE[BX];操作数已定义为16位存储器JMPALPHA_WORD;操作数已定义为16位存储器JMPWORDPTR[BP][DI];操作数已定义为16位存储器例:(IP)=5000H,(CS)=3000H,(DS)=1000H,(BX)=1000H(11000H)=1234H,JMPBX;(IP)=1000H,在当前段内,属于;寄存器寻址JMPWORDPTR[BX];(CS)=3000H,(IP)=1234H在当前段内,(PA)=(16d(DS)+(BX))=(11000H)为1234H将PA地址存储器的内容(1234H)给IP;属于寄存器间接寻址。(3)段间直接转移:要修改IP、CS寄存器的内容。转到另一段去执行程序。转移目标地址=新的段地址和偏移地址两部分组成。格式:JMPFARPTROPR;OPR—在汇编语言中使用符号地址(如标号AKK,假设定义在另一程序段CC00:0044)。转移地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址JMPFARPTRAKK执行操作:(IP)←OPR所在的段内偏移地址0044H。(CS)←OPR所在的段的段址CC00H。直接转移通过符号地址加载IP和CS,间接转移通过存储器内容加载IP和CS.(4)段间间接转移:(CS)、(IP)都改变格式:JMPDWORDPTROPROPR—存储器操作数(除立即数和寄存器以外的任何一种寻址方式)执行操作:将4字节连续地址分别送给IP和CS(IP)←(EA)(CS)←(EA+2)例:已知(BX)=1000H,(SI)=2000H,(DS)=2000H(23000H)=2212H,(23002H)=4434HJMPDWORDPTR[BX][SI]则:(BX)+(SI)=3000H(IP)=(PA)=(16d(DS)+(BX)+(SI))=(23000H)=2212H(CS)=(PA+2)=4434H2.条件转移指令指令格式:JccOPR操作:根据上一条指令所设置的条件码来判别测试条件转移。每一种条件转移指令都有它的测试条件。满足条件时:(IP)←(IP)当前+OPR(D8)使用相对寻址方式,范围-128~+127个字节不满足条件时:(IP)不变,顺序执行下一条指令(该指令为两字节长度,一字节为指令功能码,一指令为一个字节的相对跳转地址偏移量)按转移条件不同,条件转移指令可以分为四大类:①以单个状态标志作为转移条件助记符转移条件助记符转移条件助记符转移条件JZ/JEZF=1JNZ/JNEZF=0JSSF=1JNSSF=0JOOF=1JNOOF=0JP/JPEPF=1JNP/JPOPF=0JCCF=1JNCCF=0②以CX的值为0作为转移条件助记符转移条件JCXZCX=0助记符转移条件JA/JNBECF∨ZF=0高于/不低于等于JAE/JNB/JNCCF=0高于或等于/不低于/无进位JB/JNAE/JCCF=1低于/不高于等于/有进位JBE/JNACF∨ZF=1低于或等于/不高于③以两个无符号数比较的结果作为转移条件④以两个带符号数比较的结果作为转移条件助记符转移条件JG/JNLE(SF⊕OF)∨ZF=0大于/不小于等于JGE/JNLSF⊕OF=0大于或等于/不小于JL/JNGESF⊕OF=1小于/不大于等于JLE/JNG(SF⊕OF)∨ZF=1小于或等于/不大于注意几点:①所有条件转移指令都是相对转移形式,(两字节指令)范围(-128~+127)。当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。②条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,③条件转移指令不影响标志位例:程序段2000H:3040HDONE:MOVAX,05H…………2000H:3079HJNEDONE求DONE为何值(IP)=(IP)当前程序段2000H:3040HDONE:MOVAX,05H…………2000H:3079HJNEDONE执行此指令时,IP指针为何OP05H......OPC5H......2000:3079H2000:3040H(IP)当前内存2000:307BHDONE001100000111101111111111110001010011000001000000+307BHC5H条件转移指令应用例:比较二个数是否相等如相等做动作1否则做动作2……CMPAX,BXJEaction_1Action_2:…………action_1:……或……CMPAX,BXJNZaction_2action_1:……action_2:……=?AXBXYaction_1action_2N=?AXBXNaction_2action_1Y例:在M中有一个首地址为array的N字数组,要求测试其中正数、0及负数的个数.(带符号数判断)正数个数放在:(DI)中,0的个数放在:(SI)中,负数的个数放在:N-(DI)-(SI)送(AX)如果没有负数转skip,如果有负数转neg_val程序:movcx,N;N字数组movbx,0movdi,bxmovsi,bxagain:cmpwordptrarrary[bx],0jleless_or_agincdi;正数个数jmpshortneatless_or_ag:jlneatincsi;0的个数neat:addbx,2deccxjnzagainmovax,Nsubax,disubax,sijzskip;没有负数jmpnearptrneg_val;有负数skip:……neg_val:……(三)过程(子程序)调用指令子程序—程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义格式:符号名(AA)PROC类型(FAR/NEAR)……RET(RETURN)符号名(AA)ENDP子程序调用和返回指令:CALLAA过程有两种类型:按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中CALL指令和RET指令都不影响条件码。CALL(Callaprocedure)调用CALL调用指令调用地址由指令给出调用时:将当前地址入栈(CS)。(IP)。CALL调用指令有4种:段内直接调用段间直接调用段内间接调用段间间接调用例:CSEG1SEGMENTCALLFARPTRsubp;此处的CS:IP入栈转subp…CSEG1ENDSCSEG2SEGMENT…subpPROCFAR…RETsubpENDPCSEG2ENDS(2)、RET(Returefromprocedure)返回RET返回指令放在子程序的末尾使子程序在功能完成后返回调用程序继续执行。*为能准确返回,返回指令类型与调用指令类型相对应。RET返回指令有4种:段内返回段间返回段内带立即数返回段间带立即数返回在子程序调用时,返回地址入栈返回时:将返回地址出栈(IP)(段内或段间)。(CS)(段间)。操作数执行操作符号地址(SHORT)(IP)←(IP)当前+8位符号地址位移量(段内短跳)符号地址(NEAR属性)(IP)←(IP)当前+16位符号地址位移量(段内近跳)reg(16位)或mem(W类型)(IP)←(reg)或(IP)←(mem)(段内间接跳)符号地址(FAR属性)(IP)←符号地址的偏值(段间直接跳)(CS)←符号地址的段值mem(DW类型)(IP)←(mem),(CS)←(mem+2)(段内短跳)◢当前IP的值为控制转移指令下一条指令的偏移地址。◢位移量=符号地址的偏移量-当前IP的值。◢符号地址(目标地址)=当前IP的值+位移量(3)、小结:指令格式:JMP操作数转移方式:由CS是否变化、以及操作数类型决定情况如下表转移方式CS操作数跳转范围段内直接短方式不变符号地址(SHORT)-128~127即0~FFH段内直接近方式不变符号地址(NEAR属性)一个段内0~FFFFH段内间接方式不变Regmem(W类型)一个段内0~FFFFH段间直接方式变符号地址(FAR属性)整个内存0~FFFFFH段间间接方式变mem(DW类型)整个内存0~FFFFFH各控制转移指令允许使用的转移方式转移方式无条件转移JMP条件转移Jcc循环转移LOOPxx子程调用CALL段内直接短方式√√√×段内直接近方式√××√段内间接方式√××√段间直接方式√××√段间间接√××√例:JMPagain(√)JMPBX(√)JMPWORDPTR[BX](√)JMPDWORDPTR(√)JZAX(不能是字,AX)(×)JNZnext(?)(若next的位移量超出-128~127)(四)循环控制指令格式:LOOPxx符号地址执行操作:①(CX)←(CX)-1此操作不影响标志②检查转移条件xx,满足转向目标地址去执行;不满足执行LOOPxx后一条指令转移方式只允许段内直接短方式,跳转范围-128~127助记符转移条件不转移条件LOOPCX≠0CX=0LOOPZCX≠0且ZF=1(相等)CX=0或ZF=0(不等)LOOPNZCX≠0且ZF=0(不等)CX=0或ZF=1(相等)与条件转移指令不同的是:循环指令隐含(CX)减1操作。例:用循环指令将BL寄存器的内容按二进制形式显示出来学习:LOOP指令MOVCX,8next:ROLBL,1MOVDL,BLANDDL,00000001BA
本文标题:北航微机原理课件第八讲
链接地址:https://www.777doc.com/doc-7009949 .html