汇编语言程序设计第8章80868088分支程序设计.ppt_第1页
汇编语言程序设计第8章80868088分支程序设计.ppt_第2页
汇编语言程序设计第8章80868088分支程序设计.ppt_第3页
汇编语言程序设计第8章80868088分支程序设计.ppt_第4页
汇编语言程序设计第8章80868088分支程序设计.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

2019/12/2,第8章分支程序设计,1,8086/8088和ARM核汇编语言程序设计,第8章分支程序设计,2019/12/2,第8章分支程序设计,2,8.1分支程序的结构形式,8.2分支结构程序设计,第8章分支程序设计,2019/12/2,第8章分支程序设计,3,掌握分支程序设计方法熟悉常见程序设计问题:数据范围判断(09、AZ、az)、字母大小写转换、;,教学要求,2019/12/2,第8章分支程序设计,4,8.1分支程序的结构形式,分支程序结构是根据条件转向不同程序分支的结果,有3种形式:单分支、双分支结构和多分支结构。,2019/12/2,第8章分支程序设计,5,8.1分支程序的结构形式,2019/12/2,第8章分支程序设计,6,8.2分支结构程序设计,分支程序设计首先要在分析实际问题的基础上确定若干个程序分支,然后在此基础上选用条件转移指令、或者是选用间接寻址无条件转移来转向不同的程序分支。前者是测试法分支程序设计,后者是跳跃表法分支程序设计。,分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制,2019/12/2,第8章分支程序设计,7,8.2分支结构程序设计,分支结构是有若干个条件,每一个条件对应一个基本操作。分支程序就是判断产生的条件,哪个条件成立,就执行哪个条件对应操作的程序段。也就是说,从若干分支中选择一个分支执行。,8.2.1测试法分支程序设计,例8.1已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。,2019/12/2,第8章分支程序设计,8,8.2分支结构程序设计,8.2.1测试法分支程序设计,程序清单:,DATASEGMENTXDB-25RESULTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX;初始化MOVAL,X;X取到AL中TESTAL,80H;测试AL正负JZNEXT;为正,转NEXTNEGAL;否则AL求补NEXT:MOVRESULT,AL;送结果MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART;汇编结束,2019/12/2,第8章分支程序设计,9,8.2分支结构程序设计,8.2.1测试法分支程序设计,例8.2试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。,2019/12/2,第8章分支程序设计,10,8.2分支结构程序设计,8.2.1测试法分支程序设计,DATASEGMENTXDW-0ABHYDW205ZDW200MAXDW?DATAENDS,CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAX,XCMPAX,YJGEL1MOVAX,YL1:CMPAX,ZJGEEXITMOVAX,ZEXIT:MOVMAX,AXMOVAH,4CHINT21HCODEENDSENDSTART,2019/12/2,第8章分支程序设计,11,第十五讲,1、阅读下列程序段,程序执行到HLT时,(AX)=(),(BX)=()。(4分)xorax,axmovbx,1movcx,5lop:addax,bxincbxlooplophlt,0FH或15,6,2019/12/2,第8章分支程序设计,12,2、试分析下列程序段,程序执行后,num2字节单元的内容是什么?如果num1字节单元的值为39h,运行后,num2字节单元的内容又是什么?由此说明程序完成了什么操作。(6分)datasegmentnum1db41hnum2db?dataendsCodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovah,num1,cmpah,39hJbenextsubah,7next:subah,30hmovnum2,ahmovah,4chint21hcodeendsendstart,0AH,09H,此程序可将num1字节单元中的ascii字符09,AF转换成十六进制数09,AF,2019/12/2,第8章分支程序设计,13,3、下列程序完成将BX寄存器的数值以十六进制显示输出,完成程序填空。(6分)codesegmentassume(1)start:movbx,0DA12Hmovch,4rotate:movcl,4;设置移位指令的移位次数rolbx,clmoval,blandal,0FH;取BX寄存器的高四位addal,(2);将十六进制数值转换成对应的ASCII码cmpal,3ahjlprintitaddal,(3);处理十六进制数A-F,printit:movDL,al;调用系统功能,显示一位十六进制数对应的字符Movah,(4)int21hdecch;循环次数-1jnzrotate;处理BX后续四位二进制位movah,4CHint(5)codeendsend(6),cs:code,30H,07H,02,21H,start,2019/12/2,第8章分支程序设计,14,8.2分支结构程序设计,8.2.2跳跃表法,例8.3设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。,2019/12/2,第8章分支程序设计,15,8.2分支结构程序设计,8.2.2跳跃表法,DATASEGMENTTABDWP1,P2,P3,P4,P5,P6,P7,P8NDB5DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAL,NDECALADDAL,ALMOVBL,ALMOVBH,0JMPTABBX,P1:JMPEXITP2:JMPEXITP8:EXIT:MOVAH,4CHINT21HCODEENDSENDSTART,2019/12/2,第8章分支程序设计,16,例:根据AL寄存器中哪一位为1(从低位到高位),把程序转移到8个不同的程序分支,branch_tabledwroutine1dwroutine2dwroutine3dwroutine4dwroutine5dwroutine6dwroutine7dwroutine8,跳跃表法,2019/12/2,第8章分支程序设计,17,cmpal,0;AL为逻辑尺jecontinueleabx,branch_tableL:shral,1;逻辑右移jncadd1jmpwordptrbx;段内间接转移add1:addbx,typebranch_table;addbx,2jmpLcontinue:routine1:routine2:,(寄存器间接寻址),2019/12/2,第8章分支程序设计,18,(寄存器相对寻址),cmpal,0jecontinuemovsi,0L:shral,1;逻辑右移jncadd1jmpbranch_tablesi;段内间接转移add1:addsi,typebranch_tablejmpLcontinue:routine1:routine2:,2019/12/2,第8章分支程序设计,19,(基址变址寻址),cmpal,0jecontinueleabx,branch_tablemovsi,7*typebranch_tablemovcx,8L:shlal,1;逻辑左移jncsub1jmpwordptrbxsi;段内间接转移sub1:subsi,typebranch_table;(si)-2loopLcontinue:routine1:routine2:,2019/12/2,第8章分支程序设计,20,8.2分支结构程序设计,8.2.3举例,例8.4在附加段中,有一个按从小到大顺序排列的无符号字节数组ARRAY,要求在数组中查找字节X,若找到则使CF=0,并在ADDR中给出该元素在数组中的偏移地址;如未找到则使CF=1。,算法分析:折半查找法是先取有序数组的中间元素与查找值相比较,如相等则查找成功;如查找值大于中间元素,则再取高半部的中间元素与查找值相比较;如查找值小于中间元素,则再取低半部的中间元素与查找值相比较;如此重复直到查找成功或者最终未找到该数(查找不成功)为止。对于长度为N的表格,折半查找法的平均比较次数为log2N,而顺序查找法平均要作N/2次比较。,2019/12/2,第8章分支程序设计,21,8.2分支结构程序设计,8.2.3举例,2019/12/2,第8章分支程序设计,22,8.2分支结构程序设计,8.2.3举例,DSEGSEGMENTARRAYDW114H,128H,256H,259H,325H,14ADH,34DEH,4D34H,5FDAHXDW256HADDRDW?LOW1DW?HIGH1DW?LEN1=(X-ARRAY)/2DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:DSEGSTART:PUSHDSXORAX,AXPUSHAXMOVAX,DSEGMOVDS,AXMOVES,AXMOVAX,X,2019/12/2,第8章分支程序设计,23,8.2分支结构程序设计,8.2.3举例,LEADI,ARRAYCMPAX,ES:DIJALAB1;大于最小数LEASI,ES:DIJEEXIT;找到,结束STC;未找到JMPEXIT1LAB1:MOVSI,LEN1-1SHLSI,1ADDSI,DI;使SI指向最后一个元素CMPAX,ES:SIJBLAB2;小于最大数,则转去查询JEEXITSTCJMPEXIT1LAB2:MOVLOW1,1MOVBX,LEN1MOVHIGH1,BXMOVBX,DI,2019/12/2,第8章分支程序设计,24,8.2分支结构程序设计,8.2.3举例,LABM:MOVCX,LOW1MOVDX,HIGH1CMPCX,DXJANOFOUNDADDCX,DXSHRCX,1MOVSI,CXSHLSI,1COMP:CMPAX,ES:BX+SIJEEXITJALABHDECCXMOVHIGH1,CXJMPLABMLABH:INCCXMOVLOW1,CXJMPLABMNOFOUND:STCJMPEXIT1EXIT:MOVADDR,SIEXIT1:RETCSEGENDSENDSTART,2019/12/2,第8章分支程序设计,25,8.2分支结构程序设计,8.2.3举例,需要注意的是:用测试法进行多分支程序设计时,流程图中对各个条件的测试的先后次序应尽量和所涉及的具体问题的提出次序相符;编程中为形成多分支而使用的转移指令的先后次序也应尽量与流程图一致。这样可以使得编程思路更清晰,易于阅读和修改。要根据题意为每个程序分支安排出口,避免某个程序分支错误地顺序进入另一个程序分支,通常可以采用在程序分支的结束处使用

温馨提示

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

评论

0/150

提交评论