[2017年整理]汇编语言子程序设计

上传人:油条 文档编号:51574694 上传时间:2018-08-15 格式:PPT 页数:39 大小:461KB
返回 下载 相关 举报
[2017年整理]汇编语言子程序设计_第1页
第1页 / 共39页
[2017年整理]汇编语言子程序设计_第2页
第2页 / 共39页
[2017年整理]汇编语言子程序设计_第3页
第3页 / 共39页
[2017年整理]汇编语言子程序设计_第4页
第4页 / 共39页
[2017年整理]汇编语言子程序设计_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《[2017年整理]汇编语言子程序设计》由会员分享,可在线阅读,更多相关《[2017年整理]汇编语言子程序设计(39页珍藏版)》请在金锄头文库上搜索。

1、第7章 子程序设计汇编语言程序设计本章主要教学内容本章主要教学目的及要求1.理解掌握子程序调用与返回指令;2.掌握子程序设计的基本过程和设计方法;3.能熟练设计子支程序。1.子程序调用与返回指令。2.子程序设计的基本过程和设计方法。第7章 子程序设计汇编语言程序设计7.1 概述7.1.1 子程序设计的概念含义:被独立出来的程序段称为子程序或过程主程序与子程序之间的关系主程序子程序CALL SUB1 (断点1:)CALL SUB2 (断点2:)HTLSUB1:RETSUB2:RET 第7章 子程序设计汇编语言程序设计7.1.2 子程序的特性(1)功能独立(2)通用性(3)可浮动性(4)可递归和可

2、重入性7.1.3 子程序的优点(1)简化了程序设计过程,使程序设计时间大量节省。 (2)缩短了程序的长度,节省了计算机汇编源程序的时间和程序的存储空间。(3)增加了程序的可读性,便于对程序的修改、调试。 (4)方便了程序的模块化、结构化和自顶向下的程序设计。第7章 子程序设计汇编语言程序设计7.2 子程序调用和返回指令7.2.1 子程序调用指令类型段内调用主程序和子程序处在同一代码段,只改变IP值段间调用 主程序和子程序处不在同一代码段,既改变IP值也改变CS值段内直接调用格式: CALL DST/NEAR PTR DST 功能:(1)SPSP-2 (SP)IP(2)IPIP+D16段内间接调

3、用格式: CALL DST/WORD PTR DST 功能:(1)SPSP-2 (SP)IP(2)IP(EA)例:CALL MULL段间直接调用格式: CALL FAR PTR DST 功能:(1) SP SP-2(SP) CS SP SP-2(SP) IP(2) IP子程序偏移地址CS子程序段地址例:CALL BX CALL WORD PTR SI段间直接调用格式: CALL DWORD PTR DST 功能:(1) SP SP-2(SP) CS SP SP-2(SP) IP(2) IP(EA)CS(EA+2)例:CALL FAR PTR MULL 例:CALL DWORD PTR BX 第

4、7章 子程序设计汇编语言程序设计从栈顶弹出一个字数据送入IP7.2.2 返回指令 功能:从堆栈的栈顶弹出数据作为返回地址含义:实现子程序执行完后要返回主程序的指令分类:段内返回和段间返回从栈顶弹出两个字数据分别送入IP和CS类型段内返回RET格式: RET 功能:IP(SP) SPSP+2RET n格式: RET n 功能:IP(SP) SP SP+2 SP SP+n段间返回RET格式: RET 功能:IP (SP) SP SP+2CS (SP) SP SP+2RET n格式: RET n 功能:IP (SP) SP SP+2CS (SP) SP SP+2 SP SP+n第7章 子程序设计汇编

5、语言程序设计7.3 子程序的定义、调用和返回7.3.1 子程序定义1.子程序定义伪指令格式:子程序名 PROC NEAR/FARRET子程序名 ENDP说明:(1)主程序和子程序在同一代码段中,定义为NEAR型。(2)主程序和子程序不在同一代码段中,定义为FAR型。(3)可将主程序定义为FAR型,看作是DOS调用的一个过程。第7章 子程序设计汇编语言程序设计2.子程序调用方法说明包括: (1)子程序名; (2)子程序功能; (3)占用寄存器; (4)入口参数; (5)输出参数; (6)子程序调用示例。第7章 子程序设计汇编语言程序设计3.现场保护和现场恢复现场保护:在子程序的功能实现前把将要用

6、到的寄存器中的原有内容保存起来现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中例:子程序SUB1中用到了寄存器AX、BX、CX、DX, 则可能的现场保护和现场恢复如下:SUB1 PROCPUSH AX ;现场保护PUSH BXPUSH CXPUSH DX ;子程序功能段POP DX ;现场恢复POP CXPOP BXPOP AXRETSUB1 ENDP注意:现场保护应与现场恢复的顺序正好相反。第7章 子程序设计汇编语言程序设计4.子程序的设计方法(1)利用过程定义伪指令声明; (2)利用RET指令返回主程序; (3)对堆栈的压入和弹出操作要成对使用; (4)现场保护和现场恢复; (

7、5)应安排在代码段的主程序之外,也可以放在主程序开始之前; (6)允许嵌套和递归; (7)可以与主程序共用一个数据段,也可以使用不同的数据段; (8)编写可以很灵活,但一定要保证堆栈操作的正确性; (9)处理好子程序和主程序间的参数传递问题(见7.4节); (10)提供必要的子程序说明信息。第7章 子程序设计汇编语言程序设计子程序定义应用举例【例7-1】求两个数的最大公约数子程序子程序调用方法说明:;子程序名:MCDST;功 能:求两个正整数的最大公约数;入口参数:AX和BX中存放两个正整数;出口参数:CX中存放求得的最大公约数;寄存器占用:使用AX、BX、CX、DX寄存器,CX中内容被改变,

