过程义伪指令PROCENDP课件

上传人:re****.1 文档编号:570116399 上传时间:2024-08-02 格式:PPT 页数:41 大小:233.52KB
返回 下载 相关 举报
过程义伪指令PROCENDP课件_第1页
第1页 / 共41页
过程义伪指令PROCENDP课件_第2页
第2页 / 共41页
过程义伪指令PROCENDP课件_第3页
第3页 / 共41页
过程义伪指令PROCENDP课件_第4页
第4页 / 共41页
过程义伪指令PROCENDP课件_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《过程义伪指令PROCENDP课件》由会员分享,可在线阅读,更多相关《过程义伪指令PROCENDP课件(41页珍藏版)》请在金锄头文库上搜索。

1、4.2.4.2.4 4 过程定义过程定义伪指令伪指令PROCPROC、ENDPENDP 过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。 过程定义伪指令的格式为 PROC PROC NEAR/FAR NEAR/FAR 类型类型 RET RET ENDPENDP 注意:注意:PROCPROC和和ENDPENDP必须成对出现。必须成对出现。1 1 过程的类型有两种: NEARNEAR表示段内调用 (默认类型) FAR FAR 表示段间调用 调用一个过程的格式为:CALL 2 24.2.4.2.5 5 宏定义宏定义伪指令伪指令 宏指令的宏指

2、令的作用:如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏宏指令名指令名来代替这个程序段。 宏指令的格式为:宏指令的格式为: MACRO 形参表形参表 ENDM3 3例: 两个数之和的宏定义和宏调用。 宏定义为:DADD DADD MACROMACRO X X,Y Y,Z Z MOV AX MOV AX,X X ADD AX ADD AX,Y Y MOV Z MOV Z,AXAX ENDMENDM 上面宏定义中,X、Y、Z是形式参数。 调用宏DADD时可写为: DADD DATA1,DATA2,SUM 上面宏调用中,DATA1,DATA2,SUM是

3、实际参数,由它们替换定义中的X、Y、Z,即形实结合形实结合。4 4CALL DADDDADDRETDADD:DADD:CALL DADDDADDCALL DADDDADDDADD DADD yyyyDADD MACRO xxDADD MACRO xxDADD DADD yyyyDADD DADD yyyyENDMENDM相同=或主程序+过程(子程序)主程序+宏定义宏扩展宏调用 与 过程(子程序)调用 异同点示意图5 5 宏调用 与 过程(子程序)调用 异同点相同点: 都是一次定义,多次调用。不同点: 执行形式执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理;而CALL、RET则是由CPU

4、执行的指令。 汇编结果汇编结果:宏命令伪指令汇编后被展开。 执行速度执行速度:宏命令执行速度较快(因无调用转移) 占用内存占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元; 使用过程可以节省代码(源程序和目标程序)占用的内存空间。6 6宏展开宏展开:汇编程序会把宏调用按宏定义展开。例如:宏定义为: DISPLAYDISPLAY MACRO string MACRO string LEA DXLEA DX,stringstring MOV AH MOV AH,9 9 INT 21H INT 21H ENDM ENDM 程序中宏调用:程序中宏调用: DISPLAY DISPLAY

5、 ERROR_MESSAGE ERROR_MESSAGE DISPLAYDISPLAY EXIT_MESSAGE EXIT_MESSAGE 汇编后的结果:汇编后的结果:( (带有带有+ +号的指令为宏展开后的结果号的指令为宏展开后的结果) ) + LEA DX + LEA DX,ERROR_MESSAGEERROR_MESSAGE + MOV AH + MOV AH,9 9 + INT 21H + INT 21H + LEA DX + LEA DX,EXIT_MESSAGEEXIT_MESSAGE + MOV + MOVAHAH,9 9 + INT 21H + INT 21H 7 74.2.6

6、 汇编结束伪指令END 汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。 格式: END 表达式 END后跟的表达式通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。8 8汇编语言的一个实例: EXAM.ASM 列表为指令列表为指令 TITLE SUBTTL PAGE连接伪指令连接伪指令 PUBLIC EXTRN INCLUDE GROUP等等等等其它伪指令:其它伪指令:9 94.3 4.3 DOS系统功能调用系统功能调用(高级调用高级调用)DOSDOSDOSDOS系统功能调用的系统功能调用的系统功能调用的系统功能调用的作用作用作用作用:系统功

