通信原理模拟角调制

上传人:宝路 文档编号:47970176 上传时间:2018-07-07 格式:PPT 页数:84 大小:1.30MB
返回 下载 相关 举报
通信原理模拟角调制_第1页
第1页 / 共84页
通信原理模拟角调制_第2页
第2页 / 共84页
通信原理模拟角调制_第3页
第3页 / 共84页
通信原理模拟角调制_第4页
第4页 / 共84页
通信原理模拟角调制_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《通信原理模拟角调制》由会员分享,可在线阅读,更多相关《通信原理模拟角调制(84页珍藏版)》请在金锄头文库上搜索。

1、 第六章 子程序设计目录 61 子程序的概念 62 子程序的一般设计方法621 子程序的调用和返回指令622 过程定义623 现场保护和恢复624 子程序参数传递方法 63 嵌套与递归子程序 631 子程序的嵌套632 递归于程序65 宏功能语句66 模块连接 61 子程序的概念 子程序又称为过程,它相当于高级语言中的过程和函数。将 重复的或经常要使用的程序段设计成可供反复调用的独立程 序段,在需要时用相应的指令调用它,执行完之后再返回到 调用它的程序中继续执行,这样的独立程序段称为子程序。 主程序和子程序之间的关系如图61所示。 L: 调用子程序A L+1: M: 调用子程序A M+1: N

2、: 调用子程序A N+1: A PROC RET A ENDP 61 子程序的概念 在设计子程序时,要考虑的主要问题如下: (1)如何定义子程序? (2)如何调用子程序? (3)如何返回主程序? (4)如何传递参数? (5)如何编写子程序? 62 子程序的一般设计方法在介绍子程序的设计方法前,先介绍子程序的调用指令、返回 指令、过程的定义、现场的保护和恢复等有关内容,然后介绍 子程序的设计方法。 621子程序的调用和返回指令1 子程序调用指令CALL1)段内直接调用指令 格 式: CALL OPD 执行的操作: 当操作数长度为 16位时:SP2SP,IP SP , IPD16 IP 或 EIP

3、D16 AND 0000FFFFHEIP当操作数长度为32位时: ESP4ESP,EIP ESP,EIPD32 EIP2)段内间接调用指令格 式: CALL WORD PTR OPD 执行的操作: 当操作数长度为16位时:SP2SP,IPSP (EA) IP或(EA)AND 0000FFFFH EIP 当操作数长度为32位时:ESP4ESP,EIPESP(EA) EIP如果操作数长度为16位时,则有效地址EA应为16位; 如果操作数长度为32位时,EA应为32位。 3)段间直接调用指令格 式: CALL FAR PTR OPD 执行的操作: 当操作数长度为16位时: SP2 SP,CSSP S

4、P2 SP,IP SPOPD指定的偏移地址 IPOPD指定的段地址 CS 当操作数长度为32位时: ESP4 ESP,CS作低16位ESP ESP4 ESP,EIPESP OPD指定的偏移地址 EIP OPD指定的段地址CS4)段间间接调用指令格 式: CALL DWORD PTR OPD 执行的操作: 当操作数长度为16位时:SP2SP,CSSP SP2SP,IP SP (EA)IP (EA+2)CS 当操作数长度为32位时: ESP4ESP,CS作低16位ESPESP4ESP,EIPESP (EA)EIP (EA+4)的低16位CS2子程序返回指令RET1)段内近程返回指令 格 式:RET

5、 当操作数长度为16位时:(SP)IP,SP2SP 当操作数长度为32位时:(ESP)EIP,ESP4ESP2)段内带立即数近程返回指令 格 式:RET n 当操作数长度为16位时:(SP)IP,SP2SP SP+nSP 当操作数长度为32位时:(ESP)EIP,ESP4ESPESP+nESP2子程序返回指令RET(3)段间远程返回指令 格式:RET 当操作数长度为16位时:(SP)IP,SP2SP(SP)CS,SP2SP 当操作数长度为32位时:(ESP)EIP,ESP4ESP(ESP)CS,ESP4ESP (4)段间带立即数远程返回指令 格式:RET n 当操作数长度为16位时:(SP)I

6、P,SP2SP(SP)CS,SP2SPSP+nSP 当操作数长度为32位时:(ESP)EIP,ESP4ESP(ESP)CS,ESP4ESPESP+nESP622 过程的定义过程名 PROC NEAR / FAR (过程体) 过程名 ENDP1.如果调用的程序和子程序在同一个代码段中,则使用NEAR属性 。 2.如果调用的程序和子程序不在同一个代码段中,则使用FAR属性 。 3.过过程体是完成某一功能的程序段。 622 过程的定义例如:编写一子程序,将AL中的一位十六进制转换成ASCII码显示输出。 HEXDIS PROCNEAR ANDAL,0FH ADDAL,30H CMPAL,39H JB

