8086汇编语言:子程序调用CALL指令详解

需积分: 50 1 下载量 200 浏览量 更新于2024-08-14 收藏 685KB PPT 举报
"子程序调用指令CALL-汇编资料复习" 在计算机编程中,子程序调用指令CALL是汇编语言中用于实现函数调用的关键指令。它类似于JMP指令,但有所不同,因为CALL不仅执行跳转,还负责在调用子程序后恢复程序的执行流程。这篇复习资料详细介绍了CALL指令的四种类型以及与之相关的基础知识。 1. CALL指令的四种类型: - **CALL label**:段内调用,直接寻址。调用位于同一段内的子程序,只入栈IP(指令指针)的值。 - **CALL r16/m16**:段内调用,间接寻址。通过16位寄存器或内存地址间接找到子程序的入口点,同样仅入栈IP。 - **CALL far ptr label**:段间调用,直接寻址。调用跨段的子程序,需要入栈CS(代码段寄存器)和IP。 - **CALL far ptr mem**:段间调用,间接寻址。通过内存地址中的16位段地址和16位偏移地址来调用子程序,同样需要入栈CS和IP。 2. **返回地址的保存**: - 段内调用时,只保存IP,因为子程序和调用者在同一段内,CS无需改变。 - 段间调用则需要保存CS和IP,以便在子程序结束时正确返回到调用者的位置。 3. **基础知识**: - **不同进制数之间的转换**:理解二进制、八进制、十进制和十六进制之间的转换对于编程至关重要。 - **原码、反码和补码**:这些是表示有符号二进制数的方法,涉及数值的加减运算。 - **逻辑运算**:包括AND(与)、OR(或)、NOT(非)和XOR(异或),用于进行位级别的操作。 - **中央处理器(CPU)**:是计算机的核心组件,负责执行指令和控制其他硬件组件。 - **Intel8088/8086微处理器**:这部分内容介绍了8086/8088的编程结构和工作过程,以及寄存器组的组成。 4. **8086/8088的编程结构**: - **16位CPU**:8086/8088具有16位数据总线和20位地址总线。 - **执行部件(Execution Unit, EU)**:负责执行指令,包含ALU(算术逻辑单元)、标志寄存器等。 - **总线接口部件(Bus Interface Unit, BIU)**:负责内存和I/O设备的通信,包含指令队列缓冲器等。 - **两部分并行工作**:BIU负责取指,EU负责执行,提高了效率。 5. **8086/8088的寄存器组**: - **通用寄存器**:包括4个数据寄存器(AX, BX, CX, DX)和4个指针/变址寄存器(SP, BP, SI, DI),它们可以独立或组合使用,以支持不同的操作。 - **段寄存器**:CS、DS、ES和SS分别对应代码段、数据段、附加段和堆栈段。 - **控制寄存器**:不直接参与数据处理,而是控制CPU的行为,如中断向量表的访问。 在汇编编程中,理解CALL指令的工作原理和相关基础知识是至关重要的,因为它允许程序员构建复杂的程序结构,如函数调用和循环,同时也涉及到处理器内部的工作方式,如CPU如何处理指令和数据。通过深入学习这些概念,开发者能够更好地编写、调试和优化汇编代码。