7、能调用系统功能调用系统功能调用系统功能调用由由由由操作系操作系操作系操作系统统统统OSOSOSOS提供的一组实现特殊功能的子程序供程序员在程序提供的一组实现特殊功能的子程序供程序员在程序提供的一组实现特殊功能的子程序供程序员在程序提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。中调用,以减轻编程工作量。中调用,以减轻编程工作量。中调用,以减轻编程工作量。系统功能调用的系统功能调用的系统功能调用的系统功能调用的分类分类分类分类:系统功能调用有两种,一种称为系统功能调用有两种,一种称为系统功能调用有两种,一种称为系统功能调用有两种,一种称为DOSDOS功能调用,另一种称为功能

8、调用,另一种称为功能调用,另一种称为功能调用,另一种称为BIOSBIOS功能调用。功能调用。功能调用。功能调用。 BIOS(BIOS(基本输入输出系统基本输入输出系统基本输入输出系统基本输入输出系统) )功能调用功能调用功能调用功能调用包括包括包括包括: : : :系统测试、系统测试、系统测试、系统测试、初始化引导、一部分中断矢量装入程序及外部设备的服初始化引导、一部分中断矢量装入程序及外部设备的服初始化引导、一部分中断矢量装入程序及外部设备的服初始化引导、一部分中断矢量装入程序及外部设备的服务程序,它们都固化在系统主板的务程序,它们都固化在系统主板的务程序,它们都固化在系统主板的务程序,它们

9、都固化在系统主板的ROMROMROMROM中。它与系统硬中。它与系统硬中。它与系统硬中。它与系统硬件直接相关。件直接相关。件直接相关。件直接相关。 参见参见参见参见P410-411P410-411附录附录附录附录C.1-2C.1-2系统功能调用的系统功能调用的系统功能调用的系统功能调用的实现实现实现实现方式方式方式方式:用户程序在调用这些系统服用户程序在调用这些系统服用户程序在调用这些系统服用户程序在调用这些系统服务程序时,务程序时,务程序时,务程序时,不是不是不是不是用用用用CALLCALL命令命令命令命令,而,而,而,而是是是是采用软中断指令采用软中断指令采用软中断指令采用软中断指令INT

10、 INT n n来实现来实现来实现来实现。 DOS系统系统功能调用都是用软中断指令功能调用都是用软中断指令INT 21H来实来实现的。它具有现的。它具有90多个子功能多个子功能的中断服务程序,它们通过的中断服务程序,它们通过功能号功能号AH来区分。它不依赖于具体的硬件系统。来区分。它不依赖于具体的硬件系统。1010 INT 2lHINT 2lH功能功能分类:分类: 大致可以分为四个方面,即为大致可以分为四个方面,即为 (1 1 1 1)设备管理设备管理设备管理设备管理(2 2 2 2)目录管理目录管理目录管理目录管理(3 3 3 3)文件管理文件管理文件管理文件管理 (4 4 4 4)内存管理

11、、存取时间、存取终端矢量、终止程序内存管理、存取时间、存取终端矢量、终止程序等。等。 参见参见P411-415P411-415附录附录C.3C.3 D0SD0S系统功能调用的系统功能调用的使用方法使用方法: AHAHAHAH功能号功能号功能号功能号; 设置该功能所要求的其他入口参数;设置该功能所要求的其他入口参数;设置该功能所要求的其他入口参数;设置该功能所要求的其他入口参数; 执行执行执行执行INT 21HINT 21HINT 21HINT 21H指令;指令;指令;指令; 分析出口参数。分析出口参数。分析出口参数。分析出口参数。1111 关于数据输入和输出我们这里只讨论键盘输入键盘输入和显示

