第5章汇编语言程序设计.ppt

上传人:王** 文档编号:603797 上传时间:2023-12-08 格式:PPT 页数:53 大小:604KB
下载 相关 举报
第5章汇编语言程序设计.ppt_第1页
第1页 / 共53页
第5章汇编语言程序设计.ppt_第2页
第2页 / 共53页
第5章汇编语言程序设计.ppt_第3页
第3页 / 共53页
第5章汇编语言程序设计.ppt_第4页
第4页 / 共53页
第5章汇编语言程序设计.ppt_第5页
第5页 / 共53页
第5章汇编语言程序设计.ppt_第6页
第6页 / 共53页
第5章汇编语言程序设计.ppt_第7页
第7页 / 共53页
第5章汇编语言程序设计.ppt_第8页
第8页 / 共53页
第5章汇编语言程序设计.ppt_第9页
第9页 / 共53页
第5章汇编语言程序设计.ppt_第10页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章汇编语言程序设计.ppt(53页珍藏版)》请在优知文库上搜索。

1、第第5章章 汇编语言程序设计汇编语言程序设计主要内容主要内容l顺序、分支、循环结构程序设计顺序、分支、循环结构程序设计l子程序设计子程序设计l转移指令、循环指令和子程序伪指令转移指令、循环指令和子程序伪指令教学要求教学要求l掌握:掌握:(1)分支程序的概念、结构和设计(2)循环程序的概念、结构和设计(3)子程序的概念、结构和设计l了解:了解:转移表法和地址表法多分支程序的设计原理;多重循环程序的结构形式,内层循环与外层循环遵守的层次结构规则,参数修改对各层的相互影响;汇编递归程序方法。编制一个汇编语言程序的步骤编制一个汇编语言程序的步骤(1)分析题意,确定算法。(2)根据算法,确定程序流程或画

2、出程序框图。(3)根据流程或框图编写程序。(4)上机调试程序。5.1 顺序程序设计顺序程序设计l顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写顺序,所以,安排指令的先后次序就显得至关重要。【例例】设置光标到屏幕左上角设置光标到屏幕左上角SET_CUR PROCMOV AH,2 ;设置光标位置功能MOV BH,0 ;页号MOV DX,0 ;行DH,列DLINT 10H ;BIOS输出字符中断 RETSET_CUR ENDP 这个程序段是顺序执行的,一条指令执行后顺序执行紧接其后的另一条指令。【例例】设在设在X单元中存放一个单元中存放一个07之间的整数,用查表法求出其平之间的整数,用查表

3、法求出其平方值,并将结果存入方值,并将结果存入Y单元。单元。l分析:根据题意,首先将07所对应的平方值存入连续的8个单元中,构成一张平方值表,其首地址为SQTAB。l由表的存放规律可知:表首址SQTAB与X单元中的数i之和,正是i2所在单元的地址。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,

4、DS:DATA,SS:STACKSQRTSUB PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AL,X ;取数iMOV AH,0MOV BX,OFFSET SQTAB ;BX表首址ADD BX,AXMOV AL,BX ;取i2并保存MOV Y,ALRETSQRTSUB ENDPCODE ENDSEND SQRTSUB5.2 分支程序设计分支程序设计l分支结构是一种非常重要的程序结构,也是实现程序功能选择所必要的程序结构。l由于汇编语言需要用转移指令来实现分支结构,而转移指令肯定会破坏程序的

5、结构,所以,编写清晰的分支结构是掌握该结构的重点。l计算机可根据不同条件进行逻辑判断,从而选择不同的程序流向。程序的流向是由CS和IP值决定的,当程序的转移仅在同一段内进行时,只需修改偏移地址IP的值;如果程序的转移是在不同段之间进行的,则段基址CS和偏移地址IP的值均需要修改。5.2.1 转移指令转移指令l转移指令是汇编程序员经常要用到的一组指令。在高级语言中,时常有“尽量不要使用转移指令语句”的劝告。但是,在汇编语言程序中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。l转移指令分为无条件转移指令和有条件转移指令。无条件转移指令无条件转移指令JMP l无条件转移指令

