微型计算机技术与汇编语言程序设计:ch11-汇编语言与高级语言混合程序设计.docx
《微型计算机技术与汇编语言程序设计:ch11-汇编语言与高级语言混合程序设计.docx》由会员分享,可在线阅读,更多相关《微型计算机技术与汇编语言程序设计:ch11-汇编语言与高级语言混合程序设计.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言与高级语言混合程序设计本章对汇编语言与C语言混合程序进行设计。主要介绍汇编语言和C语言 的混合编程和调用方法。7.1.汇编语言和高级语言程序设计语言按照功能的不同可以分为3种:机器语言、汇编语言和高级语 言。把机器语言指令以助记符来表示,就成汇编语言指令,汇编语言指令必须用 工具软件翻译(汇编过程)成机器语言指令才能执行,其它高级语言也必须翻译(编 译或解释)为机器语言才能执行。高级语言是独立于机器的通用语言,不依赖于 特定计算机的硬件结构和指令系统。用高级语言写的源程序,可以在不同的计算 机上重新编译(或解释)后运行,而得到相同运行结果。高级语言包括C/C+. Basic Pasca
2、l Java 等。C/C+语言是一种应用广泛,并且实现灵活的一种计算机编程语言,用 C/C+语言编出来的程序,可以在很多平台上运行,可移植性强。C/C+不仅具 有良好的高级语言特征,而且还具有一些低级语言的特点,如:寄存器变量、位 操作等。所以,C/C+语言的程序与汇编语言程序之间能很平滑地衔接。另外, 目前主要的C/C+语言程序开发环境,如:Turbo C/C+ Borland C/C+等,也 都提供了很好的混合编程手段。计算机操作系统等大型软件,一般都采用C/C+语言和汇编语言混合编程来 完成。虽然除了 C/C+以外的其它高级也可以与汇编语言进行混合编程,但下面 我们重点讲述C/C+与汇编
3、语言的混合编程问题。7. 2.为什么要混合编程?有时为了提高关键代码的执行效率,可以采用汇编语言来实现低层关键代 码的功能,如数据采集、定时、调度等,而用C/C+等高级语言来实现高层如数 据处理等功能。通过C/C+与汇编语言之间的相互调用,实现汇编语言和高级语 言的混合编程,发挥各自语言的优势。这种混合编程的方法优点是提高了关键程7. 5,独立汇编模块格式模块划分:有的模块用c语言实现,有的模块用汇编语言实现。每个模块 源程序(C源程序或汇编源程序)独立编译为Qbj目标文件,之后用链接工具把所 有的。用整合到一个exe可执行文件。模块之间的调用有两种情况,一种是C调 用汇编;另一种是汇编调用C
4、o对于C语言模块调用汇编语言模块中函数(或使用变量)的情况,声明如下:1)在C语言模块中,用extern说明要调用汇编模块中的函数(或使用变量)。 其格式如下:extern返回值类型 函数名(参数类型表);extern变量类型变量名;2)在汇编语言模块中,用PUBLIC声明被C语言模块调用的函数(或使用变 量)。其格式如下:PUBLIC 程序标识符(函数名或变量名)对于汇编语言模块调用C语言模块中函数(或使用变量)的情况,声明如下:1)在汇编语言模块中,用extern说明要调用C语言模块中的函数(或使用的变 量)。其格式如下:EXTRN 函数名:类型(NEAR,FAR)EXTRN 变量名:类型
5、(BYTE, WORD,DWORD)2)在C语言模块中,用PUBLIC声明被汇编语言模块调用的函数(或使用的变 量)。其格式如下:函数名/*在C语言模块中,要求全局可见*/变量名/*在C语言模块中,要求全局可见*/例2: C语言程序模块调用汇编语言子程序模块,显示一段信息/* C语言程序:main, c */extern void display (void) ; /* 说明 display 是外部函数 */main () display (););汇编语言子程序模块:display. asm.model small, c ;存储模式,采用小型存储模式和C 语言类型.data ;数据段msg
6、db Hello, C and Assembly,code ;代码段PUBLIC _display ;外部C模块可以使用本过程 _display proc ;采用了一致的命名约定mov ah, 9 ;小型模式只有一个数据段,所以不必设置DS mov dx, offset msg ;寄存器AX和DX无须保护 int 21hret_display endpend例3: uc/osn中汇编语言部分。注意本例中函数和变量的定义格式及程序中的 使用。;1.全局和外部引用定义部分;1.1本汇编模块中实现的4个函数(C模块会调用下边四个汇编实现的函数)PUBLIC _OSTickISR定时中断汇编函数PUB
7、LIC _OSStartHighRdy ;开始执行最高级任务汇编函数PUBLIC _OSCtxSw;任务切换汇编函数PUBLIC _OSIntCtxSw ;中断中任务切换汇编函数;1.2C模块中声明和实现的函数和变量(本汇编模块中要引用它们)EXTRN _OSIntExit:FAR ;函数 3 个EXTRN _OSTimeTick:FAREXTRN _OSTaskSwHook:FAREXTRN _OSIntNesting:BYTE ;变量 7 个EXTRN _OSTickDOSCtr:BYTE EXTRN _OSPrioHighRdy:BYTE EXTRN _OSPrioCur:BYTE EX
8、TRN _OSRunning:BYTE EXTRN _OSTCBCur:DWORD EXTRN _OSTCBHighRdy:DWORD.MODELLARGE ;存储模式,CODE ;代码开始;2.1开始执行最高级任务汇编函数实现部分_OSStartHighRdy PROC FAR _OSStartHighRdy ENDP;2.2多任务切换汇编函数实现部分_OSCtxSw PROC FARPUSHA;保存当前旧任务环境到堆栈中PUSH ESPUSH DSMOV AX, SEG JDSTCBCur ;引用C中声明的变量MOV DS, AX ;LES BX, DWORD PTR DS:_OSTCBC
9、ur ;保存当前旧任务 的 SS: SP 到当前任务的 TCB 中,OSTCBCur-OSTCBStkPtr 二 SS:SPMOV ES:BX+2,SSMOV ES:BX+09SPCALL FAR PTR _OSTaskSwHook ;调用 C 中函数MOV AX, WORD PTR DS:_OSTCBHighRdy+2; _OSTCBCur =_OSTCBHighRdyMOVDX, WORD PTR DS :_OSTCBHighRdyMOVWORD PTR DS:_OSTCBCur+2, AXMOVWORD PTR DS: OSTCBCur, DXMOVAL, BYTE PTR DS:_OS
10、PrioHighRdyMOVBYTE PTR DS:_OSPrioCur, ALLES BX, DWORD PTR DS:_OSTCBHighRdy;取出新任务 的堆栈指针,SS:SP = OSTCBHighRdy-OSTCBStkPtrMOVSS, ES:BX+2MOVSP, ES:BXPOP DS;弹出新任务的环境POP ESPOPAIRET ;跳到新任务执行_OSCtxSw ENDP其它汇编函数实现略,参考uC/OS II源程序中OS_CPU_A.ASM文件。例4. C模块与汇编模块混合调用/*main.c 模块*/#include extern int maxx(int ,int);
11、/*引用汇编实现的函数*/int main(int argc, char *argv)int x; _asm mov ah, 1 /*嵌入汇编指令,等待键盘输入*/_asm int 21hx= maxx(8,9);/*调用汇编函数 maxx() */printf(n%dM,x); /* 显示返回值*/return 1;);*sub.asm 模块*;.MODEL LARGE ;存储模式为 large.CODEpublic _maxx;外部可见函数maxx_maxx proc far ;_maxx 函数实现push bpmov bp,spmov ax,bp+6cmp ax,bp+8jge exit
12、mov ax,bp+8exit: pop bp ret_maxx endpEnd6.编译、汇编和连接的方法步骤一,用MASM汇编ASM语言源程序,生成汇编语言目标文件(.OBJ) 0步骤二,在TURBO C集成环境下建立一个工程文件,该文件包括需要编译连 接的C语言源程序和汇编语言目标文件名(.OBJ) o步骤三,在TURBO C集成环境下,按F9功能键,制作出工程,生成可执行文件(.EXE) o 序段的执行效率,而其缺点是程序移植性变差。在操作系统软件中,如linux,、uC/OS II等就采用了 C/C+与汇编语言的混 合编程。操作系统中,一般是低层的硬件相关的代码(任务切换调度、硬件中断
13、、 定时中断等)都采用汇编语言实现,这部分与具体硬件相关,也叫平台相关的代 码;而高层的服务功能采用C/C+语言来实现,这部分与具体硬件无关,也叫平 台无关的代码。平台相关的汇编语言代码部分是操作系统移植到不同处理器时需 要修改的部分。7. 3.如何混合编程?为了实现一个任务,我们把一个任务按功能划分为很多模块,每个模块以 函数或子程序的形式存在,根据每个模块的特点选用汇编语言或C/C+语言,我 们把它们叫做汇编语言模块或C/C+语言模块。这两种不同语言编写的模块,都 会编译成目标文件(.Obj),最后将多个目标文件连接在一起,形成一个完整的可 执行文件(.exe)。为了完成一个特定任务的多个
14、模块,模块之间不是孤立的。一种情况是, 模块中函数之间可能存在着调用关系,也就是,可能存在着汇编语言模块中的函 数调用另一个C/C+模块中的函数的情况;也可能存在着C/C+模块中的函数调 用汇编语言编写的模块函数的可能。另一种情况是,也可能存在着一个模块引用 另一个模块公共变量的情况。为了不同模块之间调用和引用的正确,要对模块之间的调用和引用进行约 定。汇编语言与C/C+语言混合编程,需要考虑四个方面的约定(规范):(1)存储模式的约定一如何为模块分配内存的约定;(2)函数名称的约定一如何声明函数名称约定;(3)函数调用约定一汇编语言与C语言之间的参数如何传递的约定;(4)编译方法。有两种混合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机 技术 汇编语言 程序设计 ch11 高级 语言 混合
限制150内