第5章8086汇编语言程序设计课件

PPT
  • 阅读 33 次
  • 下载 0 次
  • 页数 65 页
  • 大小 811.512 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第5章8086汇编语言程序设计课件
可在后台配置第一页与第二页中间广告代码
第5章8086汇编语言程序设计课件
可在后台配置第二页与第三页中间广告代码
第5章8086汇编语言程序设计课件
可在后台配置第三页与第四页中间广告代码
第5章8086汇编语言程序设计课件
第5章8086汇编语言程序设计课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 65
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第5章8086汇编语言程序设计课件.ppt,共(65)页,811.512 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44759.html

以下为本文档部分文字说明:

第5章分支与循环程序设计第5章分支与循环程序设计本章主要内容顺序程序设计1分支程序设计2循环程序设计3第5章分支与循环程序设计汇编语言程序设计概述8086汇编语言程序采用模块化结构,通常由一个主程序模块和多个子程序(过程)模块构成。对于简单程序,只有主程序模块,没有子程序模块。汇编语言

程序有3种基本结构:顺序结构分支结构循环结构第5章分支与循环程序设计程序的质量标准衡量程序的质量通常有以下几个标准:程序正确、完整;程序易读性强;程序的执行速度快;程序占内存小,程序代码的行数少。第5章分支与循环程序设计汇编语言程序设计的基本步骤①分析问题,抽象出

描述问题的数学模型;②确定解决问题的算法或算法思想;③程序模块划分——在解决复杂实际问题时,往往需要把它分成若干功能模块,在进行功能模块划分后,必须确定各功能模块间的通信问题;④绘制各功能模块流程图或结构图;⑤分配存储空间、寄存器等工作单元;第5章分支与循

环程序设计汇编语言程序设计的基本步骤(续)⑥根据流程图,编写程序;⑦静态检查,纠正错误;⑧上机运行调试,纠正错误,直至测试通过;⑨整理资料,建立完整的文档。第5章分支与循环程序设计5.1顺序结构程序设计顺序

结构程序又称简单程序。采用这种结构的程序,按照指令书写的顺序逐条执行,程序的执行路径没有分支和循环。第5章分支与循环程序设计顺序结构程序设计举例【例5-2】编程将内存数据段字节单元INDAT存放的一个数n(

假设0≤n≤9),以十进制形式在屏幕上显示出来。例如,若INSTR单元存放的是数8,则在屏幕上显示:8D。第5章分支与循环程序设计【例5-2】程序代码DATASEGMENT;数据段定义INDATDB8DATAENDSCODESEGMENT;代码段定义ASSUMECS:COD

E,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DS第5章分支与循环程序设计【例5-2】程序代码(续)MOVDL,INDATORDL,30HMOVAH2INT21HMOVDL,'D'MOVAH,2INT21HMOVAH,4

CHINT21HCODEENDSENDSTART第5章分支与循环程序设计5.2分支结构程序设计分支结构程序利用条件转移指令或跳转表,使程序执行完某条指令后,根据指令执行后状态标志的情况选择要执行哪个程序段。分支结构程序的指令执行顺序与指令的存

储顺序不一致。转移指令JMP和Jcc可以实现分支结构。第5章分支与循环程序设计分支结构的三种形式第5章分支与循环程序设计单分支结构程序设计举例【例5-3】编写程序段,求AX中存放的带符号数的绝对值,结果存RES单元。„CMPAX,0JGEISPOSITIVENEGAXISPOSITIVE

:MOVRES,AX„本例采用的是单分支结构。特点是:条件成立时程序跳转;否则,顺序执行。第5章分支与循环程序设计双分支结构程序设计举例【例5-4】编程判断DAT单元存放的带符号数的正负。如该数为负数,则显示“DATisanega

tivenumber!”;否则显示“DATisanonnegativenumber!”。第5章分支与循环程序设计【例5-4】(续)DATASEGMENT;数据段定义NDB'DATisanegative

number!','$'NNDB'DATisanonnegativenumber!$'DATAENDSCODESEGMENT;代码段定义ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;设置DS第5章分支与循环程序设

计【例5-4】(续)MOVAX,-3CMPAX,0JGEISNNLEADX,NMOVAH,9INT21HJMPFINISH第5章分支与循环程序设计【例5-4】(续)ISNN:LEADX,NNMOVAH,9INT21HFINISH:MOVAH,4CHI

NT21HCODEENDSENDSTART第5章分支与循环程序设计【例5-4】(续)【例5-4】采用的是双分支结构。采用这种结构时,特别要注意第一个分支后要利用JMP指令(程序第16行)使程序跳转到第二个分支的后面。

