第5章汇编语言程序设计.ppt
《第5章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章汇编语言程序设计.ppt(53页珍藏版)》请在课桌文档上搜索。
1、第5章 汇编语言程序设计,主要内容,顺序、分支、循环结构程序设计子程序设计转移指令、循环指令和子程序伪指令,教学要求,掌握:(1)分支程序的概念、结构和设计(2)循环程序的概念、结构和设计(3)子程序的概念、结构和设计了解:转移表法和地址表法多分支程序的设计原理;多重循环程序的结构形式,内层循环与外层循环遵守的层次结构规则,参数修改对各层的相互影响;汇编递归程序方法。,编制一个汇编语言程序的步骤,(1)分析题意,确定算法。(2)根据算法,确定程序流程或画出程序框图。(3)根据流程或框图编写程序。(4)上机调试程序。,5.1 顺序程序设计,顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写
2、顺序,所以,安排指令的先后次序就显得至关重要。,【例】设置光标到屏幕左上角,SET_CUR PROCMOV AH,2;设置光标位置功能MOV BH,0;页号MOV DX,0;行DH,列DLINT 10H;BIOS输出字符中断 RETSET_CUR ENDP,这个程序段是顺序执行的,一条指令执行后顺序执行紧接其后的另一条指令。,【例】设在X单元中存放一个07之间的整数,用查表法求出其平方值,并将结果存入Y单元。,分析:根据题意,首先将07所对应的平方值存入连续的8个单元中,构成一张平方值表,其首地址为SQTAB。由表的存放规律可知:表首址SQTAB与X单元中的数i之和,正是i2所在单元的地址。,
3、DATA SEGMENT;数据段定义SQTAB DB 0,1,4,9,16,25,36,49;平方值表X DB 5Y DB?DATA ENDSSTACK SEGMENT PARA STACK STACKTAPN DB 100 DUP(?)TOP EQU LENGTH TAPNSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,SQRTSUB PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AL,X;取数iMOV AH,0MOV BX,O
4、FFSET SQTAB;BX表首址ADD BX,AXMOV AL,BX;取i2并保存MOV Y,ALRETSQRTSUB ENDPCODE ENDSEND SQRTSUB,5.2 分支程序设计,分支结构是一种非常重要的程序结构,也是实现程序功能选择所必要的程序结构。由于汇编语言需要用转移指令来实现分支结构,而转移指令肯定会破坏程序的结构,所以,编写清晰的分支结构是掌握该结构的重点。计算机可根据不同条件进行逻辑判断,从而选择不同的程序流向。程序的流向是由CS和IP值决定的,当程序的转移仅在同一段内进行时,只需修改偏移地址IP的值;如果程序的转移是在不同段之间进行的,则段基址CS和偏移地址IP的值
5、均需要修改。,5.2.1 转移指令,转移指令是汇编程序员经常要用到的一组指令。在高级语言中,时常有“尽量不要使用转移指令语句”的劝告。但是,在汇编语言程序中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。转移指令分为无条件转移指令和有条件转移指令。,无条件转移指令JMP,无条件转移指令JMP指令是从程序当前执行的地方无条件地转移到另一个地方执行。,无条件转移指令JMP,JMP指令转移可以是短(short)转移(偏移量在-128B,127B之内)、近(near)转移(偏移量在-32KB,32KB之内)、远(far)转移(在不同的代码段之间转移)。短转移和近转移都是段内转移
6、,JMP指令只将目标指令位置处的偏移量赋值给指令指针寄存器IP,从而实现转移功能远转移属于段间转移,JMP指令不仅会把目标指令位置处的偏移量赋值给指令指针寄存器,同时还会把目标指令所处的代码段的段地址赋值给当前代码段寄存器CS。,有条件转移指令,有条件转移指令是一组及其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段,有条件转移指令的格式和类型,5.2.2 分支程序的结构,分支程序结构有两种形式:双分支结构和多分支结构。,分支程序设计要点,(1)首先根据处理的问题用比较、测试、算术运算、逻辑运算等方式,使标志寄存器产生相应的标志位
7、。例如,比较两个单元地址的高低、两个数的大小,测试某个数据是正还是负,测试数据的某位是“0”还是“1”等,将处理的结果反映在标志寄存器的CF、ZF、SF、DF和OF位上。(2)根据转移条件选择适当的转移指令。通常一条条件转移指令只能产生两路分支,因此要产生n路分支需n-1条条件转移指令。(3)各分支之间不能产生干扰,如果产生干扰,可用无条件转移语句进行隔离。,【例】设有单字节无符号数X、Y、Z,若X+Y255,求X+Z;否则求X-Z,运算结果放在F1中(X、Y、Z、F1均为字节变量名)。,分析:这是一个双分支结构。因为X、Y均为无符号数,当X+Y255时会产生进位即CF=1,所以可以用进位标志
8、来判断,MOV AL,XMOV BL,ALADD AL,YJNC LET;若无进位 则转LETADD BL,Z DONE:MOV F1,BLHLT LET:SUB BL,Z JMP DONE,【例】已知符号函数,假设任意给定x值,存放在内存RS1单元中,求出函数y的值,存放在内存RS2单元中。,DATA SEGMENTRS1 DB X;存放自变量XRS2 DB?;函数Y值的存储单元DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,RS1;ALX CMP AL,0;将X与0比较 JGE BI
9、G;若X0BIG MOV RS2,0FFH;若X0,(RS2)-1补0FFH JMP DONEBIG:JE EQUL;若X0EQUL MOV RS2,1;若X0,(RS2)1 JMP DONEEQUL:MOV RS2,0;若X0,(RS2)0DONE:MOV AH,4CH INT 21HCODE ENDSEND START,5.3 循环程序设计,在实际工作中,有时要求对某一问题进行多次重复处理,而仅仅只是初始条件不同,这种计算过程称为具有循环特征的,而循环程序设计是解决这类问题的一种行之有效的方法。循环程序是采用重复执行某一段程序来实现要求完成计算的编程方法。,5.3.1 循环指令,循环语句当
10、然可以用条件转移指令来实现,除此之外,在80 x86系统中还有专门的循环控制指令来简化循环程序的设计。循环控制指令包括重复控制指令和串操作指令。,重复循环控制指令,注意:在执行此类重复控制指令前必须把重复次数送入寄存器CX中。,串操作指令,串操作指令能对存储区中一块(串)字节或字进行操作,其块的长度可达64KB。这些指令分别是:串复制指令MOVS、串取出指令LODS、串存储指令STOS、串比较指令CMPS和串搜索(扫描)指令SCAS。,循环程序的结构,循环程序一般包括以下5个部分:(1)初始化部分:为循环做准备工作,如设置地址指针、计数器及其他变量的初值等。(2)循环工作部分:它是循环程序的主
11、体,用来完成循环的基本操作。(3)修改部分:为循环参数做必要的修改,如修改操作数地址、计数器,为下一次执行循环体做好准备。(4)控制部分:根据循环条件来判断、控制循环的继续和终止。(5)结束部分:主要是对循环的结果进行必要的处理,如将结果送入某一寄存器或内存区域。,循环程序的结构,常见的循环程序结构有两种形式:“先处理后判断”和“先判断后处理”,【例】计算。假设这10个已知数为字类型,已连续存放在内存中以AA为首址的存储区域中,其相加的和仍为字数据,存放在BB字单元。,分析:求a1+a2+a10的和,要用10条加法指令来完成,这样程序太长,书写麻烦。由于数据是有规律存放的,并且每加一项所用的指
12、令都一样,只是数据的地址不同,所以可用间接寻址的方法,将数据地址放在寄存器中,用寄存器加1指令修改地址来取得每个待加的数据,将相加的程序作为一个公共执行的程序段,重复执行10次来实现本题的累加过程,DATA SEGMENT;定义数据AA DW 100H,200H,300H,400H,500H,600H,700H,800H,900H,1000HBB DB 4 DUP(?)MES1 DB AA:100H,200H,300H,400H,500H,600H,700H,800H,900H,1000H,0DH,0AH,$MES2 DB BB:,0DH,0AH,$DATA ENDS,CODE SEGMENT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-747761.html