收藏 分销(赏)

pentiun之控制转移.pptx

上传人:精**** 文档编号:4171608 上传时间:2024-08-10 格式:PPTX 页数:46 大小:281.45KB
下载 相关 举报
pentiun之控制转移.pptx_第1页
第1页 / 共46页
pentiun之控制转移.pptx_第2页
第2页 / 共46页
点击查看更多>>
资源描述
1 1 程序是指令的集合程序是指令的集合 指令代码在内存中指令代码在内存中顺序存放顺序存放,但指令的执行不但指令的执行不一定是顺序的一定是顺序的在在Pentiun系列中,指令的地址由系列中,指令的地址由CS中的选择子和中的选择子和EIP两个寄存器决两个寄存器决定。定。CS和和EIP两寄存器的内容决定了程序的流程两寄存器的内容决定了程序的流程程序顺序执行和非顺序执行的概念程序顺序执行和非顺序执行的概念1 1 顺序执行顺序执行顺序执行顺序执行 CPU取来一条指令后,自动将取来一条指令后,自动将IP的值加上该指令的字节数,的值加上该指令的字节数,使使IP顺序指向下一条指令,顺序指向下一条指令,CPU取来紧接着的指令执行。取来紧接着的指令执行。(此时此时IP的变化由的变化由CPU内部的硬件自动完成内部的硬件自动完成)2 2 通过通过通过通过控制转移指令改变控制转移指令改变CS和和IP的值,使程序产的值,使程序产 生分支、调用结构。生分支、调用结构。例:比较例:比较(AX)、(BX)的大小,将大数存于(的大小,将大数存于(max)单元。单元。CMP AX,BX JGJG great XCHG AX,BX great:MOV max,AX 2 2 非顺序执行非顺序执行非顺序执行非顺序执行3 3转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。1.转移指令关于转移指令和调用指令的寻址关于转移指令和调用指令的寻址4 4(1)无条件转移指令无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。段内段内段内段内直接转移:直接转移:直接转移:直接转移:指令中给出的指令中给出的指令中给出的指令中给出的8/168/168/168/16位的位移量位的位移量位的位移量位的位移量加到加到加到加到IPIPIPIP。CSCSCSCS保持不变。保持不变。保持不变。保持不变。段内段内段内段内间接转移:间接转移:间接转移:间接转移:REG/MEMREG/MEMREG/MEMREG/MEM中的中的中的中的16161616位偏移地址位偏移地址位偏移地址位偏移地址送送送送IPIPIPIP。CSCS保持不变。保持不变。保持不变。保持不变。段间段间段间段间直接转移直接转移直接转移直接转移 指令中给出的指令中给出的指令中给出的指令中给出的1616位的段和位的段和位的段和位的段和1616位的偏移地址位的偏移地址位的偏移地址位的偏移地址送到送到送到送到CSCS和和和和IPIP。段间段间段间段间间接转移间接转移间接转移间接转移 MEMMEMMEMMEM中给出的中给出的中给出的中给出的1616位的段和位的段和位的段和位的段和1616位的偏移地址位的偏移地址位的偏移地址位的偏移地址送到送到送到送到CSCS和和和和IPIP。5 5转移的目标地址由指令直接给出。段内转移,故转移后CS内容保持不变,只改变IP的值。汇编语言中格式汇编语言中格式 位移量位移量 转移范围转移范围JMP JMP(SHORTSHORT)OPRD OPRD 8 8位位 -128 -128+127+127 JMP JMP(NEAR PTRNEAR PTR)OPRD 16OPRD 16位位 -3276832768+32767 32767 OPR-在汇编语言中使用符号地址。在汇编语言中使用符号地址。在在机器语言机器语言中中是一个是一个相对于当前相对于当前相对于当前相对于当前IPIPIPIP的位移量的位移量的位移量的位移量:例:例:JMPJMP LPI LPI ;转向转向LPILPI JMP JMP BBB BBB;转向转向BBBBBB 段内直接转移段内直接转移6 6 JMP NEXT 指令本身占有两个字节指令本身占有两个字节 操作码占一个字节;操作码占一个字节;8位位移量占有一个字节位位移量占有一个字节=1050=1050H-1000HH-1000H源程序源程序 :条件转移指令:条件转移指令:JMPJMPnextnext.next:next:MOV AL,03HMOV AL,03HE9E95050H H.B0B00303H H.3000:10003000:1000H H3000:10503000:1050H H(IP)IP)当前当前D D8 8=50=50H H(IP)=(IP)IP)=(IP)当前当前+D8D8内存内存例:代码段内有一条无条件转移指令例:代码段内有一条无条件转移指令例:代码段内有一条无条件转移指令例:代码段内有一条无条件转移指令执行操作:(执行操作:(IP)(IP)当前当前+D8 qqq:qqq:7 7JMP SHORT OPR 8 8位位移量位位移量位位移量位位移量D D8 8的范围在(的范围在(的范围在(的范围在(-128 127-128 127)之间之间之间之间,否则出错否则出错否则出错否则出错 JMP NEAR PTR OPR 指令本身占有三个字节,指令本身占有三个字节,位移量为位移量为D16,占有两个字节,范围:占有两个字节,范围:-32768+32767H。可可以转移到段内的任一位置。以转移到段内的任一位置。8 8段内间接转移段内间接转移转移的目标地址由寄存器寄存器或存储单元存储单元的内容给出。例例1:JMP SI若指令执行前(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处执行。9 9例例2:JMP BX+DI设指令执行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H;则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMPJMP WORD PTRWORD PTRBX+DIBX+DI表示所取得的目标地址是一个字。(只改变IP)1010段间直接转移段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。例:例:JMP2000:1000H执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。例:例:JMPFAR PTR far_label其中的far_label为远类型的标号。1111例:例:C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEGMINT next_prog:C2 ENDSFAR FAR 远属性标号远属性标号远属性标号远属性标号,标号与控制转移指令不在同一代码段中。标号与控制转移指令不在同一代码段中。标号与控制转移指令不在同一代码段中。标号与控制转移指令不在同一代码段中。1212转移的目的地址转移的目的地址(段和偏移段和偏移)在两个相邻的在两个相邻的字存储单元字存储单元中。例如:中。例如:JMPJMP DWORD PTRSIDWORD PTRSI设指令执行前设指令执行前:(:(DS)=4000H,(SI)=1212H,DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H (41212H)=1000H,(41214H)=4A00H则指令执行后则指令执行后:(:(IP)=1000H,(CS)=4A00HIP)=1000H,(CS)=4A00H于是转到于是转到4 4B000HB000H处开始执行指令。处开始执行指令。例中的例中的DWORD PTRDWORD PTR表示转移地址是一个双字。表示转移地址是一个双字。段间间接转移段间间接转移131340001212+)41212DSSI0010004A 4121241213412144121510004A00IPCS段间间接转移操作示意图段间间接转移操作示意图1111111111101100JMP DWORD PTR SI的机器码DS:SI1414条件转移指令根据标志位的状态或比较的结果来决定是否进行分支转移。格式:JXX label;xx为条件名称缩写8086指令的转移范围为-128+127字节。Pentiun最大到-32768+32767(2)(2)条件转移指令条件转移指令 -J-JXX条件转移指令可实现程序的条件分支。1515 以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件助记符助记符助记符助记符转移条件转移条件转移条件转移条件助记符助记符助记符助记符转移条件转移条件转移条件转移条件JZ/JEJZ/JEZF=1ZF=1JNZ/JNEJNZ/JNEZF=0ZF=0JSJSSF=1SF=1JNSJNSSF=0SF=0JOJOOF=1OF=1JNOJNOOF=0OF=0JP/JPEJP/JPEPF=1PF=1JNP/JPOJNP/JPOPF=0PF=0JCJCCF=1CF=1JNCJNCCF=0CF=0 以以CX的值为的值为0作为转移条件作为转移条件助记符助记符助记符助记符转移条件转移条件转移条件转移条件JECXJECXECX=0ECX=0JCXZJCXZCX=0CX=0按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类:1616助记符助记符助记符助记符转移条件转移条件转移条件转移条件JA/JNBEJA/JNBECFCF ZF=0ZF=0高于高于高于高于/不低于等于不低于等于不低于等于不低于等于JAE/JNB/JNCJAE/JNB/JNCCF=0 CF=0 高于或等于高于或等于高于或等于高于或等于/不低于不低于不低于不低于/无进位无进位无进位无进位JB/JNAE/JCJB/JNAE/JCCF=1CF=1 低于低于低于低于/不高于等于不高于等于不高于等于不高于等于/有进位有进位有进位有进位JBE/JNAJBE/JNACFCF ZF=1ZF=1 低于或等于低于或等于低于或等于低于或等于/不高于不高于不高于不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件助记符助记符助记符助记符转移条件转移条件转移条件转移条件JG/JNLEJG/JNLE(SFSFOFOF)ZF=0ZF=0大于大于大于大于/不小于等于不小于等于不小于等于不小于等于JGE/JNLJGE/JNL SFSFOF=0OF=0 大于或等于大于或等于大于或等于大于或等于/不小于不小于不小于不小于JL/JNGEJL/JNGE SFSFOF=1OF=1 小于小于小于小于/不大于等于不大于等于不大于等于不大于等于JLE/JNGJLE/JNG(SFSFOFOF)ZF=1ZF=1小于或等于小于或等于小于或等于小于或等于/不大于不大于不大于不大于17172 条件转移指令中,相当一部分指令是在比较完二个数大小后,条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,根据结果而决定是否转移,注意几点:注意几点:1 所有条件转移指令只能用段内直接寻址方式所有条件转移指令只能用段内直接寻址方式 都是相对转移,范围(都是相对转移,范围(-128+127)或()或(-32768+32767)。3 条件转移指令不影响标志位条件转移指令不影响标志位1818条件转移指令应用举例条件转移指令应用举例条件转移指令应用举例条件转移指令应用举例:例例例例1 1 1 1:以十六进制数形式显示:以十六进制数形式显示:以十六进制数形式显示:以十六进制数形式显示BXBXBXBX中的内容。中的内容。中的内容。中的内容。MOVMOVBX,1234HBX,1234HMOVMOVCH,4CH,4 ;CH;CH做循环计数器做循环计数器ROT:ROT:MOVMOVCL,4CL,4;CL;CL做移位计数器做移位计数器 ROLROLBX,CLBX,CL;将最高将最高4 4位移到低位移到低4 4位位 MOVMOVAL,BLAL,BL ANDANDAL,0FHAL,0FH;取出低取出低4 4位位 ADDADDAL,30HAL,30H;转换为转换为ASCIIASCII码码 CMPCMPAL,39HAL,39H;与与 9 9 比较比较 JBE JBE DISPDISP;若若(AL)AL)9,9,则转显示则转显示 ADDADDAL,7AL,7;若若(AL)AL)9,9,再加再加7 7转为转为 A-FA-FDISP:DISP:MOVMOVDL,ALDL,AL;(DL);(DL)字符字符 MOVMOVAH,2AH,2 INTINT21H21H;显示输出显示输出 DECDECCHCH;4;4个十六进制数显示完否个十六进制数显示完否?JNZJNZROTROT;没有没有,循环循环 MOVMOVDL,48HDL,48H;H;H MOVMOVAH,2AH,2 INTINT21H21H;最后显示最后显示 HH1919 ASCII码美国标准信息交换代码2020例例2 2:在:在8000H8000H开始的长度为开始的长度为10001000字节的字符串中字节的字符串中查找查找SS,若找到,把其偏移地址记录在,若找到,把其偏移地址记录在ADDRADDR中,中,否则否则ADDRADDR单元置为单元置为0FFFFH0FFFFH。MOV DI,8000H MOV DI,8000H MOV CX,1000 MOV CX,1000 MOV AL,S MOV AL,S MOV ADDR,0FFFFH MOV ADDR,0FFFFH GOON:SCASB GOON:SCASB LOOPNZ LOOPNZ GOONGOON JNZ DONE JNZ DONE DEC DI DEC DI MOV ADDR,DI MOV ADDR,DI DONE:HLT DONE:HLT 21212.子程序子程序调用和返回指令特点特点特点特点调用子程序时,调用子程序时,调用子程序时,调用子程序时,IP(CS)IP(CS)IP(CS)IP(CS)的内容被压入堆栈栈顶。从子程的内容被压入堆栈栈顶。从子程的内容被压入堆栈栈顶。从子程的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到序返回时,栈顶的内容又被弹出到序返回时,栈顶的内容又被弹出到序返回时,栈顶的内容又被弹出到IP(CS)IP(CS)IP(CS)IP(CS)。子程序执行结束后一般均要返回调用程序。子程序执行结束后一般均要返回调用程序。子程序执行结束后一般均要返回调用程序。子程序执行结束后一般均要返回调用程序。一次定义,多次调用;一次定义,多次调用;一次定义,多次调用;一次定义,多次调用;可带参数调用,以完成不同的功能。可带参数调用,以完成不同的功能。可带参数调用,以完成不同的功能。可带参数调用,以完成不同的功能。子程序子程序子程序子程序(过程过程过程过程)一段具有特定功能的,供其它程序调用的公用程序一段具有特定功能的,供其它程序调用的公用程序一段具有特定功能的,供其它程序调用的公用程序一段具有特定功能的,供其它程序调用的公用程序两条相关指令:两条相关指令:两条相关指令:两条相关指令:子程序调用指令子程序调用指令子程序调用指令子程序调用指令 CALLCALL 子程序返回指令子程序返回指令子程序返回指令子程序返回指令 RETRET优点优点优点优点 程序代码短程序代码短程序代码短程序代码短,结构清晰结构清晰结构清晰结构清晰,便于编程、调试、修改和阅读。便于编程、调试、修改和阅读。便于编程、调试、修改和阅读。便于编程、调试、修改和阅读。2222NEAR:调用指令:调用指令CALL与过程在同一个代码段中与过程在同一个代码段中过程过程程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。过程定义格式:过程定义格式:过程名过程名 PROC PROC 类型类型 RETRET 过程名过程名 ENDP ENDP CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。过程有两种类型:按过程与调用语句间的位置过程有两种类型:按过程与调用语句间的位置FAR:调用指令调用指令CALL与过程不在同一个代码段中与过程不在同一个代码段中2323例:例:NEAR 类型过程类型过程code1 SEGMENT ;code段段 CALL subp ;调用调用 指令指令 YYYYYY:MOV BX,AX subp subp PROC NEAR ;过程定义过程定义 RET ;返回返回 subp ENDP code1 ENDS2424一般格式:一般格式:一般格式:一般格式:CALL CALL CALL CALL subsubsubsub ;subsubsubsub为子程序的入口为子程序的入口为子程序的入口为子程序的入口子程序调用有两类。子程序调用有两类。段内调用段内调用 段间调用段间调用段内直接调用段内直接调用子程序的偏移地址直接由子程序的偏移地址直接由CALLCALL指令给出。指令给出。格式:格式:格式:格式:CALL NEAR PTR DSTCALL NEAR PTR DSTCALL NEAR PTR DSTCALL NEAR PTR DST CALLCALL执行时:首先将执行时:首先将当前当前IPIP内容(返回地址)内容(返回地址)压栈,压栈,然后把机器指令中给出的位移量加到然后把机器指令中给出的位移量加到 IPIP上,转到上,转到子程序的入口处去执行。子程序的入口处去执行。注:注:返回地址返回地址-CALLCALL指令的指令的下下一条指令的首地址。一条指令的首地址。(1)调用指令CALL2525例:例:段内直接调用段内直接调用code1 SEGMENT ;code段段 CALL subp ;调用调用 指令指令 YYYYYY:MOV BX,AX subp subp PROC NEAR ;过程定义过程定义 RET ;返回返回 subp ENDP code1 ENDS问题:本例中的返回地址?问题:本例中的返回地址?2626子程序的偏移地址在寄存器或存储器中子程序的偏移地址在寄存器或存储器中。格式:格式:CALL CALL mem16/reg16mem16/reg16CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。例:CALL CALLAX ;AX ;调用地址由调用地址由AXAX给出给出 CALL CALLWORD PTRSI;WORD PTRSI;调用地址由存储器给出调用地址由存储器给出段内间接调用段内间接调用2727CALL IPH IPL代码段代码段代码段代码段数据段数据段数据段数据段对于对于对于对于 CALL WORD PTR SICALL WORD PTR SI这条指令这条指令这条指令这条指令若:若:若:若:(DS)DS)=8000H8000H,(SI)(SI)=1200H1200H则指令操作图示如下。则指令操作图示如下。81200H81201H2828子程序的段地址和偏移地址直接由子程序的段地址和偏移地址直接由子程序的段地址和偏移地址直接由子程序的段地址和偏移地址直接由CALLCALLCALLCALL指令给出。指令给出。指令给出。指令给出。格式:格式:格式:格式:CALL CALL CALL CALL FAR PTR DST;执行操作:执行操作:执行操作:执行操作:SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2 (SP)-1,(SP)-2)(CS);SP)-1,(SP)-2)(CS);SP)-1,(SP)-2)(CS);SP)-1,(SP)-2)(CS);返回地址的段地址入栈返回地址的段地址入栈返回地址的段地址入栈返回地址的段地址入栈 SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2 (SP)-1,(SP)-2)(IP);SP)-1,(SP)-2)(IP);SP)-1,(SP)-2)(IP);SP)-1,(SP)-2)(IP);返回地址的偏移地址入栈返回地址的偏移地址入栈返回地址的偏移地址入栈返回地址的偏移地址入栈 (IPIP)DSTDST偏移地址偏移地址偏移地址偏移地址 (CSCS)DSTDST段地址段地址段地址段地址段间直接调用段间直接调用2929CSEG1 SEGMENT CALL FAR PTR PPP;AAA处的处的CS:IP入栈,转入栈,转PPP AAA:CSEG1 ENDSCSEG2 SEGMENT PPP PROC FAR RET PPP ENDP CSEG2 ENDS段间直接调用举例段间直接调用举例段间直接调用举例段间直接调用举例3030子程序的段和偏移地址为存储器的连续子程序的段和偏移地址为存储器的连续子程序的段和偏移地址为存储器的连续子程序的段和偏移地址为存储器的连续4 4 4 4个单元中的内容。个单元中的内容。个单元中的内容。个单元中的内容。格式:格式:格式:格式:CALL CALL CALL CALL mem32mem32mem32mem32指令的操作为:指令的操作为:指令的操作为:指令的操作为:SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2 (SP)+1,(SP)(CS);SP)+1,(SP)(CS);SP)+1,(SP)(CS);SP)+1,(SP)(CS);返回地址的段地址入栈返回地址的段地址入栈返回地址的段地址入栈返回地址的段地址入栈SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2 (SP)+1,(SP)(IP);SP)+1,(SP)(IP);SP)+1,(SP)(IP);SP)+1,(SP)(IP);返回地址的偏移地址入栈返回地址的偏移地址入栈返回地址的偏移地址入栈返回地址的偏移地址入栈 CSCSCSCS(mem32+2)(mem32+2)(mem32+2)(mem32+2)IPIPIPIP(mem32)(mem32)(mem32)(mem32)例:例:CALL DWORDCALL DWORD PTRDIPTRDI调用地址在调用地址在DIDI,DI+1DI+1,DI+2DI+2,DI+3DI+3四个存储单元中。低字四个存储单元中。低字内容为偏移地址内容为偏移地址,高字内容为段地址高字内容为段地址。段间间接调用段间间接调用3131CALL代码段代码段代码段代码段数据段数据段数据段数据段 IPH IPL CSH CSLDIDI+1DI+2DI+3段间间接调用示意图段间间接调用示意图CALL DWORDCALL DWORD PTRDIPTRDI3232段内返回指令段内返回指令RETRET的操作为:的操作为:IP(SP)+1,(SP);IP(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到IPIP SP(SP)+2 SP(SP)+2段间返回指令段间返回指令RETRET的操作为:的操作为:IP(SP)+1,(SP);IP(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到IPIP SP(SP)+2 SP(SP)+2 CS(SP)+1,(SP);CS(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到CSCS SP(SP)+2 SP(SP)+2带立即数返回指令:带立即数返回指令:带立即数返回指令:带立即数返回指令:RET NRET NRET NRET N ;N N N N为偶数为偶数为偶数为偶数执行操作:从栈顶弹出返回地址后,再使执行操作:从栈顶弹出返回地址后,再使执行操作:从栈顶弹出返回地址后,再使执行操作:从栈顶弹出返回地址后,再使SPSPSPSP的值加的值加的值加的值加N N N N。例:例:RET 4 RET 4 (2)返回指令RET(子程序中的最后一条指令)3333例如:例如:RET N 堆栈使用情况:堆栈使用情况:CODE CODE SEG MENT SEG MENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:MOV AX,DATA MOV DS,AX PUSH BX PUSH CX CALL DELCHARCALL DELCHARQQQ:MOV AH,4CH INT 21H MAIN ENDPDELCHAR PROC NEAR RET 4RET 4DELCHAR ENDPCODE ENDSCODE ENDS END START(BX)BX)(SP)SP)(CX)CX)QQQ的偏移地址的偏移地址PUSH BXPUSH BXPUSH CXPUSH CXCALL DELCHARCALL DELCHARRET 4RET 4RET 4 堆栈使用情况:堆栈使用情况:34343.循环控制指令l l用在循环程序中以确定是否要继续循环。l l循环次数通常置于CX中。l l转移的目标应在距离本指令-128+127或-32768+32767的范围之内。l l循环控制指令不影响标志位。3535(2)LOOPZ(LOOPE)(2)LOOPZ(LOOPE)(2)LOOPZ(LOOPE)(2)LOOPZ(LOOPE)格式:格式:格式:格式:LOOPZLOOPZLOOPZLOOPZ labellabellabellabel操作:操作:操作:操作:(CX)-1CXCX)-1CX;若若(CX)0ZF=1(CX)0ZF=1,则转至则转至labellabellabellabel处执行处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。(1)(1)(1)(1)LOOPLOOPLOOPLOOP格式:格式:格式:格式:LOOP labelLOOP labelLOOP labelLOOP label操作:操作:操作:操作:(CX)-1CXCX)-1CX;若若(CX)0,CX)0,则转至则转至labellabellabellabel处执行处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。LOOP LOOP指令与下面的指令段等价:指令与下面的指令段等价:DEC CXDEC CX JNZ label JNZ label3636(3)LOOPNZ(LOOPNE)格式:格式:格式:格式:LOOPNZ LOOPNZ LOOPNZ LOOPNZ labellabel操作:操作:操作:操作:(CX)-1CXCX)-1CX;若若(CX)0ZF=0,CX)0ZF=0,则转至则转至labellabel处执行处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。循环指令的例子见下页。循环指令的例子见下页。3737例例例例1 1:给:给:给:给1A000H1A000H开始的开始的开始的开始的256256个内存单元均减去个内存单元均减去个内存单元均减去个内存单元均减去1 1,若,若,若,若 发现某个单元减为发现某个单元减为发现某个单元减为发现某个单元减为0 0则立即退出循环,其后的单元则立即退出循环,其后的单元则立即退出循环,其后的单元则立即退出循环,其后的单元不再减不再减不再减不再减1 1。MOV AX,1A00HMOV AX,1A00H MOV DS,AX MOV DS,AX MOV DI,0 MOV DI,0 MOV CX,256 MOV CX,256 GOON:DEC BYTE PTRDI GOON:DEC BYTE PTRDI INC DI INC DI CMP BYTE PTRDI-1,0 CMP BYTE PTRDI-1,0 LOOPNZ LOOPNZ GOONGOON HLT HLT 3838例例2:在:在40个元素构成的数组中,寻找第一个非零元素个元素构成的数组中,寻找第一个非零元素MOV CX,40;MOV SI,0FFH;NEXT:INC SI;CMP BYTE PTR SI,0;LOOPZ NEXT;(CX)0ZF=1(CX)0ZF=1(CX)0ZF=1(CX)0ZF=1当前元素为当前元素为0且未找完时,继续寻找且未找完时,继续寻找JNZ OKK;退出循环有两种情况:退出循环有两种情况:ZF=0,找到非零元素找到非零元素 或或CX=0:整个数组已找完,未找到非零元素,此时整个数组已找完,未找到非零元素,此时ZF=1CALL DISPLAY;未找到非零元素的处理未找到非零元素的处理RETOKK:.;找到非找到非0元素的处理元素的处理 RET39394.中断指令CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫软中断。中断指令共有三条:(1)INT n 执行类型执行类型n n的中断服务程序,的中断服务程序,N=0N=0255255 (2)INTO 执行溢出中断的中断服务程序执行溢出中断的中断服务程序 (3)IRET/IRETD 从中断服务程序返回调用程序从中断服务程序返回调用程序4040(1)INT n ;n=0255,为中断类型号本指令的操作步骤为:本指令的操作步骤为:(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(FLAGSFLAGSFLAGSFLAGS),SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2 保护标志寄存器的内容保护标志寄存器的内容IF0,TF0IF0,TF0IF0,TF0IF0,TF0 中断服务程序中禁止外部中断服务程序中禁止外部INTRINTR中断和单步中断中断和单步中断(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(CSCSCSCS),SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2,CS(n*4+2)CS(n*4+2)CS(n*4+2)CS(n*4+2)中断服务程序的段地址送入中断服务程序的段地址送入CSCS。n*4n*4为向量地址。该向量为向量地址。该向量 地址中的内容即为中断服务程序入口地址。地址中的内容即为中断服务程序入口地址。(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(SP)-1,(SP)-2)(IPIPIPIP),SP(SP)-2SP(SP)-2SP(SP)-2SP(SP)-2,IP(n*4)IP(n*4)IP(n*4)IP(n*4)中断服务程序的偏移地址送中断服务程序的偏移地址送IPIP。INTINT指令只影响指令只影响IFIF和和TFTF,对其余标志位无影响。对其余标志位无影响。INTINT指令可用于调用系统服务程序,如指令可用于调用系统服务程序,如INT 21HINT 21H4141(2)溢出中断INTO INTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。通常INTO指令安排在有符号数算术运算指令后面。如IMULIMUL DXDXINTOINTO ;若溢出,则启动若溢出,则启动INT 4,INT 4,否则继续否则继续MOVMOV RESULT,AXRESULT,AXMOVMOV RESULT+2,DXRESULT+2,DX 4242用于从中断服务程序返回被中断的程序。任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。该指令执行的操作为:IP(SP)+1,(SP);IP(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到IPIP SP(SP)+2 SP(SP)+2 CS(SP)+1,(SP);CS(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到CSCS SP(SP)+2 SP(SP)+2 FLAGS(SP)+1,(SP);FLAGS(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到FLAGFLAG SP(SP)+2 SP(SP)+2(3)中断返回指令IRET/IRETD43433.3.6 处理器控制指令1.标志操作指令 用来设置标志位的状态。(1)CF设置指令 CLC CLC 0CF0CF STC STC 1CF1CF CMC CMC CFCF变反变反(2)DF设置指令 CLD CLD 0DF(0DF(串操作的指针移动方向从低到高串操作的指针移动方向从低到高)STDSTD 1DF(1DF(串操作的指针移动方向从高到低串操作的指针移动方向从高到低)(3)IF设置指令CLICLI 0IF(0IF(禁止禁止INTRINTR中断中断)STISTI 1IF(1IF(开放开放INTRINTR中断中断)4444格式格式:HLT执行执行 :使使CPU处于暂停状态处于暂停状态,CSCSCSCS:IPIPIPIP指向指向指向指向HLTHLTHLTHLT后面的一条指令的的地址。后面的一条指令的的地址。后面的一条指令的的地址。后面的一条指令的的地址。作用:作用:用于等待外部中断,中断处理结束后,用于等待外部中断,中断处理结束后,继续执行继续执行HLT后的下一条指令后的下一条指令例例:、STI ;允许外部中断允许外部中断 HLT ;等待中断等待中断 SSS:MOV AX,0 、复位信号也可让复位信号也可让复位信号也可让复位信号也可让CPUCPUCPUCPU退出暂停状态。退出暂停状态。退出暂停状态。退出暂停状态。HLTHLTHLTHLT不影响标志位。不影响标志位。不影响标志位。不影响标志位。2.外部同步指令(1)暂停指令暂停指令HLT4545(2)(2)空操作指令空操作指令NOPNOPNOPNOP指令不做任何实质性的操作指令不做任何实质性的操作,但占用但占用3 3个个时钟周期时钟周期,然后执行下一条指令。然后执行下一条指令。多用于延时。多用于延时。(3)(3)总线封锁指令总线封锁指令LOCK实际上是一个指令前缀,可以放在任何一条指实际上是一个指令前缀,可以放在任何一条指令前面。令前面。用来维持总线的锁存信号直到与其联合的指令执行完;用来维持总线的锁存信号直到与其联合的指令执行完;CPU与其他协处理器协同工作时,可以避免破坏有用与其他协处理器协同工作时,可以避免破坏有用信息。信息。4646 指令类型指令类型指令类型指令类型助记符助记符助记符助记符无条件转移无条件转移无条件转移无条件转移JMPJMP条件转移条件转移条件转移条件转移JE/JZ,JNE/JNZ,JS,JNS,JP/JPE,JNP JE/JZ,JNE/JNZ,JS,JNS,JP/JPE,JNP/JPO,JO,JNO,JC,JNC,JB/JNAE,JAE/JNB,/JPO,JO,JNO,JC,JNC,JB/JNAE,JAE/JNB,JA/JNBE,JBE/JNA,JG/JNLE,JGE/JNL,JA/JNBE,JBE/JNA,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JCXZJL/JNGE,JLE/JNG,JCXZ循环控制循环控制循环控制循环控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZLOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ过程调用过程调用过程调用过程调用CALL,RETCALL,RET中断指令中断指令中断指令中断指令INT,INTO,IRETINT,INTO,IRET控制转移指令小结控制转移指令小结
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服