6、JMP指令是从程序当前执行的地方无条件地转移到另一个地方执行。指令格式JMP 地址表达式指令功能无条件地转移到由地址表达式所确定的目标单元,本指令对标志位无影响4种方式段内直接转移段内间接转移段间直接转移段间间接转移说 明这是一种相对寻址方式。它转移的目标地址是当前IP内容加上一个8位相对位移量(DISP),DISP是汇编程序在汇编源程序时,根据目标地址和当前IP之间的距离自动生成的它转移的目标地址可通过寄存器或存储单元来寻址 当一条无条件转移指令中的地址表达式是一个段间(FAR)标号或段间标号加减一常量(必须在该标号所在段内)时,则该指令被汇编成一个段间直接转移指令代码它转移的目标地址由存储

7、器寻址方式指定的内存中的连续两个字来决定,低地址的字取代IP,高地址的字取代CS功能IP=IP+DISPIP=Reg16 或 P=Mem16无条件转移指令无条件转移指令JMPlJMP指令转移可以是短(short)转移(偏移量在-128B,127B之内)、近(near)转移(偏移量在-32KB,32KB之内)、远(far)转移(在不同的代码段之间转移)。l短转移和近转移都是段内转移,JMP指令只将目标指令位置处的偏移量赋值给指令指针寄存器IP,从而实现转移功能l远转移属于段间转移,JMP指令不仅会把目标指令位置处的偏移量赋值给指令指针寄存器,同时还会把目标指令所处的代码段的段地址赋值给当前代码段

8、寄存器CS。有条件转移指令有条件转移指令 l有条件转移指令是一组及其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段 有条件转移指令的格式和类型有条件转移指令的格式和类型 指令格式 指令说明当满足条件而发生转移的指令,称为条件转移指令。它们以某些标志位或这些标志位的逻辑运算作为依据,若满足指令所规定条件,则程序转移,否则顺序执行根据单个标志位的条件转移指令用于无符号数的条件转移指令用于带符号数的条件转移指令(1)有进位转移(JC)或无进位转移(JNC)(2)等于/为零转移(JE/JZ)或不等于/非零转移(JNZ)(3)负数转移(J

9、S)或正数转移(JNS)(4)溢出转移(JO)或不溢出转移(JNO)(5)偶校验转移(JP/JPE)或奇校验转移(JNP/JPO)(6)寄存器CX为零转移(JCXZ)(1)高于转移(JA)/不低于且不等于转移(JNBE)(2)高于或等于转移(JAE)/不低于转移(JNB)(3)低于转移(JB)/不高于且不等于转移(JNAE)(4)低于或等于转移(JBE)/不高于转移(JNA)(1)大于转移(JG)/不小于且不等于转移(JNLE)(2)大于或等于转移(JGE)/不小于转移(JNL)(3)小于转移(JL)/不大于且不等于转移(JNGE)(4)低于或等于转移(JLE)/不高于转移(JNG)5.2.2

10、 分支程序的结构分支程序的结构l分支程序结构有两种形式:双分支结构和多分支结构。分支程序设计要点分支程序设计要点 l(1)首先根据处理的问题用比较、测试、算术运算、逻辑运算等方式,使标志寄存器产生相应的标志位。例如,比较两个单元地址的高低、两个数的大小,测试某个数据是正还是负,测试数据的某位是“0”还是“1”等,将处理的结果反映在标志寄存器的CF、ZF、SF、DF和OF位上。l(2)根据转移条件选择适当的转移指令。通常一条条件转移指令只能产生两路分支,因此要产生n路分支需n-1条条件转移指令。l(3)各分支之间不能产生干扰,如果产生干扰,可用无条件转移语句进行隔离。【例例】设有单字节无符号数设

11、有单字节无符号数X、Y、Z,若,若X+Y255,求,求X+Z;否则;否则求求X-Z,运算结果放在,运算结果放在F1中(中(X、Y、Z、F1均为字节变量名)。均为字节变量名)。l分析:这是一个双分支结构。因为X、Y均为无符号数,当X+Y255时会产生进位即CF=1,所以可以用进位标志来判断 MOV AL,XMOV BL,ALADD AL,YJNC LET ;若无进位 则转LETADD BL,Z DONE:MOV F1,BLHLT LET:SUB BL,Z JMP DONEl【例】已知符号函数,假设任意给定x值,存放在内存RS1单元中,求出函数y的值,存放在内存RS2单元中。lDATA SEGME

