收藏 分销(赏)

微型计算机原理 第五章汇编语言程序设计.pdf

上传人:曲**** 文档编号:5759041 上传时间:2024-11-19 格式:PDF 页数:87 大小:3.39MB 下载积分:15 金币
下载 相关 举报
微型计算机原理 第五章汇编语言程序设计.pdf_第1页
第1页 / 共87页
微型计算机原理 第五章汇编语言程序设计.pdf_第2页
第2页 / 共87页


点击查看更多>>
资源描述
微型计算机原理第五章汇编语言程序设计第5章汇编语言程序设计主要内容:-汇编语言源程序的格式及上机过程-汇编语句源程序的编写-汇编语言程序的设计(一)-顺序与分支结构-汇编语言程序的设计(二)循环结构与子程序微型计算机原理第五章汇编语言程序设计5.1汇编语言源程序的格式及上机过程本节学习要求学会在DEBUG调试环境下察看程序结果 学会简单汇编程序的编辑、运行过程 掌握常见的输入及显示方法微型计算机原理第五章汇编语言程序设计计算机语言发展过程机器语言FORTRANBASICCOBOLPASCALC/C+/C#JAVA微型计算机原理第五章汇编语言程序设计机器语言:依赖于机器的低级语言,书写格式为二进制代码。优点.执行速度快,效率高。秧点:表达的意义不直观,编写、阅读、调试较困难。汇编语言:一种符号语言,与机器语言一一对应;使用助记符优点:用户理解容易缺点:不能被机器直接识别高级语言:独立于机器的通用语言,接近人类的自然语言。优点:易学易用,可移植性较好缺点:目标代码冗长,占用内存多,执行效率不高2014年12月28日4微型计算机原理第五章汇编语言程序设计汇编语言源程序的格式例 编程实现多字节加法,如S=3B74AC60F8H+20D59E36ClHDATA1DATA2被加数、和加数5微型计算机原理第五章汇编语言程序设计:DATA SEGMENT:DATA1 DB 0F8H,60H,OACH,74H,3BH!DATA2 DB 0C1H,36H,9EH,0D5H,20H:DATA ENDS I_END STARTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVMOV MOV MOV CLCLOOPER:MOVADC INC DECJNZ MOVINTCODE ENDSAX,DATA DS,AX CX,5SI,0AL,DATA2SIDATA1SI,ALSICXLOOPERAH,4CH 21H6微型计算机原理第五章汇编语言程序设计汇编语言源程序的组织结构汇编语言源程序采用的是分段结构,即一个汇编语 言源程序由若干段组成(一般由数据段和代码段组成),每一个段以SEGMENT语句开始,以ENDS语句结束,整个程序的结尾是END语句。在代码段中下面的内容是不可缺少的:(1)定义段(使用SEGMENT/ENDS语句定义)(2)约定段寄存器和段的关系(即物理段和逻辑 段的关系,使用一个或多个ASSUME语句实现)(3)装填段寄存器(只装填数据型段寄存器)(4)设置返回DOS的方法7微型计算机原理第五章汇编语言程序设计例如:MYDARA SEGMENTMYDATA ENDS;定义数据段起始语句;定义数据;定义数据段终止语句MYCODE SEGMENT;定义代码段起始语句ASSUME CS:MYCODE,DS:MYDATA;约定段寄存器和段的关系START:MOV AX,MYDATA;装填相应的段寄存器MOV DS,AX.;完成所需功能的程序段MOV AH,4CH;设置返回DOSINT 21HMYCODE ENDS;定义代码段终止语句END START;程序结束2014年12月28日8微型计算机原理第五章汇编语言程序设计汇编语言语句的类型和格式1.语句分类 指令性语句:也称指令语句,指令系统的指令,汇编后产生目标代码。指示性语句:也称伪指令语句,告诉汇编程序 如何汇编,汇编后不产生目标代码。宏指令语句:自定义语句,由指令语句和伪指 令语句组成的指令集合,不展开时不产生目标代码。2.语句格式汇编语言是由一条条的语句组成的,其每条语句的 格式如下:9微型计算机原理第五章汇编语言程序设计名字语句前缀助记符操作数;注释其中带方括号的部分表示任选项,既可以有,也可 以没有。(1)名字“名字”是语句的符号地址,对于指令语句,“名 字”称为标号,其后必须加冒号“:”;对于伪指令语 句“名字”可以是变量名、段名、过程名等,其后不能 加冒号“:工“名字”一般都有三个属性:段属性、偏移属性和 类型属性。段属性:表示“名字”所在段的起始地址(即 段地址)。10微型计算机原理第五章汇编语言程序设计偏移属性:表示“名字”所在段的起始地址到 定义该“名字”的地址之间的字节数(即偏移量)。偏 移量是一个16位无符号数。类型属性:表示该名字的数据或地址的类型。对于标号和过程名,类型属性有NEAR和FAR两种,表示只能在段内被引用还是可以在其它段被引用;对于变量类型属性有BYTE(字节)、WORD(字)、DWORD(双字)、QWORD(四字)、TBYTE(十字节)等,表示 数据区中存取操作对象的大小。对于段名只有段属性,表示段的起始地址(段地址),而没有偏移属性和类型属性。11微型计算机原理第五章汇编语言程序设计(2)助记符在指令语句中,表示该指令语句的操作码,在伪 指令语句中称为定义符,它们指出其语句的功能。(3)操作数操作数即为操作的对象。在指令语句中,可能有 单操作数或双操作数,也可能无操作数或隐含操作数;而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。可以作为操作数的有:常数、寄存器、标号、变量 和表达式等。12微型计算机原理第五章汇编语言程序设计1)常量:是在指令中出现的哪些固定值,可以分为数值常数和字符串常数两类。2)寄存器:8086/8088CPU的寄存器可以作 为指令的操作数。3)变量:是存储器中某个数据区的名字,因此在指令中可以作为存储器操作数。4)表达式:使用运算符把常数、寄存器、标号、变量等连接起来的运算式。表达式分为数值表达式和地址表达式两种O表达式中常用的运算符有以下几种:13微型计算机原理 第五章汇编语言程序设计算术运算符:+、-、火、/和MOD(模除,即两个整数相除后取余数)等。逻辑运算符:AND、OR、XOR、NOT等。关系运算符:EQ、NE、LT、GT、LE、GE等。分析运算符:SEG、OFFSET.TYPE、SIZE、LENGTH 等。合成运算符:PTR、THIS、SHORT等。其它运算符:、LOW、HIGH等(4)注释注释是对汇编语句的功能或汇编程序的说明O14微型计算机原理第五章汇编语言程序设计5.1.2汇编语言源程序的上机过程上机环境用户开发的程序:ABC.exe等操作系统:DOS系统编辑器 EDIT.exe 汇编程序 MASM.exe 连接程序 LINKexeCPU、存储器 ROM、RAM、I/O接口、输入、输出设备15微型计算机原理第五章汇编语言程序设计上机过程有算法错误16微型计算机原理 第五章汇编语言程序设计(1)编辑程序DOS环境下用EDIT编辑器WINDOWS环境下用记事本(2)汇编源程序宏汇编程序MASM.EXE或小汇编程序ASM.EXE 汇编程序主要有以下功能:检查源程序中语法错误,给出错误提示信息产生目标文件(.OBJ).列表文件(.LST)及 交叉引用文件(.CRF)展开宏指令2014年12月28日17微型计算机原理第五章汇编语言程序设计MASM宏汇编的提示信息及回答提不信息回 答Source filename.ASM:(源文件名)欲汇编的.ASM源文件名(缺省:命令中的文件名)Object filenameSource.OBJ:(目标文件名)目标文件名(缺省:源文件名.OBJ Source listing NUL.LST:(源列表文件名)列表文件名(缺省:无列表文件)Cross referenceNUL.CRF:(交叉参考文件名)交叉参考文件用的文件名(缺省:无交叉参考文件)18微型计算机原理第五章汇编语言程序设计 3 连接目标文件通过LINK.EXE程序实现将多模块连接,产生一个.EXE文件连接库文件.LIB 及产生连接映象文件.MAP LINK的提示信息及回答提示信息回 答Run file.EXE:(可执行文件名)欲连接的.OBJ文件名(缺省:命令中的文件名)List file NUL.MAP:(连接映象文件名)建立连接映象文件名(缺省:无连接映象文件)Libraries.LIB:(库文件名)用到的库文件名(缺省:无库文件)19微型计算机原理第五章汇编语言程序设计(4)运行程序当我们建立了可执行文件后,就可以直接在DOS下 执行该程序。程序调试DEBUG是一种面向汇编语言的动态调试工具,共有 19条命令。DEBUG提供了可以跟踪、测试程序的环境和 条件,使编辑者能够对.EXE和.COM文件的执行进行动态 跟踪调试,能够较快地查找出文件的错误和检查程序的 运行结果。还可以利用DEBUG直接编写一段小的汇编程序,并进行调试和运行。20微型计算机原理第五章汇编语言程序设计DEBUG常用命令-A 起始地址/汇编并保存一段指令语句-U 起始地址/反汇编-T 口起始地址/单步执行(执行一条语句)-R 寄存器/显示或修改寄存器内容-D 存储单元逻辑地址/显示存储单元 80个字节/次)-N 文件名/定义文件-L/装入文件21微型计算机原理第五章汇编语言程序设计例:DATA SEGMENTNUM DB 82H,68H,88H SUM DB?DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET NUM MOV AL,BXINC BXADD AL,BX INC BXADD AL,BX MOV SUM,AL MOV AH,4CH INT 21HCODE ENDS END START2014年12月28日10时49分微型计算机原理第五章汇编语言程序设计5.1.3汇编语言和DOS操作系统的接口1.用户程序在存储器中的位置磁盘00000HFFFFFH内存1KB中断向量表IO.SYS模块 MSDOS.SYS 模块COMMAND.COMRAM用户程序空间hello.exe1 rROM BIOS系统检测程序 ROM引导程序IO.SYSMSDOS.SYSCOMMAND.COMEDIT.EXEMASM.EXELINK.EXEDEBUG.EXEhello,asm hello,obj hello.exe DOS其他 系统 程序应 用 程 序2014年12月28日23微型计算机原理2.用户程序的装入完成以下操作:*确定内存可用部分以便存放要执行的.exe文件。*建立程序段前缀PSP(Program Segment Prefix)/程序段前缀大小100H,即256个字节。,存放执行过程中的控制信息。/PSP最开始的两个字节CD20,是一条INT 20H指令。*装入可执行程序.exe定义了堆栈段的用户程序装入情况第五章汇编语言程序设计DS、ES-1I I1|INT 20H|SS-bPSPQ56字节)数据段CS:IP-1代码段1用户程序SP-没有定义堆栈段的用户程序装入情况DS、ES-INT 20H PSP 256字节)数据段CS:IPSS-SP-附加段用户程序代码段堆栈段J微型计算机原理第五章汇编语言程序设计DSEG SEGMENTSTRING1 DB 1,2,3,4,5DSEG ENDSESEG SEGMENTSTRING!DB?ESEG ENDSSSEG SEGMENT STACK STACKDW 10 DUP(?)TOP LABEL WORDSSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME ES:ESEG,SS:SSEGSTART:MOV MOV MOV MOV MOV MOVAX,DSEG DS,AX AX,ESEG ES,AX AX,SSEG SS,AXCSEG ENDSEND STARTMOV SP,OFFSET TOPLEA SI,STRING1LEA DI,STRING!MOV CX,5CLDREP MOVSBMOV AH,4CHINT 21H微型计算机原理第五章汇编语言程序设计3.返回DOS的方法执行用户程序后,若要返回DOS状态,即在 屏幕上出现DOS提示符,等待输入新的命令,应 在用户程序的最后安排完成此功能的程序段。为了保证用户程序执行完后,能回到DOS,可使用如下两种方法:(1)非标准方法:调用INT 21H的4cH功能,例如:MOV AH,4CHINT 21H26微型计算机原理 第五章汇编语言程序设计(2)标准方法:借用PSP首单元的INT 20H返 回 DOS。这种方法较麻烦。由于执行INT 20H的前提是 CS:IP必须指向PSP首单元,否则执行INT 20H反 而会造成死机,因此在.EXE文件汇编格式中,不能直接执行INT 20Ho用下列方法可使在需返 回DOS时,CS:IP指向PSP首单元。把主程序定义成一个远过程。即:过程名PROC FAR RET过程名ENDP27微型计算机原理第五章汇编语言程序设计在给DS、ES赋初值之前,用下列三条指令,把PSP首单元的逻辑地址压入堆栈,即PUSH DS;PSP段地址压栈MOV AX,0;或用XOR AX,AX指令PUSH AX;PSP段首单元的偏移地址;压栈(偏移地址为0000H)采取了以上措施之后,程序在返回DOS的 时候,执行一条RET指令即可返回DOS。因为这条 RET指令是远过程中的RET指令,它将从栈顶弹出 四个字节,即把PSP首单元的逻辑地址反弹到 CS:IP之中,于是CPU就自动从PSP首单元取出INT 20H,执行它返回DOS。28微型计算机原理第五章汇编语言程序设计例 DATA SEGMENTNUM DB 82H,68H,88H SUM DB?DATA ENDSCODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START:PUSH DSXOR AX,AX PUSH AXRET MAIN ENDP CODE ENDS END STARTMOV AX,DATA MOV DS,AX LEA BX,NUM MOV AL,BX INC BX ADD AL,BX INC BX ADD AL,BX MOV SUM,AL29微型计算机原理 第五章汇编语言程序设计5 2伪指令语句宏汇编程序MASM提法了曷几十种伪指令,其 中有一些伪指令小汇编ASM不支持,例如宏处理 伪指令等。1.数据定义伪指令数据定义伪指令的一般格式为:变量名伪操作符操作数,操作数DB定义变量的类型为BYTE,给变量分 配字节或字节串操作数。DW定义变量的类型为WORD,给变量分 配字操作数。30微型计算机原理第五章汇编语言程序设计(3)DD定义变量的类型为DWORD,给变 量分配双字操作数。除了常数、表达式和字符串外,问号“?”也可以作为数据定义伪指令的操作 数,此时仅给变量保留相应的存储单元,而不赋与变量某个确定的初值。当同样的操作数重复多次时,可用重 复操作符“DUP”表示,其形式为:n DUP(初值,初值)31微型计算机原理第五章汇编语言程序设计例:画图说明下列伪指令 所定义的数据在内存中的存放 形式。ARV1 DB 3+4,43H,-2ARV2 DW 474FH,1,?COUNT EQU 2ARV3 DB 2DUP(1,COUNT DUP(2)ARV4 DD ARV3ARV5 DB ABARV6 DW AB解:假设此数据段的段地 址为 1234H,即 DS=1234H,则 有:ARV1ARV2ARV3ARV4ARV5ARV63HHHHHHHH34HHHHHHHHHHHH3 2m&/g呢mw化伍佑修07H43HFEH4FH47H01H00H01H02H02H01H02H02H09H00H34H12H41H42H42H41H微型计算机原理第五章汇编语言程序设计2.符号定义伪指令EQU(赋值伪指令)名字EQU表达式注:不需对同一符号重复定义=(等号伪指令)名字=表达式注:对同一符号可重复定义,其它与EQU同LABEL(类型定义伪指令)名字LABEL类型33微型计算机原理第五章汇编语言程序设计4.段定义伪指令段定义伪指令的用途是在汇编语言源程序中定义逻 辑段,常用的段定义伪指令有SEGMENT/ENDS和ASSUME 等SEGMENT/ENDS伪指令段名SEGMENT 定位类型组合类型厂类名,段名ENDS定位类型。定位类型给出实际段起点的类型。它有PAGE(页类型)、PARA(节类型)、WORD(字类型)、BYTE(字节类型)四种类型。其中PARA为默认值。34微型计算机原理第五章汇编语言程序设计组合类型。组合类型在多模块程序设计中 表示该段和其它同名段间的组合连接方法。组合 类型有PUBLIC、COMMON.AT、MEMORY.STACK等。类别。类别是程序员任选的一个字符串,使用时必须用单引号括起来。其作用是在连接时 决定各逻辑段的装入顺序。ASSUME伪指令它是用来说明逻辑段和物理段关系的伪指令,即告诉汇编程序在指令执行期间内存的哪一段 是数据段,哪一段是堆栈段,哪一段是代码段。ASSUME段寄存器名:段名,段寄存器名:段名,35微型计算机原理第五章汇编语言程序设计(3)ORG伪指令伪指令ORG指出其后的程序段或数据 块的起始地址的偏移量。其格式为:ORG表达式5.过程定义伪指令过程名 PROC NEAR/FAR过程名ENDP36微型计算机原理第五章汇编语言程序设计5.3宏指令及其使用1.宏指令、宏定义和宏调用宏指令是源程序中具有独立功能的一段 程序代码。在汇编语言中,如果在源程序中 需要多次使用同一个程序段,可以将这个程 序段定义(宏定义)为一个宏指令,然后每 次需要是,即可简单地用宏指令名来代替(称为宏调用),从而避免了重复书写,使源 程序更加简洁、易读。宏定义由MASM宏汇编程序提供的伪指令 实现。37微型计算机原理第五章汇编语言程序设计1.宏定义宏指令名MACRO 形式参数:宏体ENDM2.宏调用宏指令名实际参数这就是说,只要在源程序中写上已定 义过的宏指令名就算是调用该宏指令了。3.宏展开38微型计算机原理第五章汇编语言程序设计具有宏调用的源程序被汇编时,每个 宏调用将被MASM进行宏展开。宏展开实际上是用宏定义时设计的宏 体去代替相应的宏指令,并用实际参数一 一取代形式参数。由此可见,使用宏的过程共有三步:首先进行宏定义;然后可以进行宏调用;最后,汇编时由MASM进行宏展开。39微型计算机原理 第五章汇编语言程序设计例若源程序中多处需要将AL和CL寄 存器中的两位压缩型的BCD数相加,并将和 送回CL寄存器,则可象下述这样定义宏指令,然后在需要的地方进行调用。DECADD MACROADD AL,CLDAAMOV CL,AL ENDM 显而易见,这是一个无形式参数的宏定义。40微型计算机原理 第五章汇编语言程序设计-如果对分别存放在任意8位寄存器或存储单 元中的两个压缩型的BCD数进行加法运算,则可 将上例宏定义改写为DECADD1 MACRO OPRI,OPR2MOV AL,OPRIADD AL,OPR2DAAMOV OPRI,ALENDM这是一个带有两个形式参数的宏定义。宏指 令为 DECADDlo例如有以下宏调用:41微型计算机原理第五章汇编语言程序设计DEC ADD 1 DL?BUFFERDEC ADD 1 AREA1.AREA2 则汇编时进行宏展开,得到以下指令:DEC ADD 1 DL?BUFFER+MOV AL,DL+ADD AL,BUFFER+DAA+MOV DL,ALDEC ADD 1 AREA1.AREA2+MOV AL,AREA1+ADD AL?AREA2+DAA+MOV AREA 1?AL42微型计算机原理第五章汇编语言程序设计2.宏指令与子程序(过程)在汇编语言程序设计中,宏指令和子 程序都给设计者提供了很大方便。他们都 是可被程序多次调用的程序段,并且调用 前必须由设计者根据需要按一定格式进行 定义。然而,宏指令和子程序由于定义方 法和其格式不同,因此,使用中有许多不 同之处,主要是空间和时间的差异。43微型计算机原理第五章汇编语言程序设计子程序由CALL指令调用,由RET 指令返回,所以汇编后子程序的机器码 只占有一个程序段,不管调用多少次均 如此,较为节约内存。宏指令在每次宏 调用处宏展开时,宏体都要占一个程序 段,调用次数愈多,占用内存愈多。因 此从内存空间开销来说,子程序优于宏 指令。44微型计算机原理第五章汇编语言程序设计从程序的执行时间来分析,每调用一次 子程序都要保护和恢复返回地址(断点)及寄存 器内容(现场)等,要消耗较多的时间。宏指令 调用时不需要这个过程,执行时间较短。因此,从执行时间来分析,宏指令又优于子程序。综上所述,当某一需多次访问的程序段较长,访问次数又不是太多时,选用子程序结构较好 O当某一需多次访问的程序段较段,访问次数又 很频繁时,选用宏指令结构显然要更好些。45微型计算机原理第五章汇编语言程序设计5.4常用系统功能调用和BIOS中断调用微型计算机系统为汇编用户提供了两个程序 接口来使用计算机的硬件资源,一个是DOS功能调 用,另一个是ROM中的BIOS(basic input/output system)功能调用。DOS功能调用和BIOS功能调用 都是由一系列的服务子程序构成的,但调用与返 回不是使用子程序调用指令CALL和返回指令RET,而是通过软中断指令INT n和中断返回指令 IRET调用和返回的。软中断(INT n指令)可分为三部分:46微型计算机原理第五章汇编语言程序设计ROM BIOS中断,占用类型号为10H1FH。DOS中断,占用类型号为20H3FH。目前使用的 有20H27H和2FH,其余类型号保留。自由中断,占用类型号为40HFFH,可供系统或 应用程序设置开发的中断处理程序用。1 DOS中断及功能调用目前DOS常用的9类中断 20H27H和2FH 分为两种:DOS专用中断:INT 22H、INT 23H和INT 24H,用户不能使用。DOS可调用中断:INT 20H、INT 27H(程序退出);INT 25H、INT 26H(磁盘R/W中断);INT 2FH(假脱 机打印文件);INT 21H(系统功能调用)。47微型计算机原理第五章汇编语言程序设计2)BIOS中断调用BIOS中断功能依功能分为两种,一种为系 统服务程序,另一种为设备驱动程序。其中中 断类型号为10H、16H和17H的是显示器、键盘和 打印机的驱动子程序。键盘输入子程序:INT 16HO显ZJX输出子程序:INT 10Ho打印输出子程序:INT 17HO微型计算机原理第五章汇编语言程序设计3)DOS及BIOS功能调用方法对于所有的功能调用,使用时一般需要经 过以下三个步骤:子程序入口参数送相应寄存器。子程序编号(功能号)送AH寄存器:MOV AH,功能号。发中断请求:INT n(系统功能调用使用INT 21H指令)。49微型计算机原理第五章汇编语言程序设计4)系统功能调用系统功能调用是指INT 21H中断。它是可供 系统程序和应用程序调用的一个极其重要的中 断,内含近百个已经标准化了的系统调用子功 能。它是构成操作系统内核的主要成分。这里数们主要介绍他的几个成用的功能。如下表所不。功能号功能入口参数出口参数01H带回显的字符输入(单字符输入)61=输入字符02H字符显示(单字符输出)(口1)=输出字符09H字符串显示(字符串输出)DS:DX=缓冲区首地址0AH字符串缓冲输入(字符串输入)DS:DX=缓冲区首地址50微型计算机原理 第五章汇编语言程序设计INT 21H常用功能介绍(1)键盘输入(1#功能)功能:键盘獭入一个字符,将其ASCH码存放于 AL,并在屏幕上显示该字符输入字符ASCII码3ALMOV AH,01HINT 21H(2)字符显示(2#功能)功能:在屏幕上显示任意单个字符待输出字符ASCII码fDLMOV DL,AMOV AH,2INT 21H51微型计算机原理第五章汇编语言程序设计INT 21H常用功能介绍(3)字符串输(10#功能)功能:键盘输入一串字符存至存储区存储区起始单元地址(段地址:偏移量)f(DS:DX)存储区特点:首字节为存储区最大长度M(1-255);第二字节存放输入字符串的实际长度;第三字节以后为用户输入内容(含结束标识回车 的 ASCH 码 0DH2014年12月28日52微型计算机原理第五章汇编语言程序设计例从键盘输入一串字符,个数小于50其程序设计方法是:DATA SEGMENTBUF DB 50DB?DB 50 DUP(?)DATA ENDSCODE SEGMENTBUF50预留字节数 实际字节数CODEMOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,10INT 21HENDS用户输入内容53微型计算机原理第五章汇编语言程序设计2014年12月28日54微型计算机原理第五章汇编语言程序设计5.5汇编语言程序设计通常,编制一个汇编语言源程序应按如 下步骤进行:明确任务,确定算法。绘制流程图。(3)根据流程图编写汇编语言程序。(4)上机调试程序。程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。55微型计算机原理第五章汇编语言程序设计一、顺序程序设计顺序结构也称线性结构,其 特点是其中的语句或结构被连续 执行。顺序程序是最简单的,也是 最基本的一种程序结构。这种结 构的程序从开始到结尾一直是顺 序执行的,中途没有任何分支。从这种结构的流程图来看,除了 有一个起始框,一个终止框外,就是若干执行框,没有判断框。开始S1S2S3结束56微型计算机原理 第五章汇编语言程序设计例1求两个数的平均值。这两个数分别 存放在X单元和Y单元中,而平均值放在Z单元 中。源程序编制如下:DATA SEGMENT X DB 5FH Y DB 57H Z DB?DATA ENDSSTAC SEGMENT STACK STACK,DW 20H DUP(?)TOP LABEL WORD STAC ENDS57微型计算机原理 第五章汇编语言程序设计CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STAC START:PUSH DSMOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STAC MOV SS,AX MOV SP,OFFSET TOP MOV AL,X ADD AL,Y MOV AH,0 ADC AH,AH SHR AX,1 MOV 乙 AL RET MAIN ENDPCODE ENDS END START58微型计算机原理第五章汇编语言程序设计二、分支程序设计分支程序结构也称条件结构,通常是在两种或两个以上的不同的操作中选择其中的一个,如下图所示:分支是通过条件转移指令来实现的。分支结构有一个共同点:运行方向总是向前的。59微型计算机原理第五章汇编语言程序设计例2现有一符号函数:T 当X0时Y,0 当X=0时1当X0时假定X为-25,且存放在VARX单元中,函数 值Y存放在VARY单元,试编写程序根据X的 值确定函数Y的值。根据题意国出流程图如下:60微型计算机原理第五章汇编语言程序设计实现符号函数程序的流程图ALX微型计算机原理第五章汇编语言程序设计DSEG SEGMENT VARX DB-25 VARY DB?DSEG ENDS CSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAL,VARXCMPAL,0JGENEXTMOVAL,OFFHJMPHALTNEXT:JEZAREMOVAL,1JMPHALTZARE:MOVAL,0HALT:MOVVARY,ALMOVAH,4CHINT21HCODE ENDSEND START62微型计算机原理第五章汇编语言程序设计三、循环程序设计循环程序结构就是重复执行某一段程序,直 到某个条件出现为止。循环程序结构同分支程序 结构有相似之处,都是根据条件来实现的,只不 过循环是一种运动方向总是向后的分支程序结构。因此,循环可以用分支来实现。循环初始状态63微型计算机原理第五章汇编语言程序设计1.循环程序的组成一个循环程序通常由四部分构成:初始化部分建立循环初始值。如初始化地址指针,计数 器,其他循环参数的起始值等。工作部分它是循环程序的这主要部分,是为完成某种 特定功能而设计的程序段。修改部分为保证正确的循环而修改某些参数。如修改 计数器的值、操作数地址等。(4)控制部分64微型计算机原理 第五章汇编语言程序设计判断循环结束条件是否成立。这是循环程序设计 的关键。通常判断循环是否结束的办法有两种:用计数控制循环:循环是否已进行预定次数,它适用于已知循环次数的循环程序设计;用条件控制循环:循环终止条件是否已成立,它适用于未知循环次数的循环程序设计。2.循环控制方法(1)用计数控制循环65微型计算机原理第五章汇编语言程序设计例在XX单元开始的连续单元中存放有10个 无符号字节数,从中找出中最大者送yy单元。根据题意,我们把第一个数先送入AL寄存器 中,然后将AL中的数与后面的9个数逐个进行比 较。如果AL中的数较小,则两数交换;如果AL中 的数大,则不交换。在比较过程中,AL中始终保 持较大的数,这样,比较9次后,则最大的数在 AL中,最后把AL中的数(最大者)存入yy单元。由此可画出程序的流程图:66微型计算机原理第五章汇编语言程序设计67微型计算机原理第五章汇编语言程序设计DATADATA CODESEGMENTxx DB 49,38,65/2,97/3,55,27,28,85yy DB?ENDSSEGMENTASSUME CS:CODE,DS:DATACODESTART:MOV MOV LEA MOV MOVLOOP1:INC CMP JAE XCHGNEXT:LOOP MOV MOV INTENDS END STARTAX,DATA DS,AX BX,xxAL,CX,BX AL,BX 9BXNEXT AL,BX LOOP1 yy,AL AH,4CH 21H68微型计算机原理第五章汇编语言程序设计(2)用条件控制循环有些情况无法确定循环次数,但是循环何时 结束,可用某种条件来确定。这时,编制程序主 要是寻找控制条件及对控制条件的检测。例从自然数1开始累加,直到累加和大于 1000为止,统计被累加的自然数的个数,并把统 计的个数送入n单元,把累加和送入sum单元。根据题意,被累加的自然数的个数事先是未 知的,也就是说,循环的次数是未知的,因此不 能用计数器方法控制循环。但题目中给定一个重 要条件,即桌加和大于1000则停止累加,因此,可以根据这一条件控制循环。我们用CX寄存器统 计自然数的个数,用AX寄存器存放累加和,用BX 寄存器存放每次取得的自然数。69微型计算机原理 第五章汇编语言程序设计程序的流程图如下所示。70微型计算机原理第五章汇编语言程序设计DATAS SEGMENT n DW?sum DW?DATAS ENDSSTACK SEGMENT PARA STACK stack DW 100 DUP(?)STACK ENDSCODES SEGMENT MAIN PROC FARASSUME CX:CODES,DS:DATAS,SS:STACK START:PUSH DSMOV PUSH MOV MOVAX,0 AX AX,DATAS DS,AX71微型计算机原理第五章汇编语言程序设计MOV CX,0MOV AX,0MOV BX,0LOOPT:INC BXADD AX,BX INC CX CMP AX,1000 JBE LOOPT MOV n,CX MOV sum,AX RETMAIN ENDP CODES ENDSEND START72微型计算机原理第五章汇编语言程序设计3.多重循环程序设计多重循环又称循环嵌套,即循环套循环。有些问题 比较复杂,单重循环难以解决,必须使用多重循环。在使 用多重循环时,必须注意以下几点:内循环必须完整地包含在外循环内,内外循环不 能相互交叉。内循环既可以嵌套在外循环中,也可以几个内循 环并列存在。可以从内循环中直接跳到外循环,但不能 从外循环直接跳进内循环中。防止出现“死循环”。无论是外循环,还是内循 环,千万不要使循环返回到初始部分,这一点应当特别 注意。73微型计算机原理第五章汇编语言程序设计(4)每次通过外循环再次进入内循环时,初 始条件必须重新设置。例6利用逐次求大数的方法对内存单元 ARRAY开始的一字节为单位的无符号数进行从大 到小排序。根据题意,排序方法为:编制程序如下:74微型计算机原理第五章汇编语言程序设计DATA SEGMENTARRAY DB 49,38,65,12,97,13,55,27,28,85 DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV MOV MOV LEALOOPO:MOV MOV MOVLOOP1:CMP JAE XCHGNEXT:INC LOOP MOV INC DEC JNZ MOV INTCODE ENDS END STARTAX,DATA DS,AX DX,9 BX,ARRAY AL,BX SI,BX+1 CX,DX AL,SI NEXT AL,SI SIL00P1 BX,AL BX DX LOOPO AH,4CH 21H75微型计算机原理第五章汇编语言程序设计四、子程序设计子程序又称为过程,它相当于高级语言的过程或函 数,是一个独立的程序段,能完成某些确定的功能,并 能别其它程序调用。当一个子程序不被调用,且该子程 序完成确定的功能后,便返回调用程序处。1.过程的定义和调用过程的定义采用过程定义伪指令,其格式为:过程名 PROC 类型RET过程名 ENDP76微型计算机原理 第五章汇编语言程序设计过程的调用采用指令语句CALL,其格式为:CALL过程名 段内调用CSEG SEGMENTCALL SUBTMOV AH,4CH INT 21H SUBT PROC NEAR a SUBT ENDP CSEG ENDS77第五章汇编语言程序设计微型计算机原理段间调用XSEG SEGMENTCALL SUBT1MOV AH,4CHINT 21H SUBT1 PROCRETSUBT1 ENDPXSEG ENDSYSEG SEGMENTCALL SUBT1YSEG ENDS微型计算机原理第五章汇编语言程序设计2.寄存器内容的保护和恢复通常主程序和过程的设计是分开的,因 而他们所使用的寄存器往往会发生冲突。为避免冲突,应在进入过程时,将该过程 所用到的寄存器内容保护起来,称为保护 现场。而从过程返回主程序前,再将这些 寄存器的内容恢复,称为恢复现场。保护 现场和恢复现场通常分别用堆栈压入指令 和弹出指令来实现。例如:79第五章汇编语言程序设计微型计算机原理SUBPR PROC PUSH AX PUSH BX PUSH CX PUSH DX POP DX POP CX POP BX POP AX RETSUBPR ENDPPUSH AX PUSH BX PUSH CX PUSH DX CALL SUBP POP DX POP CX POP BX POP AX 微型计算机原理 第五章汇编语言程序设计-3.主程序和过程之间的参数传递主程序调用过程时,必须先将过程所需要的 初始数据设置好,这些初始数据称为过程的入口 参数。过程执行完毕返回主程序时也必须将过程 运行所得的结果送给主程序,这些回送的结果称 为过程的出口参数。过程入口参数的送入和出口 参数的送出城为主程序和过程间的参数传递,也 称过程通信。过程通信通常有四种方法。通过寄存器传递参数通过变量传递参数通过地址表传递参数(4)通过堆栈传递参数81微型计算机原理第五章汇编语言程序设计4.子程序的嵌套与递归调用一个子程序调用另一个子程序叫子程序82微型计算机原理第五章汇编语言程序设计由于调用子程序时,断点地址保存在堆栈中,因此只要有足够的堆栈空间,嵌套的层次(也 称深度)是不受限制的。若一个子程序调用该子程序自身,则称为递 归调用。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服