总结:首先除第一分支外,第二分支和出口位置用标号标名第一分支结束时后要加JMP指令使程序跳转到出口位置第5章分支与循环程序设计多分支结构程序设计举例【例5-5】编程求分段函数Y的值。已知变量X为16位带符号数,分段函数的值要求保存到字单元Y中。函数定义如下:1(X>0)Y0(X=0)

1(X<0)当当当第5章分支与循环程序设计【例5-5】(续)DATASEGMENT;数据段定义XDW-128YDW?DATAENDSCODESEGMENT;代码段定义ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS

,AX第5章分支与循环程序设计【例5-5】(续)MOVAX,XCMPAX,0JGISPNJZISZNMOVY,-1JMPFINISHISPN:MOVY,1JMPFINISHISZN:MOVY,0第5章分支与循环程序设计【例5-5】(续)FINISH:MOVAH,4CHINT21HCODEE

NDSENDSTART本例实现的是多分支结构。设计多分支结构程序时,应注意:要为每个分支安排出口;各分支的公共部分尽量集中,以减少程序代码;无条件转移没有范围的限制,但条件转移指令只能在-1

28~+127字节范围内转移;调试程序时,要对每个分支进行调试。第5章分支与循环程序设计总结:•首先除第一分支外,其它的每个分支和出口位置用标号标名•除最后一个分支外,其它分支结束时后要加JMP指令使程序跳转到出口位置多分支程序设计结构第5章分支与循环程

序设计5.2循环结构程序设计当程序处理的问题需要包含多次重复执行某些相同的操作时,在程序中可使用循环结构来实现.用同一组指令,每次替换不同的数据,反复执行这一组指令。使用循环结构,可以缩短程序代码,提高编程效率。第5章分支与循环程序设计循环结构程序

的组成-3个部分(1)初始化部分循环的准备部分。完成地址指针、循环计数、结束条件等初值的设置。(2)循环体-2个部分循环工作部分:是循环程序的主体。循环修改部分:为了保证每一次循环重复时,参加执行的信息能发生规律的变化而建立

的程序段。(3)循环控制部分根据预先设定的循环次数或条件,判断下一次循环是否要继续进行,从而保证循环正常执行。第5章分支与循环程序设计循环体的组成循环工作部分:是循环程序的主体。完成程序的基本操作。循环多少次,这部分语句就执行多少次。循环修改部分:修改循环工作部分的

变量、地址等,保证每次循环参加执行的数据能发生有规律的变化。举例:高级语言程序段I=1:SUM=0DOSUM=SUM+II=I+1WHILEI>10第5章分支与循环程序设计循环程序结构第5章分支与循环程序设计设计循环结构程序时,要注意的问题:选用计数循环还是条件循环?采

用直到型循环结构还是当型循环结构?要综合考虑循环执行的条件和循环退出的条件:可以用循环次数、计数器、标志位、变量值等多种方式来作为循环的控制条件特别注意:不要把初始化部分放到循环体中。循环体中要有能改变循环条件的语句。第5章分支与循环程序设计使用LOOP,LOOPZ,LOOPNZ时均

为相对寻址,跳转地址必须在IP+128—ip-128之间。否则可用JMP与三循环指令结合控制循环。LOP:„„„„„„„.LOOPANETJMPBNETANET:JMPLOPBNET:„„„„„„第5章分支与循环程序设计循环结构程序设计举例【例5-6】编程显示以“!”结尾的字符串。如:

“WelcometoMASM!”。只知道循环结束的条件是该字符串以“!”结束,不知道字符串的长度,所以,可用条件控制的方法来控制循环的次数。第5章分支与循环程序设计【例5-6】(续)DATASEGMENTMYSTRDB'WelcometoMASM!'DATAENDSCODESE

GMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX第5章分支与循环程序设计【例5-6】(续)LEASI,MYSTRNEXTCHAR:MOVDL,[SI]MOVAH,2INT21HCMPDL,'!'JZFINISHINCS

IJMPNEXTCHAR第5章分支与循环程序设计【例5-6】(续)FINISH:MOVAH,4CHINT21HCODEENDSENDSTART第5章分支与循环程序设计计数循环程序【例5-6】将内存数据段

INSTR地址开始存放的一个由字母组成的字符串中的小写字母全部转换成大写字母(其余字符不变)后存至内存数据段OUTSTR地址处。如原字符串是“helloASM!20110601”,那么转换完后应该是“HELLOASM!20110601”。第5章分支与

