之控制转移ppt课件_1_第1页
之控制转移ppt课件_1_第2页
之控制转移ppt课件_1_第3页
之控制转移ppt课件_1_第4页
之控制转移ppt课件_1_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

五 控制控制转移 指令控制转移指令分为: 转移指令 子程序调用和返回指令 循环控制指令 中断指令 处理器控制指令1 程序是指令的集合 指令代码在内存中 顺序存放 ,但指令的执行不一定是顺序的在 Pentiun系列中,指令的地址由 CS中的选择子和 EIP两个寄存器决定。 CS和 EIP两寄存器的内容决定了程序的流程程序顺序执行和非顺序执行的概念1 顺序执行顺序执行CPU取来一条指令后,自动将 IP的值加上该指令的字节数,使 IP顺序指向下一条指令, CPU取来紧接着的指令执行。(此时 IP的变化由 CPU内部的硬件自动完成 )2通过通过 控制转移指令改变 CS和 IP的值,使程序产 生分支、调用结构。例:比较 (AX)、 (BX)的大小,将大数存于( max ) 单元。 CMP AX, BX JG great XCHG AX, BX great: MOV max, AX2 非顺序执行3转移指令的实质:改变 IP(或 CS)的内容。所有转移指令不会影响标志位。分为 无条件转移 和 条件转移 两种。1.转移指令关于转移指令和调用指令的寻址4(1) 无条件转移指令无条件转移指令 - JMP本指令无条件转移到指定的目标地址本指令无条件转移到指定的目标地址 ,以执行以执行从该地址开始的程序段。根据设置从该地址开始的程序段。根据设置 CS、 IP的方的方法,法, JMP指令分成指令分成 4种情况种情况 。 段内段内 直接转移:直接转移:指令中给出的指令中给出的 8/16位的位移量位的位移量 加到加到 IP。 CS保持不变。保持不变。 段内段内 间接转移:间接转移:REG/MEM中的中的 16位偏移地址位偏移地址 送送 IP。 CS保持不变。保持不变。 段间段间 直接转移直接转移指令中给出的指令中给出的 16位的段和位的段和 16位的偏移地址位的偏移地址 送到送到 CS和和 IP。 段间段间 间接转移间接转移MEM中给出的中给出的 16位的段和位的段和 16位的偏移地址位的偏移地址 送到送到 CS和和 IP。5转移的目标地址由指令直接给出。段内 转移 ,故转移后 CS内容保持不变 ,只改变IP的值。汇编语言中格式 位移量 转移范围JMP ( SHORT) OPRD 8位 -128 +127 JMP ( NEAR PTR) OPRD 16位 -32768 +32767 OPR-在汇编语言中使用符号地址。在 机器语言 中 是一个 相对于当前 IP的位移量 :例: JMP LPI ; 转向 LPIJMP BBB ; 转向 BBB 段内直接转移6JMP NEXT 指令本身占有两个字节操作码占一个字节; 8位位移量占有一个字节=1050H-1000H源程序 :条件转移指令: JMP next.next: MOV AL,03HE950H.B003H.3000:1000H3000:1050H(IP)当前D8=50H(IP)=(IP)当前 +D8内存例:代码段内有一条无条件转移指令执行操作:( IP) ( IP) 当前 +D8 qqq:7JMP SHORT OPR 8位位移量位位移量 D8的范围在(的范围在( -128 127) 之间之间 ,否则出错否则出错 JMP NEAR PTR OPR 指令本身占有三个字节,位移量为 D16, 占有两个字节,范围: -32768+32767H。 可以转移到段内的任一位置。8 段内间接转移转移的目标地址由 寄存器 或 存储单元 的内容给出。例 1: JMP SI若指令执行前 (SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处执行。9例 2: JMP BX+DI设指令执行前 :(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H; 则指令执行后 :(IP)=2350H在汇编语言中 ,段内间接寻址通常写成:JMP WORD PTRBX+DI表示所取得的目标地址是一个字。(只改变IP)10 段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。例: JMP 2000:1000H执行时 ,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符 FAR PTR。例: JMP FAR PTR far_label其中的 far_label为远类型的标号。11例:C1 SEGMENTJMP FAR PTR next_progC1 ENDSC2 SEGMINTnext_prog: C2 ENDSFAR 远属性标号远属性标号 , 标号与控制转移指令不在同一代码段中。标号与控制转移指令不在同一代码段中。12转移的目的地址 (段和偏移 )在两个相邻的字存储单元 中。例如:JMP DWORD PTRSI设指令执行前 :(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H则指令执行后 :(IP)=1000H,(CS)=4A00H于是转到 4B000H处开始执行指令。例中的 DWORD PTR表示转移地址是一个双字。 段间间接转移1340001212+)41212DSSI0010004A4121241213412144121510004A00IPCS段间间接转移操作示意图1111111111101100JMP DWORD PTR SI的机器码DS:SI14条件转移指令根据标志位的状态或比较的结果来决定是否进行分支转移。格式: JXX label ; xx为条件名称缩写8086指令的转移范围为 -128 +127字节。Pentiun最大到 -32768 +32767(2)条件转移指令 - JXX条件转移指令可实现程序的条件分支。条件转移指令可实现程序的条件分支。15 以单个状态标志作为转移条件助记符 转移条件助 记 符 转 移条件 助 记 符 转 移条件JZ/JE ZF=1 JNZ/JNE ZF=0JS SF=1 JNS SF=0JO OF=1 JNO OF=0JP/JPE PF=1 JNP/JPO PF=0JC CF=1 JNC CF=0 以 CX的值为 0作为转移条件助 记 符 转 移条件JECX ECX=0JCXZ CX=0按转移条件不同,条件转移指令可以分为四大类:16助 记 符 转 移条件JA/JNBE CF ZF=0 高于 /不低于等于JAE/JNB/JNC CF=0 高于或等于 /不低于 /无 进 位JB/JNAE/JC CF=1 低于 /不高于等于 /有 进 位JBE/JNA CF ZF=1 低于或等于 /不高于 以两个无符号数比较的结果作为转移条件 以两个带符号数比较的结果作为转移条件助 记 符 转 移条件 JG/JNLE ( SFOF) ZF=0 大于 /不小于等于JGE/JNL SFOF=0 大于或等于 /不小于JL/JNGE SFOF=1 小于 /不大于等于JLE/JNG ( SFOF) ZF=1 小于或等于 /不大于172 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,注意几点:1 所有条件转移指令只能用段内直接寻址方式都是相对转移,范围( -128+127)或( -32768+32767) 。3 条件转移指令不影响标志位18条件转移指令应用举例 :例 1:以十六进制数形式显示 BX中的内容。MOV BX, 1234HMOV CH, 4 ; CH做循环计数器ROT: MOV CL, 4 ; CL做移位计数器ROL BX, CL ; 将最高 4位移到低 4位MOV AL, BLAND AL, 0FH ; 取出低 4位ADD AL, 30H ; 转换为 ASCII码CMP AL, 39H ; 与 9 比较JBE DISP ; 若 (AL) 9, 则转显示ADD AL, 7 ; 若 (AL) 9, 再加 7转为 A-FDISP: MOV DL, AL ; (DL) 字符MOV AH, 2INT 21H ; 显示输出DEC CH ; 4个十六进制数显示完否 ?JNZ ROT ; 没有 , 循环MOV DL, 48H ; HMOV AH, 2INT 21H ; 最后显示 H19ASCII码 美国标准信息交换代码20例 2:在 8000H开始的长度为 1000字节的字符串中查找 S,若找到,把其偏移地址记录在 ADDR中,否则 ADDR单元置为 0FFFFH。MOV DI,8000HMOV CX,1000MOV AL, SMOV ADDR,0FFFFH GOON: SCASBLOOPNZ GOONJNZ DONE DEC DIMOV ADDR,DIDONE: HLT 212.子程序 调用和返回指令特点 调用子程序时, IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到 IP(CS)。 子程序执行结束后一般均要返回调用程序。 一次定义,多次调用; 可带参数调用,以完成不同的功能。子程序子程序 (过程过程 )一段具有特定功能的,供其它程序调用的公用程序一段具有特定功能的,供其它程序调用的公用程序两条相关指令:两条相关指令:子程序调用指令子程序调用指令 CALL子程序返回指令子程序返回指令 RET优点优点程序代码短程序代码短 ,结构清晰结构清晰 ,便于编程、调试、修改和阅读。便于编程、调试、修改和阅读。22NEAR:调用指令 CALL与过程在同一个代码段中过程 程序中具有独立功能的部分编写成独立程序模块。过程定义格式:过程名 PROC 类型RET过程名 ENDP CALL指令和 RET指令都不影响条件码。过程有两种类型:按过程与调用语句间的位置FAR: 调用指令 CALL与过程不在同一个代码段中23例:例: NEAR 类型过程类型过程code1 SEGMENT ;code段CALL subp ;调用 指令 YYY: MOV BX, AX subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code1 ENDS 24一般格式: CALL sub ;sub为子程序的入口子程序调用有两类。段内调用 段间调用 段内直接调用子程序的偏移地址直接由 CALL指令给出。 格式: CALL NEAR PTR DST CALL执行时:首先将 当前 IP内容(返回地址) 压栈,然后把机器指令中给出的位移量加到 IP上,转到子程序的入口处去执行。注: 返回地址 - CALL指令的 下 一条指令的首地址。(1)调用指令 CALL25例:例: 段内直接调用段内直接调用code1 SEGMENT ;code段CALL subp ;调用 指令 YYY: MOV BX, AX subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code1 ENDS问题:本例中的返回地址? 26子程序的偏移地址在寄存器或存储器中 。 格式: CALL mem16/reg16CALL执行时,它首先将 IP内容 压栈,然后把指定的寄存器 /存储器的内容送入 IP。例:CALL AX ;调用地址由 AX给出 CALL WORD PTRSI ;调用地址由存储器给出 段内间接调用27CALLIPH IPL 代码段代码段数据段数据段对于对于 CALL WORD PTR SI 这条指令这条指令若:若: (DS) = 8000H, (SI) = 1200H则指令操作图示如下。81200H81201H28子程序的段地址和偏移地址直接由 CALL指令给出。 格式: CALL FAR PTR DST;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论