资源描述:
《汇编语言程序设计(顺序分支).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.1汇编语言程序设计顺序结构程序——简单程序结构无分支、无循环、无转移程序。流程图的特点,表现为只有起始、终止框、说明处理框,而无判断框。例、用字节加法,对两个16位数做加法运算。这两个数从地址0050H开绐连续存放。程序清单如下:MOVAX,DATAMOVDS,AXMOVSI,0050H;被加数指针MOVDI,0052H;加数指针MOVBX,0054H;和的指针MOVAL,[SI];取被加数低8位ADDAL,[DI];低位相加MOVAH,[SI+1];取被加数高8位ADCAH,[DI+1];高位相加MOV[BX],AX;保存运算结果INT20H;结束起始终
2、止保存运算结果AH=高8位相加AH=被加数高8位AL=低8位相加AL=被加数低8位SI=50H,DI=52H,BX=54HDS=3000H数据段定义为:DATASEGMENTORG0050HDB34HDB12HDB78HDB56HDB2DUP(?)DATAENDS如数据段定义为:DATASEGMENTORG0050HDW1234HDW5678HDW?DATAENDS程序也可改为:MOVAX,DATAMOVDS,AXMOVSI,0050H;被加数指针;MOVDI,0052H;加数指针MOVBX,0054H;和的指针MOVAX,[SI];取被加数低8位ADDAX,
3、[DI];低位相加MOV[BX],AX;保存运算结果INT20H;结束3.1汇编语言程序设计例、编写计算f=(V-(X*Y+Z-500))/X的程序。X、Y、Z、V均为有符号16位二进制数。DATASEGMENTXDW0100HYDW01ABHZDW-2100HVDW6200HFDW?,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XIMULY;DX:AX=X*YADDAX,ZADCDX,0;DX:AX=X*Y+ZSUBAX,500HSBBDX,0;DX:AX=()
4、此处注意进位和借位的处理方法。MOVBX,AXMOVCX,DX;保存中间结果MOVAX,VCWD;DX:AX=VSUBAX,BXSBBDX,CX;DX:AX=((V-())IDIVXMOVAH,4CHINT21HCODEENDSENDSTARTMOVF,AX;保存商MOVF+2,DX;保存余数3.1汇编语言程序设计分支结构程序分支程序是利用条件转移指令,使程序执行到某一指令后,根据运算状态标志条件是否满足,来改变程序执行的次序。分支程序的结构如图所示。条件程序段1程序段2YNY=1当X>0(-128≤x≤127)0当X=0-1当X<0例1符号函数3.1汇编语言
5、程序设计分支结构程序Y=1当X>0(-128≤x≤127)0当X=0-1当X<0例1符号函数起始取数终止保存结果Y=1Y=0Y=FFH=-1X=0?YNX<0?YNMOVAL,XXCMPAL,0JGEBIGRMOVAL,0FFH;x<0MOVYY,ALHLTBIGR:JEEQULMOVAL,1MOVYY,AL;x>0HLTEQUL:MOVYY,AL;X=0HLT3.1汇编语言程序设计分支结构程序例2、求AX和BX中两无符号数之差的绝对值,结果放在内存200H单元中。方法1用比较指令完成MOVAX,[300H]MOVBX,[302H]CMPAX,BXJAAASU
6、BBX,AXMOV[200H],BXINT20HAA:SUBAX,BXMOV[200H],AXINT20H分析:AX和BX的数未知。两数相减求绝对值,应先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。3.1汇编语言程序设计分支结构程序例2、求AX和BX中两无符号数之差的绝对值,结果放在内存200H单元中。方法2优化上面的程序MOVAX,[300H]MOVBX,[302H]CMPAX,BXJAAAXCHGAX,BXAA:SUBAX,BXMOV[200H],AXINT20H方法3用新的算法完成MOVAX,[300H]MOVBX,[302]SUBAX
7、,BXJAAANEGAXAA:MOV[200H],AXINT20HDEBUG不同的算法程序的质量不相同,好的数学模型往往是最好的算法3.1汇编语言程序设计分支结构程序例3、利用跳转表实现多重分支。跳转表:内存中连续存放一系列的跳转地址、跳转指令组成一分支表。DATASEGMENTBASEDWSBRO,SBR1,SBR2,SBR3DWSBR4,SBR5,SBR6,SBR7BNDB3;工序DATAENDS某工厂有8种产品的加工程序R0到R7分别存放在以SBR0,SBR1,……,SBR7为首地址的内存区域中,这8个首地址的偏移量连续存放在以BASE为首地址的跳转表内
8、,如图所示。表地址=表基地址+偏移量。