第章子程序设计 由于SUBB既被段间调用又被段内调用,所以必须是FAR属性。 例6-2给出的子程序SUBA、SUBB与主程序MAIN不在同一代码 段中,主程序MAIN在 CODEA代码段中,而子程序SUBA、SUBB在 CODEB代码段中。 例6-1和例6-2说明,汇编语言程序中的主、子程序,既可 以在同一个代码段中(如例6-1),也可以在不同的代码段中(如 例6-2)
第6章 子 程 序 设 计 由于SUBB既被段间调用又被段内调用,所以必须是FAR属性。 例6-2给出的子程序SUBA、SUBB与主程序MAIN不在同一代码 段中,主程序MAIN在CODEA代码段中,而子程序SUBA、SUBB在 CODEB代码段中。 例6-1和例6-2说明,汇编语言程序中的主、子程序,既可 以在同一个代码段中(如例6-1),也可以在不同的代码段中(如 例6-2)
第座子程序设计 6.2.2子程序调用方法说明 个完整的子程序,应当包括子程序调用方法说明、保护现 场和恢复现场、子程序定义等部分。为了使用的方便,子程序应 以文件形式编写。子程序文件由子程序说明和子程序本身构成 子程序说明部分要求语言简明、确切 子程序说明一般由如下几部分组成: (1)功能描述:包括子程序的名称、功能、性能指标(如执 行时间)等。 (2)所用的奇存器和存储单元。 (3)子程序的入口、出口参数。 (4)子程序中又调用的其他子程序 (5)调用刨
第6章 子 程 序 设 计 6.2.2 子程序调用方法说明 一个完整的子程序,应当包括子程序调用方法说明、保护现 场和恢复现场、子程序定义等部分。为了使用的方便,子程序应 以文件形式编写。子程序文件由子程序说明和子程序本身构成。 子程序说明部分要求语言简明、确切。 子程序说明一般由如下几部分组成: (1) 功能描述:包括子程序的名称、功能、性能指标(如执 行时间)等。 (2) 所用的寄存器和存储单元。 (3) 子程序的入口、出口参数。 (4) 子程序中又调用的其他子程序。 (5) 调用实例
第章子程序设计 例如,有一子程序说明如下: ;子程序DTOB ;将两位十进制数(BCD码)转换成二进制数 入口参数:AL寄存器中存放十进制数 ;出口参数:CL寄存器中存放转换完的二进制数 ;所用寄存器:BX ;执行时间:0.06ms
第6章 子 程 序 设 计 例如,有一子程序说明如下: ; 子程序 DTOB ; 将两位十进制数(BCD码)转换成二进制数 ; 入口参数:AL寄存器中存放十进制数 ; 出口参数:CL寄存器中存放转换完的二进制数 ; 所用寄存器:BX ; 执行时间:0.06 ms
第章子程序设计 看了这一子程序说明,尽管还不知道子程序本身的情况, 但根据说明已可以调用这个子程序了。该子程序说明的第 二行告诉我们DTOB子程序完成的功能。入口参数说明这一程序 在调用前应将要转换的十进制数送入AL寄存器。出口参数说明, 子程序执行完后,转换结果就在CL寄存器中,所用寄存器是说 该子程序执行过程中要用到BX寄存器,因此在调用本子程序前, 若BX寄存器里存放着有用数据的话,应该事先转存或保护起来, 否则可能会被破坏。执行时间则说明了该程序执行所需的时间 是0.06ms。有的说明中还给出一个调用实例,以实例的形式教 给用户如何使用和调用子程序
第6章 子 程 序 设 计 看了这一子程序说明,尽管还不知道子程序本身的情况, 但根据说明已可以调用这个子程序了。该子程序说明的第一、 二行告诉我们DTOB子程序完成的功能。入口参数说明这一程序 在调用前应将要转换的十进制数送入AL寄存器。出口参数说明, 子程序执行完后,转换结果就在CL寄存器中,所用寄存器是说 该子程序执行过程中要用到BX寄存器,因此在调用本子程序前, 若BX寄存器里存放着有用数据的话,应该事先转存或保护起来, 否则可能会被破坏。执行时间则说明了该程序执行所需的时间 是0.06 ms。有的说明中还给出一个调用实例,以实例的形式教 给用户如何使用和调用子程序
第章子程序设计 6.3子程序调用和返回指令 6.3.1调用指令 1.段内直接调用 格式: CALL DST CALL NEAR PTR DST 功能:将子程序的返回地址(断点地址)存入栈中,并转移 到子程序入口地址去执行子 程序 执行的操作:(SP)-2→SP (IP)→(SP)+1,(SP) (IP)+D16→IP
第6章 子 程 序 设 计 6.3 子程序调用和返回指令 6.3.1 调用指令 1.段内直接调用 格式:CALL DST CALL NEAR PTR DST 功能:将子程序的返回地址(断点地址)存入栈中,并转移 到子程序入口地址去执行子 程序。 执行的操作: (SP)-2→SP (IP)→(SP)+1,(SP) (IP)+ D16→IP