循环程序设计【例5-6】(续)DATASEGMENTINSTRDB'helloASM!20110601'STRLENEQU$-INSTROUTSTRDBSTRLENDUP(?)DATAENDSCODESEGMEN

TASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX第5章分支与循环程序设计【例5-6】(续)LEASI,INSTRLEADI,OUTSTRMOVCX,STRLENNEXTCHAR:MOVAL,[SI]CMP

AL,'a'JBUNCHG;不是小写字母,则不转换CMPAL,'z'JAUNCHG;不是小写字母,则不转换SUBAL,20H;将小写字母转换为大写字母UNCHG:MOV[DI],ALINCSIINCDILOOPNEXTCHAR第5章分支与循环程序设

计【例5-6】(续)MOVAH,4CHINT21HCODEENDSENDSTART第5章分支与循环程序设计循环结构程序设计举例(续)【例5-7】编程以二进制形式显示BX的值(假设为无符号数)。如果(BX)=20,那么显示:00000000

00010100B。分析:由于已知BX是16位的,因此,循环的次数就是16次,所以可以采用计数法控制循环。第5章分支与循环程序设计第5章分支与循环程序设计【例5-7】(续)CODESEGMENTASSUMECS:

CODESTART:MOVAX,DATAMOVDS,AXMOVBX,20MOVCX,16;计数器CX,置初值16NEXTCHAR:ROLBX,1;显示顺序是从左往右,MOVDL,BL;要显示的值仅占最低位D0ANDDL,1;清除D7~D1ORDL,30HMOVAH,2IN

T21H;利用2号DOS调用显示LOOPNEXTCHAR;循环执行16次FINISH:MOVDL,'B'MOVAH,2INT21H;利用2号DOS调用,显示'B‘MOVAH,4CHINT21H;返回操作系统CODEENDSENDSTART第5章分支与循环程序设计

【例5-8】编程以十六进制形式显示BX的值(假设为无符号数)。如(BX)=20,那么显示0014H。第5章分支与循环程序设计N第5章分支与循环程序设计CODESEGMENTASSUMECS:CODE,D

S:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,20;BX中存放的是要显示的数MOVCH,4第5章分支与循环程序设计【例5-8】(续)NEXT:MOVCL,4ROLBX,CL;将最高4位二进制值移至低4位MOVDL,BLANDDL,0F

H;仅保留本次要显示的数值ORDL,30H;得到要显示的字符的ASCII值CMPDL,39H;是小于‘9’JBEDISPHEXADDDL,7;得到10~15所对应的字符ASCII值第5章分支与循环程序设计【例5-8】(续)DISPHEX:MOVAH,2I

NT21H;利用DOS功能调用,显示字符DECCHJNZNEXT;显示下一位十六进制数字MOVDL,'H';显示字符'H'MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDS

TART第5章分支与循环程序设计【例5-9】编程以十进制形式显示BX的值(假设为无符号数)。如(BX)=20,那么显示20D。分析:本例分两步实现。(1)转换并保存结果。(2)显示。第5章分支与循环程序设计【例5-9】(续)本例分两步实现。(1)转换并保存结果

这一步将二进制数转换为十进制值,即求出十进制值各位上的数字。由于16位二进制数最大能表示的数是65535,所以,转换后,最多是一个万位的十进制数。转换的步骤就是:把要转换的数依次除以10000,1000,100和10,分别可以得到万位数字、千

位数字、百位数字和十位数字。除以10得到的余数就是个位数字。程序中,将得到的这些数字先存入内存指定单元,供显示模块使用。(2)显示本例程序把转换和显示分成两个模块来实现,使得程序的结构清晰。第5章分支与循环程序设计【例5-9】(续)DATASEGMENTDE

CNUMDB5DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,65530;要转换的值LEASI,DECNUM第5章分支与循环程序设计【例5-9】(续)MOVDX,0MOVAX,BXMO

VCX,10000DIVCXMOV[SI],AL;求得万位的值,存入指定单元INCSIMOVAX,DXMOVDX,0MOVCX,1000DIVCX第5章分支与循环程序设计【例5-9】(续)INCSIMOVAX,DXMOVDX,0MOVCX,100DIVCXMOV[SI],AL;求得百位的值,存

入指定单元INCSIMOVAX,DXMOVCL,10DIVCLMOV[SI],AL;求得十位的值,存入指定单元第5章分支与循环程序设计【例5-9】(续)INCSIMOV[SI],AH;此时,余数就是个位的值,LEASI,

