汇编语言程序设计(顺序分支).ppt
3.1 汇编语言程序设计,顺序结构程序简单程序结构,程序清单如下:MOVAX,DATAMOV DS,AXMOVSI,0050H;被加数指针MOVDI,0052H;加数指针MOVBX,0054H;和的指针MOVAL,SI;取被加数低8位ADDAL,DI;低位相加MOVAH,SI+1;取被加数高8位ADCAH,DI+1;高位相加MOVBX,AX;保存运算结果INT 20H;结束,数据段定义为:DATA SEGMENTORG 0050HDB 34HDB 12HDB 78HDB 56HDB 2 DUP(?)DATA ENDS,如数据段定义为:DATA SEGMENTORG 0050HDW 1234HDW 5678HDW?DATA ENDS 程序也可改为:MOVAX,DATAMOV DS,AXMOVSI,0050H;被加数指针;MOVDI,0052H;加数指针MOVBX,0054H;和的指针MOVAX,SI;取被加数低8位ADDAX,DI;低位相加MOVBX,AX;保存运算结果INT 20H;结束,3.1 汇编语言程序设计,例、编写计算f=(V-(X*Y+Z-500)/X的程序。X、Y、Z、V均为有符号16 位二进制数。,DATASEGMENTX DW 0100HY DW 01ABHZ DW-2100HV DW 6200HF DW?,?DATAENDS,CODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOVDS,AXMOVAX,XIMULY;DX:AX=X*YADDAX,ZADCDX,0;DX:AX=X*Y+ZSUBAX,500HSBBDX,0;DX:AX=()此处注意进位和借位的处理方法。MOV BX,AXMOV CX,DX;保存中间结果MOVAX,VCWD;DX:AX=VSUBAX,BXSBBDX,CX;DX:AX=(V-()IDIVX,MOVAH,4CHINT21HCODEENDSEND START,MOVF,AX;保存商MOVF+2,DX;保存余数,3.1 汇编语言程序设计,分支结构程序,分支程序是利用条件转移指令,使程序执行到某一指令后,根据运算状态标志条件是否满足,来改变程序执行的次序。分支程序的结构如图所示。,3.1 汇编语言程序设计,分支结构程序,MOVAL,XXCMPAL,0JGEBIGRMOVAL,0FFH;x0HLTEQUL:MOVYY,AL;X=0HLT,3.1 汇编语言程序设计,分支结构程序,例2、求AX和BX中两无符号数之差的绝对值,结果放在内存200H单元中。,方法1用比较指令完成MOVAX,300HMOVBX,302HCMPAX,BXJAAASUBBX,AXMOV200H,BXINT20HAA:SUBAX,BXMOV200H,AXINT20H,分析:AX和BX的数未知。两数相减求绝对值,应先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。,3.1 汇编语言程序设计,分支结构程序,例2、求AX和BX中两无符号数之差的绝对值,结果放在内存200H单元中。,方法2优化上面的程序MOVAX,300HMOVBX,302HCMPAX,BXJAAAXCHGAX,BXAA:SUBAX,BXMOV200H,AXINT20H,方法3用新的算法完成MOVAX,300HMOVBX,302SUBAX,BXJAAANEGAXAA:MOV200H,AXINT20H,DEBUG,不同的算法程序的质量不相同,好的数学模型往往是最好的算法,3.1 汇编语言程序设计,分支结构程序,例3、利用跳转表实现多重分支。跳转表:内存中连续存放一系列的跳转地址、跳转指令组成一分支表。,DATA SEGMENTBASE DW SBRO,SBR1,SBR2,SBR3DW SBR4,SBR5,SBR6,SBR7BN DB 3;工序DATA ENDS,某工厂有8种产品的加工程序R0到R7分别存放在以SBR0,SBR1,SBR7为首地址的内存区域中,这8个首地址的偏移量连续存放在以BASE为首地址的跳转表内,如图所示。,表地址=表基地址+偏移量。表基地址即为跳转表的首地址,偏移量即对应的程序人口地址在表中的地址与表基地址的距离。,3.1 汇编语言程序设计,分支结构程序,MAIN PROC FARBEGIN:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AX MOV AL,BNMOV AH,0ADD AL,ALMOV BX,OFFSET BASEADD BX,AXMOV AX,BX JMP AXNEXT:RETMAINENDP,SBRO:JMPNEXTSBR7:JMPNEXTNEXT:COSEG ENDSEND BEGIN,COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,DATA SEGMENTBASE DW SBRO,SBR1,SBR2,SBR3DW SBR4,SBR5,SBR6,SBR7BN DB 3;工序DATA ENDS,3.1 汇编语言程序设计,返回DOS方法小结:1、MOVDX,DATAMOVDS,DXMOVAH,4CHINT21H,3、扩展名为COM的文件INT20H,2、MAIN PROC PUSHDSMOVAX,0PUSHAXRET MAINENDP,