资源描述:
《汇编语言程序设计的基本方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、5.6汇编语言程序设计的基本方法通常,编制一个汇编语言源程序应按如下步骤进行:⑴明确任务,确定算法。⑵绘制流程图(包括确定内存单元和分配寄存器)。⑶根据流程图编写汇编语言程序。⑷上机调试程序。程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。5.6.1顺序程序设计顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指
2、令指针IP值线形增加,IP=IP+1S1S2S3开始结束[例1]求两个数的平均值。这两个数分别存放在X单元和Y单元中,而平均值放在Z单元中。源程序编制如下:DATASEGMENTXDB8CHYDB64H;赋予初值ZDB?;分配存储空间DATAENDSSTACKSEGMENTDW20HDUP(0);给堆栈段分配一个TOPLABLEWORD;据区共32个字,每个STACKENDS;字的内容均为0CODESEGMENTMAINPROCFAR;定义子程序名为MAIN,类型FARASSUMECS:CODE;把段寄存器和ASSUMEDS
3、:DATA;段名对应起来ASSUMESS:STACKSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA;给数据段赋初值MOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPMOVAL,XADDAL,Y;两数低字节相加结果送ALMOVAH,0ADCAH,0;两数高字节带进位相加SHRAX,1MOVZ,ALRETMAINENDPCODEENDSENDSTART例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入
4、DX。例3把非压缩十进制数DAT1转换为压缩十进制数例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。DATASEGMENTWDW268XDW–73YDW48ZDW–85DATAENDSSTACKSEGMENTDW100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,X;计算X*YIMULYMOVCX,AX;用CX存储结果低位
5、MOVBX,DX;用BX存储结果高位MOVAX,Z;计算X*Y+ZCWDADDCX,AXADCBX,DXSUBCX,100SBBBX,0MOVAX,WCWDSUBAX,CXSBBDX,BXIDIVWMOVAH,4CHINT21HCODEENDSENDSTART例3把非压缩十进制数DAT1转换为压缩十进制数。·STACK64H·DATADAT1DW0908H;非压缩十进制数0908H·CODEBEGIN:MOVAX,@DATAMOVDS,AXMOVAX,DAT1;AX←0908HMOVCL,4;CL←4SALAH,CL;09字
6、节左移4位,AH=90HROLAX,CL;9008H字循环左移4位,AX=0089HROLAL,CL;89字节循环左移4位,AL=98HMOVBYTEPTRDAT1,AL;DAT1←98H,压缩十进制数98HMOVAH,4CH;返回DOSINT21HENDBEGIN返回5.6.2分支程序设计分支程序结构也称条件结构,通常是在两种或两个以上的不同的操作中选择其中的一个,如下图所示:分支是通过条件转移指令来实现的。分支结构有一个共同点:运行方向总是向前的。IP受标志位的影响而跳变,影响标志的指令CMP、TEST、JXX条件S1S
7、2条件SS1S2Sn条件NNYY…两路分支程序设计例4用比较指令和条件转移指令实现两路分支的程序段。…MOVAX,M;假定M和N为有符号数MOVBX,NCMPAX,BX;比较M和N的大小,影响标志位,准备条件JGNEXT;M>N时转移,注意若M、N为无符号数时用JA指令……;分支程序2JMPDONENEXT:……;分支程序1……DONE:RET[例5]现有一符号函数:1当X>0时Y=0当X=0时-1当X<0时假定X为-25,且存放在VARX单元中,函数值Y存放在VARY单元,试编写程序根据X的值确定函数Y的值。根据题意画出流
8、程图如下:实现符号函数程序的流程图开始AL←XAL≥0?Y←-1结束AL=0Y←1Y←0YYNN编写程序如下:DSEGSEGMENTVARXDB-25VARYDB?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,A