8、AX、BX、DX中的内容保持不变。子程序清单: MCDST PROC NEAR/FARPUSH AX ;保护现场PUSH BX PUSH DX AGAIN:XOR DX,DX ;AX值扩展到DXAX中DIV BX ;商存入AX,余数存入DXAND DX,DXJZ EXIT ;余数为0转EXITMOV AX,BX ;余数不为0更新被除数MOV BX,DX ;更新除数JMP AGAIN ;继续循环EXIT:MOV CX,BX ;最大公约数存入CXPOP DX ;恢复现场POP BX POP AX RET ;返回主程序 MCDST ENDP第7章 子程序设计汇编语言程序设计7.3.2子程序的调用与返

9、回调用子程序指令:CALL返回主程序指令:RET【例7-2】以下程序用于计算=m!/(n!*(m-n)!)的值(m、n为自然数,且mn) 。(假设阶乘乘积大小不超过两个字节)N送CX调用SUB1子程序AX(即n!)送BXM送CX调用SUB1子程序AX/BX(即m!/n!)送BXmn送CX调用SUB1子程序AX(即(mn)!)送BXAX/BX(即m!/n!/ (mn)!)送AX存储AXYNSUB1子程序开始1送AXAX*CX送AXCX1送AXCX=0返回开始结束第7章 子程序设计汇编语言程序设计DATA SEGMENTM EQU 8 N EQU 3RES DW ? DATA ENDS CODE

10、SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,NCALL SUB1 ;调子程序计算n! MOV BX,AXMOV CX,MCALL SUB1 ;调子程序计算m!DIV BX ;m!/n!送 AXMOV BX,AXMOV CX,MSUB CX,NCALL SUB1 ;调用子程序,计算(m-n)!XCHG BX,AXDIV BX ;m!/n!/ (m-n)! 送AXMOV RES,AXMOV AH,4CHINT 21H SUB1 PROC ;计算阶乘的子程序MOV AX,1 NEXT:MUL AX,CXLOOP NEX

11、TRET SUB1 ENDP CODE ENDSEND START第7章 子程序设计汇编语言程序设计7.4 子程序的参数传递方法 入口参数:主程序调用子程序前,把要加工的数据传给子程序,这些数据称为入口参数出口参数:子程序执行完后,要把执行结果传回主程序,这些数据称为出口参数参数传递方式:寄存器传递、堆栈传递和存储单元传递 第7章 子程序设计汇编语言程序设计7.4.1 通过寄存器传递参数含义:主程序把入口参数送入某些寄存器,然后调用子程序,子程序中直接使用存放入口参数的寄存器进行处理。子程序处理完数据,将执行结果作为出口参数存入寄存器中,回到主程序,主程序对存放在寄存器中的出口参数进行相应处理

12、特点:方便、直观,适于参数较少的情况注意:用于传递出口参数的寄存器不能进行现场保护和恢复第7章 子程序设计汇编语言程序设计通过寄存器传递参数应用举例【例7-3】以BCDBUF为首地址的内存中存放着若干单元的用BCD码表示的十进制 数,每一个单元中存放两位BCD码,要求把它们分别转换为ASCII码,存放在ASCBUF为首地址的单元中,且高4位BCD码转换成得ASCII码放在地址较高的单 元。并且要求边转换边显示这些ASCII码第7章 子程序设计汇编语言程序设计DATA SEGMENT BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNT

13、EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS STACK SEGMENT PARA STACK STACK STAPN DB 100 DUP (?) TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET BCDBUF;BCD码的内存区首地址MOV DI,OFFSET ASCBUF;

14、ASCII码的内存区首地址MOV CX,COUNT ;组合BCD码个数CLD ;DF=0,按地址递增方式 LP:LODSB ;取一个组合BCD码MOV BL,AL ;暂存AND AL,0FH ;屏蔽高4位OR AL,30H ;BCD码低位转换为ASCII码MOV DL,AL ;存入DLSTOSB ;存入ASCII码存储区CALL DISP ;调用显示子程序 MOV AL,BL ;取回BCD码PUSH CX ;保存计数值MOV CL,4 SHR AL,CL ;取BCD码高4位OR AL,30H ;BCD码高位转为ASC码MOV DL,AL ;存入DLSTOSB ;存入ASCII码存储区CALL DISP ;调用显示子程序POP CX ;弹出计数值LOOP LP ;计数不为0则继续MOV AH,4CH;为0则返回DOSINT 21H;子程序名:DISP;功能:显示ASCII码字符;入口参数:ASCII码在DL中 DISP PROC ;子程序定义开始MOV AH,2 ;显示ASCII码INT 21HMOV DL, MOV AH,2 INT 21HRET ;返回主程序 DISP ENDP CODE ENDSEND START第7章 子程序设计汇编语言程序设计【例7-4】将给定的一组字数据X、Y代入Z=(X+Y)2-X)4公式中,计算 相应的Z值保护BX、CX寄存器内容BX=AX A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

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