第5章汇编语言程序设计(3).ppt
第5章 汇编语言程序设计 5.5 汇编语言程序设计的基本方法汇编语言程序设计的基本方法通常通常,编制一个汇编语言源程序应按如下步骤进编制一个汇编语言源程序应按如下步骤进行行:明确任务明确任务,确定算法。确定算法。绘制流程图。绘制流程图。根据流程图编写汇编语言程序。根据流程图编写汇编语言程序。上机调试程序。上机调试程序。程序的基本结构有四种:顺序结构、分支结构、程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。循环结构和子程序结构。第5章 汇编语言程序设计 5.5.1 顺序程序设计顺序程序设计顺序结构也称线性结构,其特顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。点是其中的语句或结构被连续执行。顺序程序是最简单的,也是最顺序程序是最简单的,也是最基本的一种程序结构。这种结构的基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,一个终止框外,就是若干执行框,没有判断框。框,没有判断框。S1S2S3开始结束第5章 汇编语言程序设计 例例1求两个数的平均值。这两个数分别存放在求两个数的平均值。这两个数分别存放在X单元和单元和Y单元中,而平均值放在单元中,而平均值放在Z单元中。源程序编制单元中。源程序编制如下如下:DATA SEGMENTX DB 8CHY DB 64HZDB?DATA ENDSSTACKSEGMENT stack st DW 20H DUP(0)stackbottom dw$-stSTACKENDS第5章 汇编语言程序设计 CODESEGMENTMAINPROC FARASSUME CS:CODE ASSUME DS:DATAASSUME SS:STACKSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,stackbottom第5章 汇编语言程序设计 MOV AL,XADD AL,YMOV AH,0ADC AH,AHSHR AX,1MOV Z,ALRETMAINENDPCODEENDSEND STARTLi508.asm第5章 汇编语言程序设计 例5.9 在内存中自tab开始的16个单元连续存放着0至15的平方值(平方表),任给一个数x(0 x15)在x单元中,如13,查表求x的平方值,并把结果放入y单元中。DATA SEGMENTtabDB 0,1,4,9,16,25,36,49,64,81DB100,121,144,169,196,225x DB 13y DB?DATA ENDS第5章 汇编语言程序设计 CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,tab MOV AH,0 MOV AL,x ADD BX,AX MOV AL,BX MOV y,AL MOV AH,4CH INT 21H CODE ENDS END STARTLi509.asm LEA BX,tabMOV AL,x XLAT第5章 汇编语言程序设计 5.5.2 分支程序设计分支程序设计分支程序结构也称条件结构,通常是在两种或两分支程序结构也称条件结构,通常是在两种或两个以上的不同的操作中选择其中的一个,如下图所示:个以上的不同的操作中选择其中的一个,如下图所示:分支是通过条件转移指令来实现的。分支结构有分支是通过条件转移指令来实现的。分支结构有一个共同点:运行方向总是向前的。一个共同点:运行方向总是向前的。条件S1S2条件SS1S2Sn条件N NN NY YY Y第5章 汇编语言程序设计 例2 现有一符号函数:1 当X0时Y=0 当X=0时 -1 当X0时假定X为-25,且存放在VARX单元中,函数值Y存放在VARY单元,试编写程序根据X的值确定函数Y的值。根据题意画出流程图如下:第5章 汇编语言程序设计 实现符号函数程序的流程图开始ALXAL0?Y-1结束AL0Y1Y0YYYYNNNN第5章 汇编语言程序设计 编写程序如下:DSEG SEGMENTVARX DB -25VARY DB?DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXMOV AL,VARXCMP AL,0JGE NEXTMOV AL,0FFH ;MOV AL,-1JMP EXIT第5章 汇编语言程序设计 NEXT:JE ZEROMOV AL,1JMP EXITZERO:MOV AL,0EXIT:MOV VARY,ALMOV AH,4CHINT 21HCODEENDSEND STARTMOVDL,VARYMOV CL,4ROR DL,CLAND DL,0FHCMPDL,0AHJBNUMADDDL,7NUM:ADD DL,30HMOV AH,2INT 21HMOV DL,VARYAND DL,OFHCMPDL,0AHJBNUBADDDL,7NUB:ADD DL,30HMOV AH,2INT 21HMOV DL,HMOV AH,2INT 21HLi510.asm第5章 汇编语言程序设计 例例5.11 设有首地址为arry的字数组,已按升序排好,数组长度为n(假设n15),且数据段与附加段占同一段,在该数组中查找数number(假设等于83),若找到它,则从数组中删掉;若找不到,则把它插入正确位置,且变化后的数组长度在DX中。第5章 汇编语言程序设计 DATAJ SEGMENT DW?n DW 15 number DW 83 arry DW5,10,17,21,28,32,41,50,56,67,72 DW88,95,125,150 DATAJENDS CODMA SEGMENT MAIN PROC FAR ASSUME CS:CODMA,DS:DATAJ,ES:DATAJTART:PUSHDS SUB AX,AX PUSH AX PUSH ES MOV AX,DATAJ MOV DS,AX PUSH DS POP ES第5章 汇编语言程序设计 MOV AX,number;待查找的数放入AX MOV DX,n ;初始化DX MOV CX,n ;设置计数器CX MOV DI,OFFSET arry;arry的有效地址放入DI CLD ;建立方向标志 REPNE SCASW ;用重复串扫描指令进行查找 JE DELETE DEC DX MOV SI,DX ADD SI,DX TT3:CMP AX,arrySI JL TT1 MOV arrySI+2,AX;功能是:若没有查到,JMP TT2 ;则将此数插入正确位置 TT1:MOV BX,arrySI MOV arrySI+2,BX SUB SI,2 JMP TT3 TT2:ADD DX,2 ;修改数组长度 JMP FAN DELETE:JCXZ NEXT LOOPT:MOV BX,DI ;此程序段功能是:若查找到,MOV DI-2,BX;则从数组中删除该数 ADD DI,2 LOOP LOOPT NEXT:DEC DX ;修改数组长度 FAN:POP ES RET MAIN ENDP CODMA ENDS END STARTLi511.asm