DECNUMMOVCX,5DISP:MOVDL,[SI];依次取出十进制数各位的值ORDL,30H;将取出的值转换为ASCII值MOVAH,2INT21H;利用DOS功能调用,显示INCSILOOPDISP第5章分支与循环程序设计【例

5-9】(续)MOVDL,'D'MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART第5章分支与循环程序设计条件循环程序若循环次数预先不能确定,可谓设法根据问题的特定条件进行循环控制。如例1例:求12+

22+32+。。。前项的和刚大于1000的项数N,并将项数存入到T单元中。第5章分支与循环程序设计DATASEGMENTTDB?DATAENDSCOSEGSEGMENTASSUMEDS:DATA,CS:COSEGSTART:MOVAX

,DATAMOVDS,AXMOVCL,0;项数计数器MOVDL,0;自然数计数器MOVBX,0;和INCR:INCDL;形成一个自然数第5章分支与循环程序设计MOVAL,DLMOVSH,ALMULAHADDBX,AX;计算累加和INCCL;计项数CMPBX,1000JAATOR

ENJMPINCR;和<=1000,继续求下一项STOREN:MOVT,CLMOVAH,4CHINT21HCOSEGENDSENDSTART第5章分支与循环程序设计【例5-10】请用冒泡排序法编程将内存ARR

AY单元开始存储的一组8位带符号数据按从大到小排列编制多重循环程序时要注意内外循环应完全嵌套在外循环内,不得出现内外循环交叉,内外循环的初始化部分也不能混淆。冒泡法:N个数要进行N-1趟。第一趟从第一个开始一次对相邻两个数进行比较

,若数的大小次序错误,则交换,否则不作任何操作。进行N-1次比较结束时,最小数排在最后。然后,进行第二趟,只需要进行N-2次比较,就可排好次小数。第三趟,进行N-3次比较,„„„依次类推。第5章分支与循环程序设计第5章分支与循环程序设计DATASEGMENTNUMDB5,9,8

,7,3,15LENEQU$-NUMDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,LENDECCX;CX←比较趟数,即外循环次数第5章分支与循环程序设计LOP1:MOVDX,CX;保存外循

环次数在DX,内循环比较次数在CX中。MOVSI,0LOP2:MOVAL,NUM[SI]CMPAL,ANUM[SI+1];相邻两数据比较JAECONTXCHGAL,NUM[SI+1]MOVNUM[SI],

ALCONT:INCSI;修改数据地址指针LOOPLOP2;内循环结束MOVCX,DX;恢复外循环计数值LOOPLOP1;外循环是否结束第5章分支与循环程序设计MOVAH,4CHINT21HCODEENDSENDSTART第5章

分支与循环程序设计多重循环设计方案上述程序内外排序共进行N*(N-1)/2次比较操作。若数据本来就已经排好,或经过几次操作后次序已经排好,也还要进行N*(N-1)/2次比较操作。设立交换标志来判断是否还需要排序。因为一旦

当第i趟排序过程中,没有发生数据交换,说明这批数据已经按要求的顺序排好了,就可以提前结束。AH作交换标志,每次内循环前置0,在内循环一旦发生交换AH置1,继续循环,做下一趟的排序;AH为0,即在第i趟排序内没有发生数据交换,说明数已按序排列,提前结束循环结束。

第5章分支与循环程序设计第5章分支与循环程序设计【例5-10】(续)DATASEGMENTNUMDB5,9,8,7,3,15LENEQU$-NUMDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:M

OVAX,DATAMOVDS,AXMOVCX,LENDECCX;CX←比较趟数第5章分支与循环程序设计【例5-10】(续)LOP1:MOVDX,CX;保存外循环次数在DX,内循环比较次数在CX中。MOVSI,0;MOVAH,0;交换标致寄存器置0LOP2:MOVAL,NUM[SI]CMPAL,

ANUM[SI+1];相邻两数据比较JAECONTXCHGAL,NUM[SI+1]MOVNUM[SI],ALMOVAH,1第5章分支与循环程序设计【例5-10】(续)CONT:INCSI;修改数据地址LOOPLOP2;控制内循环比较完一轮吗?ANDAH,AH;内循环结束,AH=0

结束排序,为1,继续需要下一轮。JZFINISH;不需要下一轮,已全部排好序MOVCX,DX;恢复外循环的次数JNZLOP1;未完继续FINISH:MOVAH,4CHINT21HCODEENDSENDSTART

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?