《汇编语言程序设计分支结构优秀PPT.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计分支结构优秀PPT.ppt(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计分支结构汇编语言程序设计分支结构你现在浏览的是第一页,共19页5.2 分支程序设计分支程序设计v分支结构是对问题的处理方法有两种以上不同选择时采用的程序设计方法,在程序中,根据某一判断的不同结果执行不同的程序段。v根据执行的程序段数量的多少不同,可分为双分支结构程序和多分支结构程序。v每一次对条件的判断都会产生两种可能的结果:真(条件满足)或假(条件不满足)。你现在浏览的是第二页,共19页5.2 分支程序设计分支程序设计v1.双分支结构典型的双分支结构程序的流程图:条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。注意第1个分支体后一定要有一个JMP指令跳到第2个
2、分支体后你现在浏览的是第三页,共19页5.2 分支程序设计分支程序设计 条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址你现在浏览的是第四页,共19页5.2 分支程序设计分支程序设计v2.多分支程序设计v多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如:Xor ah,ahXor ah,ah;等效于等效于cmp ah,0cmp ah,0 jz function0jz function0;ah;ah0 0,转向,转向function0function0 dec ah dec ah;等效于等效于cmp ah,
3、1cmp ah,1 jz function1jz function1;ah;ah1 1,转向,转向function1function1 dec ah dec ah;等效于等效于cmp ah,2cmp ah,2 jz function2jz function2;ah;ah2 2,转向,转向function2function2AH=0function0YNAH=1function1YNAH=2function2YN你现在浏览的是第五页,共19页5.2 分支程序设计分支程序设计v地址表形成多分支利用地址表法实现多分支程序设计的一般方法为:把各分支程序段的入口地址(一般是偏移地址,也可以使段地址与偏移
4、地址)依次存放在数据段的一个表中,形成地址表。取各分支程序段的编号作为给分支入口地址的表地址的位移量。某个分支程序入口地址的表地址为:表地址表地址=编号编号*2+入口地址首地址入口地址首地址。根据条件首先在地址表中找到转移的目标地址,然后转到相应位置,从而实现多分支。你现在浏览的是第六页,共19页5.2 分支程序设计分支程序设计v例:用地址表法编写程序实现从低到高逐位检测一个字节数据,找到第一个非0的位数。检测时,为0,则继续检测;为1,则转移到对应的处理程序段显示相应的位数。DATA SEGMENTNUM DB 78HADTAB DW AD0,AD1,AD2,AD3,AD4,AD5,AD6,
5、AD7;地址表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX你现在浏览的是第七页,共19页5.2 分支程序设计分支程序设计 MOV AL,NUM MOV DL,?CMP AL,0 JZ DISP MOV BX,0;BX用来记录位用来记录位1的位数的位数AGAIN:SHR AL,1JC NEXTINC BXJMP AGAINNEXT:SHL BX,1 JMP ADTABBXAD0:MOV DL,0 JMP DISPAD1:MOV DL,1 JMP DISPAD2:MOV DL,2;第;第2位为位为1,J
6、MP DISPAD3:MOV DL,3 JMP DISPAD4:MOV DL,4 JMP DISPAD5:MOV DL,5 JMP DISPAD6:MOV DL,6 JMP DISPAD7:MOV DL,7DISP:MOV AH,2;显示;显示 INT 21H MOV AH,4CH;返回;返回DOS INT 21HCODE ENDS END START你现在浏览的是第八页,共19页第6章 子程序结构v把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序v子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率你现在浏览的是第九页,共19页6.1 子程序的
7、设计方法子程序的设计方法v6.1 子程序的设计方法v1.过程定义伪操作 过程名过程名(子程序名)为符合语法的标识符NEARNEAR属性(段内近调用)的过程只能被相同代码段的其他程序调用,主程序和子程序在同一代码段FARFAR属性(段间远调用)的过程可以被相同或不同代码段的程序调用,主程序和子程序不在同一代码段过程名过程名PROC NEAR|FARPROC NEAR|FAR.过程名过程名ENDPENDP你现在浏览的是第十页,共19页code segmentcode segment main proc farmain proc far call call subr1subr1 ret retmai
8、n endpmain endpsubr1subr1 proc proc nearnear retretsubr1subr1 endp endpcode endscode endssegx segmentsegx segmentsubtsubt proc proc farfar retretsubtsubt endp endp callcall subtsubt segx endssegx endssegy segmentsegy segment callcall far ptr far ptr subtsubt segy endssegy ends你现在浏览的是第十一页,共19页6.1 子程序
9、的设计方法子程序的设计方法子程序调用方法说明一个子程序可以供多个用户编写的主程序调用。在不了解子程序内部算法的前提下能够很好地使用子程序也是子程序应具备的特性。一个完整的子程序,应包括子程序调用方法说明。主要包括以下6个方面内容。(1)子程序名:供调用子程序时使用(2)子程序功能:供选择子程序时参考(3)占用寄存器:说明子程序执行时,要使用哪些寄存器;子程序执行完后,哪些寄存器的内容被改变,哪些寄存器的内容保持不变。(4)入口参数:说明子程序执行应具备的条件。(5)输出参数:说明子程序执行后的结果存放在何处。(6)子程序调用示例:说明子程序的调用格式。你现在浏览的是第十二页,共19页6.1 子
10、程序的设计方法子程序的设计方法2.子程序的调用与返回子程序调用:隐含使用堆栈保存返回地址 callcall nearnear ptr subp ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序callcall farfar ptr subp ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序子程序返回:子程序返回:retret(SP)(IP)(IP)(CS)(SP)你现在浏览的是第十三页,共19页6.1 子程序的设计方法子程序的设计方法v3.保存与恢复寄存器一般通过堆栈来实现,主要在子程序中进行,例如,子程序subt中用到了寄存器ax,bx,cx和
11、dx,则可能的保存与恢复寄存器如左:subt proc far push ax push bx push cx push dx pop dx pop cx pop bx pop ax retsubt endp你现在浏览的是第十四页,共19页6.1 子程序的设计方法子程序的设计方法v4.子程序的参数传送v入口参数(输入参数):主程序提供给子程序v出口参数(输出参数):子程序返回给主程序v参数的形式:数据本身(传值)数据的地址(传址)v传递的方法:寄存器 变量 堆栈你现在浏览的是第十五页,共19页6.1 子程序的设计方法子程序的设计方法v(1)通过寄存器传送参数最常用的一种方式,但能传递的参数有限,适合于参数较少的情况。需要注意:用于传递出口参数的寄存器不能进行现场保护和恢复。你现在浏览的是第十六页,共19页6.1 子程序的设计方法子程序的设计方法你现在浏览的是第十七页,共19页6.1 子程序的设计方法子程序的设计方法你现在浏览的是第十八页,共19页6.1 子程序的设计方法子程序的设计方法你现在浏览的是第十九页,共19页
限制150内