12、输出显示输出,调用系统功能需要提供入口参数及所调用的功能号,调用结束返回结果。1. 1. DOSDOS键盘功能调用键盘功能调用(1) 从键盘输入一个字符(功能号功能号=1=1) MOV AH,MOV AH,1 1 INT 21H INT 21H AL INT 21H的几个最常用的功能的几个最常用的功能1212例:程序中有时需要用户对提示做出应答。 GET_KEY: GET_KEY: MOV AH,1MOV AH,1; ;等待键入字符等待键入字符 INT 21HINT 21H; ;结果在结果在ALAL中中 CMP AL,Y CMP AL,Y ; ;是是Y?Y? JZ YES JZ YES ; ;

13、是是, ,转转YESYES CMP AL,N CMP AL,N ; ;是是N?N? JZ NO JZ NO ; ;是是, ,转转NONO JMP GET_KEY JMP GET_KEY; ;否则继续等待输入否则继续等待输入 YES: YES: NO: NO: 1313(2) 输入字符串(功能号功能号=0AH=0AH) 此功能调用从键盘输入一串字符并把它存入用户指定的缓冲区中。 MOV AH,MOV AH, 0AH0AH LEA DX, LEA DX, INT 2INT 21 1H H (预留的预留的N1个字节的存储单元个字节的存储单元) 0DHN2N1 N1: 缓冲区长度缓冲区长度(最大键入字

14、符数最大键入字符数) N2: 实际键入的字符数实际键入的字符数(不包括回车符不包括回车符) 用户定义的输入字符串的缓冲区格式 1414 若用户键入的字符数(包括回车)定义的N1,本功能调用将不再接收新的键入,且光标不再向右移动。例:设在数据段定义键盘缓冲区如下: STR1 DB 10,?,10 DUP(?) 调用DOS功能的0AH号功能的程序段为: LEA DX,STR1 MOV AH,0AH INT 21H 此程序段最多从键盘接收10个按键(包括回车)。15152. 2. DOSDOS显示功能调用显示功能调用(1) (1) 在显示器上显示一个字符在显示器上显示一个字符( (功能号功能号=2=

15、2) ) MOV AH, MOV AH, 2 2 MOV DL, MOV DL, INT 21H INT 21H 例:在显示器上显示一个字符A MOV AH, 2 MOV DL, A ;或MOV DL, 41H INT 21H1616 MOV AH, MOV AH, 9 9 LEA DX, LEA DX, INT 21HINT 21H注意:被显示的字符串必须以注意:被显示的字符串必须以$ $结束结束。(2)(2)显示字符串显示字符串(功能号功能号=9=9)1717例:在屏幕上显示:HELLO,WORLD!;在数据段定义字符串: DATA SEGMENT STR1 DB HELLO,WORLD!

16、$ DATA ENDS;在代码段中进行显示输出 MOV AH,9 LEA DX,STR1 INT 21H完整的程序: HELLO.ASM1818BIOS功能调用功能调用(低级调用低级调用)定义:定义:基本输入输出系统,是固化在EPROM中的一组实现基本输入输出功能的子程序。功能功能: 系统测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序等。BIOS与系统硬件有直接的依赖关系。调用方法:调用方法:BIOS调用通过多个软中断提供,具体的调用方法为:MOV AHMOV AH, INT INT 1919 BIOS中的几个主要中断类型主要中断类型如下:INT 10H屏幕显示INT 1

17、3H磁盘操作INT 14H串行口操作INT 16H键盘操作INT 17H打印机操作 每类中断由包含许多子功能,调用时通过功能号指定。BIOS功能调用说明见p416附录D。2020 BIOS中断程序中断程序处于DOS功能调用功能调用和硬件环境之间,和DOS功能调用相比其优点是效率高,缺点是编程相对复杂;和直接对硬件编程相比,优点是实现相对容易,缺点是效率相对较低。 在一些情况下既能选择DOS中断中断也能选择BIOS中断中断来执行同样的功能。例如,打印机输出一个字符的功能,可用DOS中断21H的功能5,也可用BIOS中断17H的功能0。因为BIOS比DOS更靠近硬件。一般情况下,尽可能地使用DOS

