汇编语言的编写、调试比较复杂,不具有可移植性,因此,在软件开发中往往使用高级语言。但是,汇编语言又有着高级语言所不具有的优点:占有存储空间小,运行速度快,能直接控制硬件。因而经常是程序的大部分用高级语言编写,而在某些关键部分,对速度要求很高的部分,运行次数很多的部分,直接控制硬件的部分,则用汇编语言编写。这就提出了汇编语言与高级语言的连接问题。 一、 BASIC程序与汇编语言的连接 1.USR(n函数), (])用DATA语句存放汇编子程序的机器码。 (2)用DEF SEO语句定义汇编子程序机器码的装入段地址。 (3)用READ语句从DATA语句中读汇编子程序的机器码。 (4)用POKE函数,将汇编子程序的机器码进入指定的内存单元中。 (5)用call语句调用, 或用UsR函数调用。 2.CALL语句 (1)用DEF SEG语句定义汇编子程序机器码的装入段地址。 (2)用BLOAD语句装入原先存在磁盘内的 编子程序机器码文件。 (3)用call语句弱用。 二、 C语言程序与汇编语言程序的连接 在用C语言编写的程序中,与汇编语言程序一样,可以进行细微地处理,因此在许多情况都没有必要与汇编语言程序相连接 C语言程序中使用汇编语言程序定义的变量和函数时,在C语言程序中应该用extern说明,在汇编语言程序中应该用PUBLIC说明。 汇编语言程序结束时应该用RET指令返回,而且由于采用堆栈来传送参数,因而返回时往往采用带参数的返回指令,以便跳过参数区。 组描述是用GROUP伪指令把几个段组合成一组,这些段具有共同的起始地址。这样就允许通过用同一段寄存器访问一组中的各段。 进.退栈操作是为了保存现场。另外,如果汇编语言程序中需要用到某些寄存器,则需将这些寄存器压入堆栈,待程序将要结束时,再退出堆栈。 参数传递包括两个方面,一个是从TURBO C语言程序向汇编子模块传递参数,另一个是从汇编语言向TURBO C调用程序返回参数。TURBO C程序向汇编语言程序的参数传递是通过栈操作进行的。先传递的参数被最后压入堆栈,即参数按从右到左的顺序被压入堆栈(这与C语言的版本有关)。 汇编语言程序中的结果返回给TURBO C主程序是通过AX和DX寄存器来完成的。 |