文档介绍:1/17分析问题——问题性质、目的、要求、已知条件等等。建立相应数学模型。确定算法——把实际问题转化为计算机求解的步骤和方法。绘制流程图——形象化描述程序算法。确定数据结构——数据的组织方式,分配存储区编写程序——将流程图用指令集合来实现。应该“简单明了、层次清晰、运算正确、短小精悍”。上机调试——验证程序功能,反复修改达到完善。汇编语言程序设计程序设计基础基本步骤第1页/共16页2/17计算机通常不会从程序的第一条指令直接顺序执行到程序的最后一条指令结束,会根据处理事务的不同而具有不同的执行流程。程序的流程是由程序的结构决定的。基本的程序结构有:程序基本结构汇编语言程序设计顺序结构分支结构循环结构子程序结构第2页/共16页3/17无分支、无循环、无转移程序流程图表现为只有起始框、终止框、处理框,无判断框。【例】编制一个程序,求下列公式中的Z值,并将结果存放到RESULT单元中:Z=(A+B)×10-500。设A、B的值分别存放在BUFA、BUFB单元中,运算结果不超过16位。算法:在二进制整数中左移1位相当于乘2,右移1位相当于除2,所以可将(A+B)左移3位完成乘以8的操作,然后再与(A+B)左移1位(乘以2)的结果相加得到(A+B)×10的计算。顺序结构程序——简单程序结构分析:这是一个简单的顺序结构程序,可以直接使用汇编指令完成。数据结构:存储单元RESULT用来存放结果,BUFA、BUFB存放A、B的值,可用寄存器BX存放中间运算结果。第3页/共16页4/17程序流程图DATASEGMENTBUFADW?BUFBDW?RESULT DW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,BUFA;DX=AADDDX,BUFB;DX=A+BMOVBX,DX;BX=DX=A+BMOVCL,3 SALDX,CL ;DX=(A+B)×8SALBX,1 ;BS=(A+B)×2ADDDX,BX;DX=(A+B)*8+(A+B)*2=(A+B)*10SUBDX,500;DX=(A+B)*8-500MOVRESULT,DXMOVAH,4CH;DOS系统功能调用INT21H ;返回操作系统CODEENDSENDSTART编写程序第4页/共16页5/17【例】用查表法求整数X的平方值(0≤x≤15的整数),将结果存入RESULT单元中。分析:用查表法求平方值,首先需要建一个用于存放各数平方值的表,以TABLE表示表头,表中依次存放0~15的平方值,将待求数X放入AL寄存器,表的起始地址放入BX寄存器。使用XLAT查表指令可以将地址BX+AL上的一个字节,即AL数值对应的平方值读入AL中。程序流程图第5页/共16页6/17编写程序DATA SEGMENTTABLEDB0,1,4,9,16,25,36,49,64,81,100, 121,144,169,196,225X DB9RESULTDB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,X MOV BX,OFFSETTABLE ;LEABX,TABLE XLAT MOV RESULT,AL MOV AH,4CH INT 21HCODE ENDSENDSTART第6页/共16页7/17在实际程序设计中,很少有程序会从头到尾都是顺序执行的,绝大部分程序在执行过程中会根据一些条件的判断决定不同的处理方式或程序流向,这就是分支的概念。程序的流向是由CS和IP中的值决定的,当程序的转移仅在同一段内进行时,只需修改偏移地址IP的值;如果程序的转移是在不同段之间进行,则段基址CS和偏移地址IP均需要修改。一是分支前的条件判断;二是根据判断结果进行转移。分支结构程序两要素第7页/共16页8/17Y=1当X>0(-128≤X≤127)0当X=0-1当X<0【例】设Y为符号函数,编写其对应的分支程序。通常一条比较指令只能产生两路分支,因此要产生N路分支就需要N-1条条件转移指令。使用比较指令实现程序分支第8页/共16页9/17MOV AL,AA CMP AL,0 ;用比较指令进行判断 JGE BIGR ;如果大于等于0则转移 MOVAL,-1 ;否则X<0,AL=-1 JMP STOPBIGR: JG NEXTl ;如果X>0转移到NEXT1 MOV AL,0 ;否则X=0,AL=0 JMP STOPNEXT1: MOVAL,1 ;X>0,则AL=1STOP: MOVBB,AL ;将AL值存到BB中 INT 20H ;返回操作系统解:设X的值放在AA单元中,Y的值放在BB单元中。第9页/共16页10/17【例】