《分支结构程序》PPT课件.ppt

上传人:za****8 文档编号:12670615 上传时间:2020-05-13 格式:PPT 页数:36 大小:1.15MB
返回 下载 相关 举报
《分支结构程序》PPT课件.ppt_第1页
第1页 / 共36页
《分支结构程序》PPT课件.ppt_第2页
第2页 / 共36页
《分支结构程序》PPT课件.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
汇编语言程序设计,第六章分支结构程序,理论:4学时实验:2学时,6.4多分支结构程序设计,6.2转移指令,6.1分支结构程序的引出,6.3分支结构程序设计,第六章分支结构程序,在解决实际问题的过程中,经常遇到不同情况,需要采用不同方法处理,这就需要在程序设计中,将可能遇到的所有不同情况,在程序中进行相应的处理,程序运行后,由计算机根据情况进行选择,执行相应的程序。这就是所谓的分支程序。如:计算0.2W(W20)P=0.2*20+0.3*(W-20)(W20),第六章分支结构程序设计,6.4多分支结构程序设计,6.2转移指令,6.1分支结构程序的引出,6.3分支结构程序设计,第六章分支结构程序,一般情况下,CPU总是顺序执行指令。而无条件转移指令是让CPU无条件地转到别处继续执行指令,从而改变指令的执行顺序。通常情况下,转移的目标指令地址是通过语句标号给出,若标号的定义与JMP指令在同一个段中,这种情况下的跳转称为段内跳转,只需要改变IP的值即可实现转移。标号的定义与JMP指令若不在同一个段中,这种情况下的跳转称为段间跳转,不仅需要改变IP的值,还要改变CS的值,才可实现转移。标号定义的位置与JMP指令的位置之间没有先后限制,JMP指令既可以实现向前跳转,也可以用于向后跳转。程序中还可以多处使用JMP指令转到同一个标号。转移的目标地址也可以以间接方式给出,即段内跳转可以通过字寄存器或字存储单元给出。段间跳转可以通过双字存储单元给出。,第六章分支结构程序设计,6.2.1无条件转移指令(1)格式:JMPtarg功能:段内转移:IP目标的偏移地址targ的表示形式:指令语句标号;字寄存器的名字;某种存储器的寻址方式。段内直接转移:JMPLABEL;IPOFFSETLABEL(LABEL为本代码段内的指令语句标号)段内寄存器间接转移:JMPRNAME;IPRNAME(RNAME为16位寄存器的名字),第六章分支结构程序设计,JMP指令演示,6.2.1无条件转移指令(2)段内存储器间接转移:JMPADR;IP(ADR)(ADR为数据段内标号)JMPWORDPTRBX;IPBXJMPWORDPTRBX+DISP;IPBX+DISPJMPWORDPTRDI+DISP;IPDI+DISPJMPWORDPTRBX+SI+DISP;IPBX+SI+DISP说明:存储器间接转移是通过存储器数据段的一个字单元提供转移目标的偏移地址。,第六章分支结构程序设计,JMP指令演示,6.2.1无条件转移指令(3)段间转移:IP目标的偏移地址CS目标所处代码段的基地址段间直接转移:JMPLABEL;IPOFFSETLABEL;CSSEGLABEL(LEBEL为其他代码段内的指令语句标号)段间存储器间接转移:JMPADR;IP(ADR),CS(ADR+2)(ADR为数据段内标号)JMPDWORDPTRBX;IPBX,CS(BX+2)JMPDWORDPTRBX+DISP;IPBX+DISP;CSBX+DISP+2JMPDWORDPTRDI+DISP;IPDI+DISP;CSBX+DISP+2JMPDWORDPTRBX+SI+DISP;IPBX+SI+DISP;CSBX+SI+DISP+2,第六章分支结构程序设计,说明:段间存储器间接转移是通过存储器数据段的一个双字单元提供转移目标的段地址和偏移地址,低位字为偏移地址,高位字为段地址。例:设DS=4000H,BX=1230H,DI=02HJMPDWORDPTRBX+DI计算物理地址:40000H+1230H+2=41232H,转移指令演示,第六章分支结构程序设计,JMP指令演示,JMP指令演示,6.2.2条件转移指令(1)概述:条件转移指令的通用格式为:JccLABEL如条件满足,则发生转移:IPIP+8位偏移量如条件不满足,则不转移,顺序执行下条指令。所有的条件转移指令均为两字节机器指令,第2字节为8位偏移量,因而转移范围为-126129。指令中的条件即为状态标志的状态或状态的组合,8086CPU共有16种可用的条件,使用这些条件的条件转移指令可分成三类。,第六章分支结构程序设计,1.判断单个状态标志,助记符标志说明JZ/JEZF=1结果为0;两数相等JNZ/JNEZF=0不为0;不相等JC/JB/JNAECF=1加有进位;减有借位;其他JNC/JNB/JAECF=0无进位;无借位;其他JSSF=1结果为负JNSSF=0结果为正JP/JPEPF=1结果的低8位含偶数个“1”JNP/JPOPF=0结果的低8位含奇数个“1”JOOF=1运算结果溢出JNOOF=0运算结果不溢出JCXZ(CX=0)串操作是否处理完所有数据,第六章分支结构程序设计,6.2.2条件转移指令(2),2.判断无符号数高低,两个无符号数比较后,用下述指令。比较无符号数大小的条件为一个标志或几个标志组合。助记符标志说明JZ/JEZF=1等于(=)JNZ/JNEZF=0不等于()JB/JNAE/JCCF=1低于/不高于不等于()JNB/JAE/JNCCF=0不低于/高于或等于()JBE/JNACF=1或ZF=1低于或等于/不高于()JNBE/JACF=0且ZF=0不低于不等于/高于(),第六章分支结构程序设计,6.2.2条件转移指令(3),3.判断带符号数大小,两个带符号数比较后,用下述指令。比较带符号数的大小条件为一个标志或几个标志组合。助记符标志说明JZ/JEZF=1等于(=)JNZ/JNEZF=0不等于()JL/JNGESFOF小于/不大于且不等于()JNL/JGESFOF不小于/大于或等于()JLE/JNGSFOF或ZF=1小于或等于/不大于()JNLE/JGSFOF且ZF=0不小于且不等于/大于()(条件转移指令演示),第六章分支结构程序设计,6.2.2条件转移指令(4),课间休息,6.4多分支结构程序设计,6.2转移指令,6.1分支结构程序的引出,6.3分支结构程序设计,第六章分支结构程序,、典型的分支结构,演示,演示,第六章分支结构程序设计,6.3分支结构程序设计(1),、简单分支,【例6.1】已知AX中放有一个带符号数,编写程序段,计算它的绝对值。【分析】图6.1是完成上述操作的流程图。,【解】程序段如下:CMPAX,0;把AX的值减去0,;结果设置标志位JGEL1;带符号数大于或等于跳转,;转到标号lab1处MOVBX,AX;把AX的值复制到BX中MOVAX,0SUBAX,BX;AX0BXL1:,6.3分支结构程序设计(2),第六章分支结构程序设计,【例6.2】已知AX中放有一个16位无符号数,BL中放有一个8位无符号数,编写程序段把两者相加,结果放在DX中。【分析】图6.2是解上题的流程图。,图6.2求字与字节之和流程图,【解】程序段如下:ADDAL,BL;字型数据的低8位与;BL相加并设置CFJNCL2;CF0,表示加法没有;进位,则高8位不变ADDAH,1;CF1,高8位加上进位L2:MOVDX,AX;结果放到DX中,第六章分支结构程序设计,6.3分支结构程序设计(3),3、两路分支,【例6.3】写一个程序段,把BX与DX中较大的一个无符号数放到AX中。【分析】图6.3是解上题的流程图。,【解】CMPBX,DX;比较BX与DX的大小,;设置标志位JAL3;无符号数大于转MOVAX,DX;JA指令不能转移时,说;明BXDX不成立,则应取DX的值JMPL4;转到后续指令L3:MOVAX,BX;当BXDX时转到此处,;取BX到AXL4:;已取到大的一个放在AX中,;此处写后续指令,图6.3求教大数流程图,第六章分支结构程序设计,6.3分支结构程序设计(4),第六章分支结构程序设计,6.3分支结构程序(5),【例6.4】内存中有3个互不相等的无符号数据,分别存放在ARG开始的字单元,编制程序将其中最大值送入MAX单元。【分析】图6.4是解上题的流程图。,AXBX?,Y,N,AXBX,第一、二数分别取入AX、BX,AX与第3个数比较,AX第3数?,AX第3个数,Y,N,(MAX)AX,图6.4求3书中最大值流程图,1:*EXAM6.4*2:SSEGSEGMENTSTACK3:STKDB20DUP(0)4:SSEGENDS5:DSEGSEGMENT6:ARGDW7138H,84A6H,29EH7:MAXDW08:DSEGENDS9:CSEGSEGMENT10:ASSUMECS:CSEG,DS:DSEG11:ASSUMESS:SSEG12:FMAX:MOVAX,DSEG;设置数据段13:MOVDS,AX14:MOVAX,SSEG;设置堆栈段15:MOVSS,AX,【例6.4】程序,第六章分支结构程序设计,6.3分支结构程序设计(6),第六章分支结构程序设计,6.3分支结构程序设计(7),16:MOVSP,SIZESTK;设置堆栈指针17:LEASI,ARG;取数据首址18:MOVAX,SI;取第1个数10:MOVBX,SI+2;取第2个数20:CMPAX,BX;两数比较21:JAEFMAX1;AX中数大,转22:MOVAX,BX23:FMAX1:CMPAX,SI+4;大数AX与第3数比较24:JAEFMAX225:MOVAX,SI+4;取大数26:FMAX2:MOVMAX,AX;保存最大数27:MOVAX,4C00H;返回DOS28:INT21H29:CSEGENDS30:ENDFMAX,【例6.4】程序,课间休息,6.4多分支结构程序设计,6.2转移指令,6.1分支结构程序的引出,6.3分支结构程序设计,第六章分支结构程序,【例6.5】键盘09的数字键用于控制一个电机的不同转速。从键盘接收一个按键,转入相应程序段处理。【分析】图6.5是树型结构控制流程图。,图6.5控制电机流程图,【解】START:MOVAH,01INT21HCMPAL,0JZL0;数字0CMPAL,1JAL1;数字1,Y,N,N,Y,AL=1?,START,AL=0?,接收键送AL,L9,L1,L0,第六章分支结构程序设计,6.4多分支程序设计(1),N,Y,AL=8?,L8,树型结构法,分析:上面的解法是从键盘上接收09的数字,然后逐一进行判断,转入不同程序段处理。本题的解法是采用地址表方法进行设计。即在内存设计一个表TAB,表中的每一项是一个转移地址,每个地址用两个字节。当从键盘上得到一个数字时,经过计算得到相应转移目标在TAB表中的地址,然后利用转移指令,转移到目标程序执行。,第六章分支结构程序设计,6.4多分支程序设计(2),地址表法,5:DSEGSEGMENT6:ADRTABDWOFFSETADR0,OFFSETADR17:DWOFFSETADR2,OFFSETADR98:DSEGENDS9:CSEGSEGMENT10:ASSUMEDS:DSEG,CS:CSEG11:ASSUMEDS:DSEG,CS:CSEG12:BRANCH:MOVAX,DSEG13:MOVDS,AX14:MOVAX,DSEG15:MOVSS,AX16:MOVSP,LENGTHSTK17:LEADI,ADRTAB18:MOVAH,0119:INT21H20:SUBAL,0,TAB,ADR0,ADR1,ADR2,ADR9,ADR3,第六章分支结构程序设计,6.4多分支程序设计(3),地址表法,21:XORAH,AH22:SHIAX,123:ADDDI,AX24:MOVAX,DI25:JMPAX26:ADR0:27:ADR1:ADR9:CSEGENDSENDBRANCH,第六章分支结构程序设计,6.4多分支程序设计(4),地址表法,JMPWORDPTRDI,MOVBX,AXJMPADRTABBX,MOVBX,AXJMPWORDPTRDIBX,本章教学要求,掌握无条件转移指令功能;掌握条件转移指令的用法;掌握简单分支程序设计方法;了解多分支程序“地址表法”技术。,全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键!,本章作业,6.1(1)(2)(3)(4)(5)6.36.7读懂课文中例6.1、6.3,帮助你发现问题,督促你看书理解!,课间休息,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!