18、功能,但在少数情况下必须使用BIOS功能。例如,BIOS中断17H的功能2为读打印机状态,DOS就没有等效的功能。 因此,对BIOS和和DOS调用调用的选择原则选择原则是,无法使用DOS功能调用或DOS没有提供而BIOS提供了功能的情况下可以考虑使用BIOS中断。BIOS中断调用中断调用与与DOS功能调用功能调用的的比较比较21214.4 4.4 汇编语言程序设计基础汇编语言程序设计基础4.4.1 4.4.1 概述概述1.1.程序质量程序质量( (自学自学) )2.2.汇编语言程序设计的步骤:汇编语言程序设计的步骤:汇编语言程序设计的步骤:汇编语言程序设计的步骤: 1-1-1-1-定义问题,定

19、义问题,定义问题,定义问题,分析问题分析问题分析问题分析问题 2-2-2-2-建立数学模型建立数学模型建立数学模型建立数学模型, , , ,确定算法确定算法确定算法确定算法 3- 3- 3- 3-画画画画出程序框图出程序框图出程序框图出程序框图( ( ( (流程图流程图流程图流程图) ) ) ) 4-4-4-4-分配内存分配内存分配内存分配内存工作单元和寄存器工作单元和寄存器工作单元和寄存器工作单元和寄存器 5-5-5-5-根据框图,根据框图,根据框图,根据框图,编写编写编写编写源源源源程序程序程序程序 6-6-6-6-上机运行、上机运行、上机运行、上机运行、调试程序调试程序调试程序调试程序。

20、将源程序存成。将源程序存成。将源程序存成。将源程序存成.ASM.ASM.ASM.ASM文件;文件;文件;文件; 对源程序汇编,生成对源程序汇编,生成对源程序汇编,生成对源程序汇编,生成.OBJ.OBJ.OBJ.OBJ目标文件;目标文件;目标文件;目标文件; 把把把把.OBJ.OBJ.OBJ.OBJ文件连接成文件连接成文件连接成文件连接成.EXE.EXE.EXE.EXE执行文件。执行文件。执行文件。执行文件。3.3.源程序的基本结构:源程序的基本结构:顺序(查表)、分支、循环、过程顺序(查表)、分支、循环、过程 2222(1)用方框表示工作框,框中用简明语言标明要完成的功能(2) 用菱形框表示判

21、断框 框中标明比较、判断和条件如何绘制程序框图如何绘制程序框图( (流程图流程图) )?NY?2323(4)各框之间用直线连起来表示程序走向。框中标明子程序名字(入口参数等)(3)(3)用用 框表示调用子程序或过程框表示调用子程序或过程。 流程图的例子FlowChart.doc2424汇编语言上机过程:汇编语言上机过程:YYYNNN有错 ?有错 ?有错 ?结束汇 编输入(修改)源程序连 接运 行查 错开始用EDIT,NOTEPAD等任何文本编辑器。源程序存为.ASM文件 用MASM宏汇编程序进行汇编。汇编后生成.OBJ目标文件。命令格式:MASM ; 用LINK连接程序进行连接。连接后生成.E

22、XE可执行文件。命令格式:LINK ; 用TD、DEBUG等调试程序进行调试。命令格式:TD 2525标号:条件满足条件满足?处理处理4.4.2 4.4.2 顺序程序顺序程序(p175-176,(p175-176,自学自学) )4.4.3 4.4.3 分支程序分支程序NYIFTHEN结构结构程序结构:程序结构: 测试测试/比较指令比较指令 (TEST/CMP) 条件转移指令条件转移指令 (Jx 标号标号) 处理体处理体 标号标号: 其他指令其他指令 2626程序结构:程序结构: TEST/CMP指令指令 Jx 标号标号1 处理体处理体P1 JMP 标号标号2标号标号1: 处理体处理体P2标号标

23、号2:其他指令其他指令 条件满足条件满足?处理处理P1处理处理P2标号1:标号2:条件1条件2IFTHENELSE结构结构2727标号标号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+

