资源描述:
《汇编程序设计方法.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4.6汇编语言程序设计的基本方法通常,编制一个汇编语言源程序应按如下步骤进行:⑴明确任务,确定算法。⑵绘制流程图。⑶根据流程图编写汇编语言程序。⑷上机调试程序。程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。4.6.1顺序程序设计顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。S1S2S3开始结束[例1]求
2、两个数的平均值。这两个数分别存放在X单元和Y单元中,而平均值放在Z单元中。源程序编制如下:DATASEGMENTXDB8CHYDB64HZDB?DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODEASSUMEDS:DATAASSUMESS:STACKSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAL,XADDAL,YMOVAH,0ADCAH,AHSHRAX,1MOVZ,ALRETMAINENDPCODEENDSENDSTART4.6.2分支程
3、序设计分支程序结构也称条件结构,通常是在两种或两个以上的不同的操作中选择其中的一个,如下图所示:分支是通过条件转移指令来实现的。分支结构有一个共同点:运行方向总是向前的。条件SS1S2Sn条件NY条件S1S2NY…[例2]现有一符号函数:1当X>0时Y=0当X=0时-1当X<0时假定X为-25,且存放在VARX单元中,函数值Y存放在VARY单元,试编写程序根据X的值确定函数Y的值。根据题意画出流程图如下:实现符号函数程序的流程图开始AL←XAL≥0?Y←-1结束AL=0Y←1Y←0YYNN编写程序如下:DSEGSEGME
4、NTVARXDB-25VARYDB?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAL,VARXCMPAL,0JGENEXTMOVAL,0FFHJMPHALTNEXT:JEZAREMOVAL,1JMPHALTZARE:MOVAL,0HALT:MOVVARY,ALMOVAH,4CHINT21HCSEGENDSENDSTARTMOVDL,VARYMOVCL,4RORDL,CLANDDL,0FHCMPDL,0AHJBNUMADDDL,7NU
5、M:ADDDL,30HMOVAH,2INT21HMOVDL,VARYANDDL,OFHCMPDL,0AHJBNUBADDDL,7NUB:ADDDL,30HMOVAH,2INT21HMOVDL,‘H’MOVAH,2INT21H4.6.3循环程序设计循环程序结构就是重复执行某一段程序,直到某个条件出现为止。循环程序结构同分支程序结构有相似之处,都是根据条件来实现的,只不过循环是一种运动方向总是向后的分支程序结构。因此,循环可以用分支来实现。循环初始状态循环控制条件循环体循环初始状态循环初始状态循环控制条件YYNN1.循环程序
6、的组成一个循环程序通常由四部分构成:⑴初始化部分建立循环初始值。如初始化地址指针,计数器,其他循环参数的起始值等。⑵工作部分它是循环程序的这主要部分,是为完成某种特定功能而设计的程序段。⑶修改部分为保证正确的循环而修改某些参数。如修改计数器的值、操作数地址等。⑷控制部分判断循环结束条件是否成立。这是循环程序设计的关键。通常判断循环是否结束的办法有两种:①用计数控制循环:循环是否已进行预定次数,它适用于已知循环次数的循环程序设计;②用条件控制循环:循环终止条件是否已成立,它适用于未知循环次数的循环程序设计。2.循环控制方法
7、⑴用计数控制循环[例3]在xx单元开始的连续单元中存放有10个无符号数,从中找出中最大者送yy单元。根据题意,我们把第一个数先送入AL寄存器中,然后将AL中的数与后面的9个数逐个进行比较。如果AL中的数较小,则两数交换;如果AL中的数大,则不交换。在比较过程中,AL中始终保持较大的数,这样,比较9次后,则最大的数在AL中,最后把AL中的数(最大者)存入yy单元。由此可画出程序的流程图:从一批数中求最大者流程图开始AL←xx,BX←xx的有效地址,CX←9BX←BX+1AL≥[BX]?AL,[BX]中的数交换CX←CX-1
8、CX=0?yy←AL结束YYNN程序编写如下:DATASEGMENTxxDB49,38,65,12,97,13,55,27,28,85yyDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEABX,xxMOVAL,[BX]MOVCX