7、ENEXT ADDAL,7 NEXT:MOVDL,AL MOVAH,2 INT21HRET HEXDISENDP622 过程的定义如果调用程序和子程序在同一代码段中,其结构形式为: CODE SEGMENTCALLDISPLAYDISPLAY PROCNEARRET DISPLAYENDP CODE ENDS 由于“ CALL DISPLAY ”指令和子程序DISPLAY在同一代码段中, DISPLAY应定义为NEAR属性(可以省去)。622 过程的定义如果调用程序和子程序不在同一代码段中,其结构形式为: CODE1 SEGMENTCALL FAR PTR DISPLAYCODE1 ENDS

8、CODE2 PROCCALL DISPLAYDISPLAY PROC FARRET DISPLAY ENDPCODE2 ENDS623 现场的保护和恢复例如:SUB1 PROCPUSHAXPUSHBXPUSH CXPUSH DXPOPOP CXPOPBXPOPAXRETSUB1 ENDP 应该注意的是,堆栈的操作原则是后进先出。624 子程序的参数传递方法在编写子程序时,为了便于其他用户调用该子程序和程序的阅读,通常要写出 该子程序的说明信息。说明信息一般由如下几个部分组成: (1)子程序名 (2)功能描述 (3)入口参数 (4)出口参数 (5)使用的寄存器 (6)使用的算法和重要的性能指标

9、(7)其他说明主程序与子程序之间传递参数的方法有寄存器法、约定单元法、地址表法和堆 栈法等。 1 寄存器法寄存器法就是子程序的入口参数和出口参数存放在约定的寄 存器中。这种方法的优点是数据传递速度快、编程较方便、节省 内存单元。其缺点是当传递的参数较多时,由于寄存器的个数是 有限的,而且在处理过程中要经常使用寄存器,将导致无空闲寄 存器供编写程序使用。所以,寄存器法只适用于传递参数较少的 情况。例 6.1编写程序,将键盘输入的以非数字结束的十进制数转换成二进制数依次送BUF 字缓冲区,最后以输入回车结束数据的输入。 程序清单如下: STACK SEGMENTSTACKDB128 DUP(0)

10、STACK ENDS DATA SEGMENT BUF DW30 DUP(0) DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX例 6.1LEASI,BUF L:MOVDI,0 CALLDCBCMPDI,0JNZEXITMOV SI,BXADDSI,2JMP L EXIT:MOVSI,BX MOV AH,4CH INT21H例 6.1DCBPROCPUSHAXPUSH CX MOVBX,0 NEW : MOVAH,1 INT21H CMPA

11、L,0DHJNZNHCMOVDI,1 NDIG: POPCX POPAXRET例 6.1NHC: CMPAL,30HJLNDIGCMPAL,39HJGNDIGANDAL,0FHCBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP NEW DCB ENDP CODE ENDSENDSTART例 6.2例6.2 编写一主程序调用二进制数转换成十进制数显示输出 的子程序,将BUF字缓冲区的数显示输出。 STACK SEGMENTSTACK DB128 DUP(0) STACK ENDSDATA SEGMENT BUFDW30 DUP(?) N= (BU

12、F)/2 STRDB9 DUP( ) CHEDW10000,1000,100,10,1 DATAENDS例 6.2CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUF MOVCX,N L: MOVAX,SI LEADI,STRCALLCBDADDSI,2LOOPLMOVAH,4CH INT21H例 6.2CBDPROC PUSHAX;保护现场 PUSHBX PUSHCX PUSHDX PUSHSI PUSHDI PUSHDI LEASI,CHE ORAX

13、,AX JNSPLUS MOVBYTE PTR DI,-INCDI NEGAX;将负数转为正数例 6.2PLUS: MOVCX,5L1: MOVBX,SI MOVDX,0 DIVBX ADDAL,30H MOVDI,AL INCDI ADDSI,2 MOVAX,DX LOOPL1L2: MOVBYTE PTRDI,0DHINCDIMOVBYTE PTRDI,0AH INCDI例 6.2MOVBYTE PTRDI,POPDX MOVAH,9 INT21H POPDI;恢复现场 POPSI POPDX POPCX POPBX POPAX RETCBDENDPCODE ENDS ENDSTART 2

14、 约定单元法约定单元法是子程序的入口参数和出口参数存放在约定的存 储单元中。这种方法的优点是子程序要处理的数据或计算的结果 分别存放在各自的存储单元中。它不需要占用寄存器。其缺点是 需要占用一定数量的存储单元。 例 6.3编写程序,其主程序和被调用的子程序在同一个代码段中。要求子程序的功 能是将BUF中的16位无符号二进制数转换为P 进制数显示输出。其中的P为3 16中任一整数。 二进制数转换为P进制数可采用“除P取余” 法STACKSEGMENTSTACK DW128 DUP(0) STACKENDS DATASEGMENT ADW1234H,4352H,3A62H,6390H N= (A)/2 BUFDW? STRDB15 DUP (?) PDW? JDB? DATAENDS 例 6.3CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVCX,N LEADI,AL: MOVAX,DI MOVBUF,AXMOVP,8MOVJ,QCALLBCPMOVP,16MOVJ,H例 6.3CALLBCPADDDI,2LOOPL MOVAH,4CH INT21H BCPPROC PUSHAX PUSHBX PUSHCX PUSHDX PUSHSIM

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

最新文档


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

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