汇编语言和C语言的混合编程
- 格式:ppt
- 大小:83.00 KB
- 文档页数:19


龙源期刊网
C语言和汇编语言混合编程方法
作者:庞新法
来源:《价值工程》2014年第24期
摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言。两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用。本文通过具体的实例,说明了混合编程的基本方法,为C语言应用开发人员提供方便。
关键词: C 语言;汇编语言;混合编程
中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2014)24-0231-02
0 引言
汇编语言是一种面向机器的语言,其优点是运行速度快,占用存储空间小,可直接对硬件进行控制。缺点是编写、调试困难、移植性差。C语言简洁、灵活、库函数丰富、调试方便、移植性好,目前已被广泛地应用于系统软件和应用软件的开发中,为了发挥各自优势,取长补短,采用混合编程。大部分程序,如界面、人机接口(外壳程序)、数据处理等用C语言编写,以提高程序的开发效率。而某些程序,如需要缩短程序的运行时间,或需要对硬件进行直接操作,或需要利用操作系统的某些功能模块,或频繁使用的程序、或需要占用内存空间少的程序(内核程序),则用汇编编写,以提高程序的运行效率。
1 嵌入式汇编
嵌入式汇编也称行内汇编,源程序中直接插入汇编语句。汇编语句可直接访问C程序中定义的常量、变量、函数。不必考虑二者之间的接口,方便编程。
1.1 嵌入式汇编语句的格式
格式:asm操作码 操作数[;或换行]
其中:操作数可以是汇编语句中的立即数、寄存器、表达式等还可以是C中的常量、变量、标号等。分号;是汇编语句结束符,并非注解,要用注解,用C的注解。如下例
所示。
1.2 汇编语句访问C的数据
第l6卷.第8期 。2006年8月 计算机技术与发展 Vo1.16 N。.8 COMPUTER TECHNOLOGY AND DEVELOPMENT Aug.2006
汇编语言与 C语言的混合程序设计技术
王文东,李竹林,尚建人
(延安大学,陕西延安716000)
摘要:讨论汇编语言与C语言的混合程序设计技术。在大规模的程序设计中,汇编语言程序与高级语言程序相结合,充 分发挥各自的优点,实现两种语言之间的混合编程,是解决实际问题的有效方法。在实际的程序设计中,C语言主程序可
12 ̄iJl用汇编语言子程序,汇编语言主程序可以调用C语言子程序,也可以在C语言程序中嵌入汇编语言语句。在汇编语言
与C语言的混合编程中,参数的传递、模块的连接以及调用关系的确定是值得注意的关键问题。
关键词:汇编语言;C语言;混合编程 中图分类号:TP313 文献标识码:A 文章编号:1673—629X(2o06)o8—0o18一o3
Design Technique of Mixed Programming Between
Assembly Language and C Language
WANG Wen—dong,LI Zhu—lin,SHANG Jian-ren
(Yah’an University,Yan’an 716000,China)
Abstract:This paper discusses a kind of technique of the mixed programming design between assembly language and C language.In pro・ g1_al g design,themixed programmingbetween assemblylanguage andClanguageisa goodmethodthat can exerttheir strong point・ In actual programn ̄ng,itmaytransfer assemblylanguage subprograminthemainprogramsofClanguage,andtl"811sferClanguage subpro・ graminthemain 理 of as ylanguage,anditmayinsert assemblylanguage sentenceinClanguage program.Inmixed pr0g m— mingof assemblylanguage andClanguage,some questionsthat should benoticedinclude paxametertransfer,module connection andtrans’
keil C语言与汇编语言混合编程
1. C语言中嵌入汇编
1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:
#pragma ASM
; Assembler Code Here
#pragma ENDASM
2、在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”
和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;
3、根据选择的编译模式,把相应的库文件(如 Small 模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件;
4、编译,即可生成目标代码。
来个实例吧:
#include
void main(void)
{
P2=1;
#pragma asm
MOV R7,#10
DEL:MOV R6,#20
DJNZ R6,$
DJNZ R7,DEL
#pragma endasm
P2=0;
}
2 . 无参数传递的函数调用
C51调用汇编函数
1.无参数传递的函数调用
先来个例子:其中example.c和example.a51为项目中的两个文件
***********************example.c***********************************************
extern void delay100();
main()
{delay100;}
***********************example.a51***********************************************
?PR?DELAY100 SEGMENT CODE; // 在程序存储区中定义段
MSP430单片机C语言和汇编语言混合编程刍议李悝(山东工艺美术学院,山东济南250300)摘要:主要结合C语言与汇编语言进行计算机程序编写设计中各自的特征优势,从C语言与汇编语言混合编程方法,以及混合语言进行MSP430单片机编程设计的具体过程等方面,进行MSP430单片机C语言与汇编语言混合编程的分析论述。关键词:MSP430单片机;C语言;汇编语言;编程设计;软件开发;分析中图分类号:TG84文献标识码:A文章编号:1673-1131(2013)01-0072-021C语言和汇编语言的特点以及混合编程方法1.1C语言和汇编语言编程设计的特点在进行计算机应用程序以及软件系统程序的编写设计应用中,C语言与汇编语言都是比较常用的程序语言代码。其中,使用汇编语言进行计算机编程设计应用,对于编写设计的计算机程序软件的生成效率比较高,并且汇编语言编写的程序命令执行速度比较快,但同时,使用汇编语言进行计算机程序软件的编写设计过程中,同样还具有编写程序的可读性不强的局限性;而使用C语言进行计算机应用程序以及软件的编写设计过程中,C语言进行编程设计应用的可移植性以及可读性特点,要比汇编语言编程设计中的可读性与可移植性高出许多,并且C语言在进行大型程序软件编写设计中编程设计周期也相对比较短,编程简单,但是C语言编程设计的时效性特征却不够明显,尤其是进行具有高时效性的软件以及程序编写设计中,C语言就不能对于编程设计的高时效性进行满足。1.2C语言与汇编语言混合编程的方法针对上述计算机程序与软件的开发设计中,C语言与汇编语言各自的编程优势与局限性,进行计算机软件产品的开发设计过程中,可以考虑将两种语言混合使用,进行软件产品的编程设计与开发实现。使用C语言与汇编语言混合编程的方法进行程序编写设计与软件产品的开发,不仅可以将两种不同编程语言的编程优势结合应用,并且对于编程设计中的局限性问题也有互补作用,具有编程设计速度快、效率高,并且灵活性比较强的特征。目前,使用C语言以及汇编语言进行计算机程序编写与软件产品的开发设计的方法,主要有三种。一种是,在进行编程设计时,分别使用C语言和汇编语言进行独立的程序编写,并且对于C语言以及汇编语言编写的程序,进行分开编译和汇编,形成不同语言编写形式的目标代码模块,然后在结合具体情况,将两种不同语言代码编程模块,进行调用或者是链接使用等。比如,使用汇编语言编写的FFT程序系统,也可以通过与C语言程序模块的链接,从C语言中进行程序调用实现。此外,还有两种混合编程方法,即在C语言编写程序中嵌入汇编语言程序,以及通过对C语言程序进行编译程汇编语言程序的形式,进行整合应用,都是混合编程中比较常用的编程方法。在混合编程设计过程中,可以根据实际情况,选择合适的编程方法进行编程设计应用。2MSP430单片机混合编程的规则分析2.1C语言编译器参数传递规则根据上文所述的C语言与汇编语言混合编程方法,以及目前进行MSP430单片机芯片软件开发设计的常用LAREm-beddedWorkbench软件系统,该系统在进行MSP430单片机芯片软件的开发设计过程中,同时具备对于C语言以及汇编语言程序的编辑、汇编以及编译功能,并且最终实现两种语言混合MSP430单片机软件编程设计实现。在LAR系统中C语言编译器进行单片机程序的编译过程中,主要通过高速暂存器进行C语言编译参数的传递应用,该寄存器功能在进行C语言编译程序的传递调用时不需要进行保护。此外,LAR系统中普通寄存器则主要是对C语言编译器的程序编译变量以及编译过程进行寄存保护实现,这组寄存器中的C语言编译信息,在进行混合编程调用时,需要进行保护,保护功能由C语言编译器自动实现进行。在LAR系统中,C语言编译器中的C语言编译程序数据参数在被调用过程中,没进行一次函数的调用,就会建立一个堆栈结构。并且C语言编译器参数进行传递调用中,调用函数参数与被调用函数参数之间的传递顺序是按照从右到左进行传递的。因此,C语言编译器在进行参数传递过程中,除了最左边的两个参数是使用寄存器进行传递的之外,其余参数信息都是按照堆栈结构方式进行传递实现,并且堆栈结构形成过程中,也是按照从右到左的顺序形成的。并且,在堆栈传递的过程中,如果传递函数中最左边的两个函数是结构或者是联合形式的,则也需要通过堆栈结构形式实现传递,对于C语言编译过程中中断的函数,会有C语言编译器自动保存在寄存器中。2.2汇编语言函数约定分析在LAR系统中,被C语言编程模块调用的汇编语言模块,通常不仅满足C语言编译器的参数传递规则,而且具有PUB-LPC调用入口标志,被C语言编程模块调用后作为外部函数进行应用实现。并且,对于汇编语言函数的存储有局部存储和中断函数存储两部分,分别按不同的要求标准进行存储调用实现。3MSP430单片机的混合编程进行MSP430单片机芯片软件的编程开发与设计中,在满足以上两种语言编程的要求之后,可以通过使用extren关键字的形式将C语言编程的源文件进行导出,并导入到被汇编语言编程源文件的导出标号中;然后使用PUBLPC关键字形式将汇编语言编程源文件导出到C语言编程源文件中;再用extren关键字的形式将汇编语言编程源文件导入到C语言编程源文件标号中;之后,将C语言编程源文件标号导出给汇编语言编程源文件,进行这一导出过程操作时,