您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章汇编语言程序设计2
14.2.4过程定义伪指令PROC、ENDP过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。过程定义伪指令的格式为过程名PROC[类型]……RET过程名ENDP注意:PROC和ENDP必须成对出现。2过程的类型有两种:NEAR——(默认类型)表示段内调用FAR——表示段间调用调用一个过程的格式为:CALL过程名34.2.5宏定义伪指令如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。指令的格式为:宏指令名MACRO[形参表]宏定义体ENDM对于宏指令本课不做详细介绍。44.2.6汇编结束伪指令END汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。格式:END[表达式]END后跟的表达式通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。54.3DOS系统功能调用介绍系统功能调用——由OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。系统功能调用有两种,一种称为DOS功能调用,另一种称为BIOS功能调用。用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INTn来实现。在DOS系统中,功能调用都是用软中断指令INT21H来实现的。6INT2lH功能大致可以分为四个方面:设备管理、目录管理、文件管理和其它D0S系统功能调用的使用方法如下:①AH←功能号;②设置该功能所要求的其他入口参数;③执行INT21H指令;④分析出口参数。以下介绍INT21H的几个最常用的功能。7关于数据输入和输出我们这里只讨论键盘输入和显示输出,调用系统功能需要提供入口参数及所调用的功能号,调用结束返回结果。1.DOS键盘功能调用(1)从键盘输入一个字符(功能号=1)MOVAH,1INT21HAL中有键入的字符8例:程序中有时需要用户对提示做出应答。GET_KEY:MOVAH,1;等待键入字符INT21H;结果在AL中CMPAL,’Y’;是’Y’?JZYES;是,转YESCMPAL,’N’;是’N’?JZNO;是,转NOJMPGET_KEY;否则继续等待输入YES:……NO:…9(2)输入字符串(功能号=0AH)此功能调用从键盘输入一串字符并把它存入用户指定的缓冲区中。MOVAH,0AHLEADX,字符串缓冲区首地址INT21H(预留的N1个字节的存储单元)0DHN2N1N1:缓冲区长度(最大键入字符数)N2:实际键入的字符数(不包括回车符)用户定义的输入字符串的缓冲区格式10若用户键入的字符数(包括回车)≥定义的N1,本功能调用将不再接收新的键入,且光标不再向右移动。例:设在数据段定义键盘缓冲区如下:STR1DB10,?,10DUP(?)调用DOS功能的0AH号功能的程序段为:LEADX,STR1MOVAH,0AHINT21H此程序段最多从键盘接收10个按键(包括回车)。112.DOS显示功能调用(1)在显示器上显示一个字符(功能号=2)MOVAH,2MOVDL,要显示的字符INT21H例:在显示器上显示一个字符‘A’MOVAH,2MOVDL,’A’;或MOVDL,41HINT21H12MOVAH,9LEADX,字符串INT21H注意:被显示的字符串必须以’$’结束。(2)显示字符串(功能号=9)13例:在屏幕上显示:’HELLO,WORLD!’;在数据段定义字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代码段中进行显示输出MOVAH,9LEADX,STR1INT21H完整的程序:HELLO.ASM14附:BIOS功能调用BIOS:基本输入输出系统,是固化在EPROM中的一组实现基本输入输出功能的子程序。BIOS调用通过多个软中断提供,调用方法为:MOVAH,功能号设置入口参数,一般将参数放在寄存器中INT中断类型BIOS中的几个主要中断类型如下:INT10H——屏幕显示INT13H——磁盘操作INT14H——串行口操作INT16H——键盘操作INT17H——打印机操作每类中断由包含许多子功能,调用时通过功能号指定。BIOS功能调用在此不介绍154.4汇编语言程序设计基础4.4.1概述1.程序质量(自学)2.汇编语言程序设计的步骤:1-根据实际问题抽象出数学模型,确定算法2-画出程序框图(流程图)3-分配内存工作单元和寄存器4-根据框图编写源程序,存成.ASM文件5-对源程序汇编,生成.OBJ目标文件6-把.OBJ文件连接成.EXE执行文件7-运行、调试3.源程序的基本结构:顺序、分支、循环、过程16(1)用方框表示工作框,框中用简明语言标明要完成的功能(2)用菱形框表示判断框框中标明比较、判断和条件如何绘制程序框图(流程图)?NY?17(4)各框之间用直线连起来表示程序走向。框中标明子程序名字(入口参数等)(3)用框表示调用子程序或过程。18汇编语言上机过程YYYNNN有错?有错?有错?结束汇编输入(修改)源程序连接运行查错开始用EDIT,NOTEPAD等任何文本编辑器。源程序存为.ASM文件用MASM宏汇编程序进行汇编。汇编后生成.OBJ目标文件。命令格式:MASM源文件名.ASM;用LINK连接程序进行连接。连接后生成.EXE可执行文件。命令格式:LINK目标文件名.OBJ;用TD、DEBUG等调试程序进行调试。命令格式:TD可执行文件名.EXE194.4.2顺序程序顺序结构程序是一种最简单、最基本的程序,按照程序编写的顺序依次执行。例15:二进制双精度加法运算。计算X+Y=Z,将结果Z存入某存储单元。此类程序共分两部分:伪指令部分、主程序部分20STACKSEGMENTSTACKDW64DUP(?)STACKENDSDATASEGMENTXLDW?XHDW?YLDW?YHDW?ZLDW?ZHDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK21START:MOVAX,DATAMOVDS,AX;数据段的段基址装入DSMOVAX,XL;X低位送AXADDAX,YL;X低位加Y低位MOVZL,AX;存低位和MOVAX,XH;X高位送AXADCAX,YH;X高位加Y高位MOVZH,AXMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART22例17:用查表的方法将一位十六进制数转换成相应的ASCII码。既然指定用查表的方法,那么首先要建立一个表TABLE,在表中按照十六进制数从小到大的顺序放入他们对应的ASCII码值。编制的源程序如下:DATASEGMENTTABLEDB30H,31H,32H,33H,34H,DB35H,36H,37H38H,39H,41HDB42H,43H,44H,45H,46HHEXDB4;一位十六进制数ASCIDB?;结果ASCIIDATAENDS23STACKSEGMENTPARASTACKDW64CUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEING:MOVAX,DATAMOVDS,AX………………………….余下的请参照课本24标号:条件满足?处理4.4.3分支程序NYIF…THEN结构程序结构:…测试/比较指令(TEST/CMP)条件转移指令(Jx标号)处理体标号:其他指令…25程序结构:TEST/CMP指令Jx标号1处理体P1JMP标号2标号1:处理体P2标号2:其他指令…条件满足?处理P1处理P2标号1:标号2:条件1条件2IF…THEN…ELSE结构26标号1:条件1成立?P1NYCASE结构程序结构:…TEST/CMP指令(测试条件1)Jx标号1;不满足转标号1处理体P1…JMP标号n+1标号1:TEST/CMP指令(测试条件2)Jx标号2;不满足转标号2处理体P2…JMP标号n+1标号2:TEST/CMP指令(测试条件3)Jx标号3;不满足转标号3处理体P3…JMP标号n+1标号3:TEST/CMP指令(测试条件4)……标号n+1:(公共出口)条件2成立?条件n成立?…Pn+1标号2:标号n:标号n+1:P2PnNNYY例:P178,[例4-14],统计成绩。流程图中虚线框内
本文标题:第4章汇编语言程序设计2
链接地址:https://www.777doc.com/doc-3381526 .html