12、NTlRS1 DB X ;存放自变量XlRS2 DB?;函数Y值的存储单元lDATA ENDSlCODE SEGMENTlASSUME CS:CODE,DS:DATAlSTART:MOV AX,DATAl MOV DS,AXl MOV AL,RS1 ;ALXl CMP AL,0 ;将X与0比较l JGE BIG ;若X0BIGl MOV RS2,0FFH ;若X0,(RS2)-1补0FFHl JMP DONElBIG:JE EQUL ;若X0EQULl MOV RS2,1 ;若X0,(RS2)1l JMP DONElEQUL:MOV RS2,0 ;若X0,(RS2)0lDONE:MOV AH,

13、4CHl INT 21HlCODE ENDSlEND START5.3 循环程序设计循环程序设计l在实际工作中,有时要求对某一问题进行多次重复处理,而仅仅只是初始条件不同,这种计算过程称为具有循环特征的,而循环程序设计是解决这类问题的一种行之有效的方法。循环程序是采用重复执行某一段程序来实现要求完成计算的编程方法。5.3.1 循环指令循环指令l循环语句当然可以用条件转移指令来实现,除此之外,在80 x86系统中还有专门的循环控制指令来简化循环程序的设计。循环控制指令包括重复控制指令和串操作指令。重复循环控制指令重复循环控制指令 指令名称指令名称指令功能指令功能LOOP指令将CX内容减1,若CX

14、不等于0,则循环至目标地址处(即IP+DISP),否则顺序执行后续指令LOOPZ/LOOPE指令将CX内容减1,若CX不等于0,且标志位ZF=1时,才循环至目标地址处,否则顺序执行后续指令LOOPNZ/LOOPNE指令将CX内容减1,若CX不等于0,且标志位ZF=0时,才循环至目标地址处,否则顺序执行后续指令JCXZ指令这条指令是条件转移指令,经常用于重复循环控制注意:注意:在执行此类重复控制指令前必须把重复次数送入寄存器CX中。串操作指令串操作指令 l串操作指令能对存储区中一块(串)字节或字进行操作,其块的长度可达64KB。这些指令分别是:串复制指令MOVS、串取出指令LODS、串存储指令S

15、TOS、串比较指令CMPS和串搜索(扫描)指令SCAS。循环程序的结构循环程序的结构 循环程序一般包括以下5个部分:(1)初始化部分:)初始化部分:为循环做准备工作,如设置地址指针、计数器及其他变量的初值等。(2)循环工作部分:)循环工作部分:它是循环程序的主体,用来完成循环的基本操作。(3)修改部分:)修改部分:为循环参数做必要的修改,如修改操作数地址、计数器,为下一次执行循环体做好准备。(4)控制部分:)控制部分:根据循环条件来判断、控制循环的继续和终止。(5)结束部分:)结束部分:主要是对循环的结果进行必要的处理,如将结果送入某一寄存器或内存区域。循环程序的结构循环程序的结构 常见的循环

16、程序结构有两种形式:“先处理后判断”和“先判断后处理”【例例】计算计算 。假设这。假设这10个已知数为字类型,已连续存放在内个已知数为字类型,已连续存放在内存中以存中以AA为首址的存储区域中,其相加的和仍为字数据,存放在为首址的存储区域中,其相加的和仍为字数据,存放在BB字单元。字单元。l分析:求a1+a2+a10的和,要用10条加法指令来完成,这样程序太长,书写麻烦。由于数据是有规律存放的,并且每加一项所用的指令都一样,只是数据的地址不同,所以可用间接寻址的方法,将数据地址放在寄存器中,用寄存器加1指令修改地址来取得每个待加的数据,将相加的程序作为一个公共执行的程序段,重复执行10次来实现本题的累加过程 101iiyaDATA 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 E

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!