24、1:(公共出口)条件条件2成立成立?条件条件n成立成立?Pn+1标号标号2:标号标号n:标号标号n+1:P2PnNNYY例:例:P178,例例4-14,统计成绩。,统计成绩。流程图中虚线框内流程图中虚线框内28284.4.4 循环程序1DOUNTIL 结构 先执行,再判断条件先执行,再判断条件。工作部分至少执行一次。初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN29292. DO WHILE 结构 先判断条件,再执行先判断条件,再执行。工作部分有可能一次都不执行。初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN3030 注意:注意:循环可以嵌套(多重循环多重循

25、环),但多个循环体之间不能交叉,控制条件不能混淆。例:例:P179例4-15,数据从大到小排序。 冒泡法实例:实例:3,7,2,8,68,7,6,3,2。内外两层循环;内外两层循环;内外两层循环;内外两层循环;每轮内循环使一个最小的数沉底,因为最小的数沉每轮内循环使一个最小的数沉底,因为最小的数沉每轮内循环使一个最小的数沉底,因为最小的数沉每轮内循环使一个最小的数沉底,因为最小的数沉底,下轮内循环就不用再比较最底下的数,所以内底,下轮内循环就不用再比较最底下的数,所以内底,下轮内循环就不用再比较最底下的数,所以内底,下轮内循环就不用再比较最底下的数,所以内循环的循环次数每一轮比上一轮要逐次减循

26、环的循环次数每一轮比上一轮要逐次减循环的循环次数每一轮比上一轮要逐次减循环的循环次数每一轮比上一轮要逐次减1 1;外循环用于控制有多少轮内循环。若有外循环用于控制有多少轮内循环。若有外循环用于控制有多少轮内循环。若有外循环用于控制有多少轮内循环。若有n n个数据,则个数据,则个数据,则个数据,则外循环次数为外循环次数为外循环次数为外循环次数为n-1n-1。BSORT.ASM3131掌握以下几点:调用子程序用CALLCALL指令,返回调用程序用RETRET指令。子程序允许嵌套调用嵌套调用。进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保保护护现现场场),退出子程序前要恢

27、复现场恢复现场。调用前要预先确定子程序中要使使用用哪哪些些寄寄存存器器,并定定义义入入口口参参数数和和出出口口参参数数。参数传递可利用寄存器、存储单元或堆栈(要用BP寻址)。4.4.5 4.4.5 子程序子程序设计举例设计举例3232例例1: 二进制数二进制数(0-F)转换成转换成ASCII(0-F)的子程序。的子程序。BIN2ASC PROC ;要转换的数在AL的低四位 ;转换结果仍在AL中 CMP AL, 9 JA A2F ADD AL, 30H; 9, +37H DONE: RETBIN2ASC ENDP调用方法:(在主程序中) MOV AL, 0CH CALL BIN2ASC (AL中

28、有0CH的ASCII码43H, C)3333例例2. 2. 字符串处理程序设计字符串处理程序设计 此例取自p182例4-17。 对字符串进行操作时,往往需要确定它的长度。通常字符串结束标志以CR或$作标志。所以可以用扫描CR或$的方法计算出串长。 在计算串长时,应注意串长一般应小于255个字节。 以下是流程图和源程序。 3434简化的流程图:简化的流程图:开始求串长求串长串长255,255,则结束则结束CMPCMPDI,AHDI,AH; ;本字符是本字符是$?$?JEJEDONEDONE ; ;是是, ,则结束则结束SCASBSCASBSCASBSCASB; ;本字符是本字符是CRCR? ?J

29、NEJNEAGAINAGAIN; ;未找到未找到, ,返回继续返回继续DONE:DONE:MOVMOVLENGTH1,CX ;LENGTH1,CX ;找到找到, ,LENGTH1LENGTH1串长串长RETRET; ;返回主程序返回主程序STRLENSTRLENSTRLENSTRLENENDPENDPENDPENDP;- ;- 子程序结束子程序结束 -CODECODECODECODEENDSENDSENDSENDSENDENDBEGINBEGIN4040本例主要介绍了:含有子程序的汇编语言程序结构含有子程序的汇编语言程序结构字符串的处理字符串的处理如何计算字符串长度如何计算字符串长度如何把二进制数转换成如何把二进制数转换成ASCIIASCII显示在屏幕上显示在屏幕上4141

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号