汇编语言程序设计:DOS系统功能调用与程序结束

版权申诉
0 下载量 107 浏览量 更新于2024-07-03 收藏 670KB PPT 举报
"该资源是关于计算机原理的第三章,主要讲解汇编语言程序设计,内容涉及DOS下的程序结束返回、直接执行过程、程序模块的组织结构以及数据块传送的注意事项。" 在汇编语言程序设计中,程序的结束和返回到DOS是一个重要的环节。通常,程序在完成其功能后需要正确地通知操作系统并退出。在提供的内容中,可以看到三种不同的方法来结束程序并返回DOS。 第一种方法是在代码段结束之前,通过调用DOS的4CH号系统功能调用来结束程序。`MOV AH,4CH` 设置了AH寄存器的值为4CH,这是DOS系统调用中表示程序结束的常量,然后`INT 21H` 引发中断21H,执行这个系统调用,使得程序返回到DOS环境。 第二种方法是DOS下的直接执行过程,使用远过程(PROCFAR)定义,通过压栈来保存返回地址。`PUSHDS` 压入当前的数据段(DS)寄存器的值,接着`MOV AX, 0` 和`PUSH AX` 用于压入0作为偏移地址,形成完整的返回地址(CS:IP)。最后,`RET` 指令执行远返回,从栈顶恢复CS:IP,从而结束程序。 第三种方法是IBM推荐的形式,它包括数据段(DATASEGMENT)、堆栈段(STACKSEGMENT)和代码段(CODESEGMENT)的声明,并使用ASSUME指令指定每个段寄存器对应的段。在程序开始时,通过`PUSH DS` 和`MOV AX, 0` `PUSH AX` 保护PSP段地址和偏移0地址,然后在程序结束后使用`RET` 返回。 在程序设计中,数据块的传送也是常见的操作。当源数据区和目标数据区有地址重叠时,需要特别注意,以免在传送过程中破坏数据。如图3.8所示,如果源数据区位于目标数据区之前,应该先传送源数据区的尾部;反之,如果源数据区位于目标数据区之后,应先传送头部。判断源和目标的前后关系,通常根据它们在内存中的相对位置来确定。 此外,图3.9提供了例3.13的详细情况,进一步阐述了数据块传送时的处理策略,确保在重叠区域不发生错误。在实际编程中,这类问题的解决对于编写安全、可靠的程序至关重要。理解这些概念和技巧对于深入理解计算机原理和汇编语言编程具有重要意义。