您的位置 首页 被动

C51与汇编语言混合编程之一

1、函数内部混合编程若想在C语言函数内部使用汇编语言,应使用以下Cx51编译器控制命令:#pragmaasm;;;Assemblycode#pragmaendasm功能…

1、函数内部混合编程

若想在C言语函数内部运用汇编言语,应运用以下Cx51编译器操控指令:

#pragma asm

;;;Assembly code

#pragma endasm

功用效果:

asm和endasm指令用于将其符号的汇编程序合并到.SRC文件中。这个带有asm和endasm块符号的源程序可看作是在线嵌入式汇编程序。从这点来说,此指令有些类似于#define指令。

详细完成:

(1)编译器设置及SRC文件的发生

.SRC文件在指令行编译形式下是运用SRC编译器操控指令发生的,在IDE环境中可认为需求发生SRC文件的C源文件设置特定选项:

l 右键单击Project Workspace下的文件标签

l 挑选Options for file … 项,翻开Options – Properties 页。

l 选中Generate Assembler SRC file 项

l 选中Assembler SRC file项

(2)增加库文件

依据挑选的编译形式,把相应的库文件增加到工程下面,如在”small”形式下,需将”keil\c51\lib\c51s.lib”文件参加工程中。在Keil装置目录下的\C51\LIB\ 目录的LIB 文件如下:

C51S.LIB – 没有浮点运算的 Small model
C51C.LIB – 没有浮点运算的 Compact model
C51L.LIB – 没有浮点运算的 Large model
C51FPS.LIB – 带浮点运算的 Small model
C51FPC.LIB – 带浮点运算的 Compact model
C51FPL.LIB – 带浮点运算的 Large model

若未增加此库文件,则会提示” UNRESOLVED EXTERNAL SYMBOL ”正告。

如上设置后,编译,IDE会生成汇编源文件(.SRC)并由汇编器将此文件转化成方针文件(.OBJ)。

留意事项:

(1) 此刻在汇编言语中虽能够加标签,以履行一些跳转类指令,但要留意不要与编译器发生的其他标签相同。

(2) 在遵从了Cx51参数的调用规矩后,如在向该函数传递一char数时,编译器会将其编译成经过R7传递,此刻在汇编言语若直接调用R7,会呈现界说的变量(形参)未调用正告。

2、函数外部混合编程

详细完成:

若要将一完好的函数编写为汇编言语,并可被其它函数调用,此刻能够遵从如下进程:

(1) 源文件的树立

新建一C源文件如test.c,将其参加工程中,并写出要完成函数的的哑函数(即写出函数名及形参,不必给出详细完成,但最好写出简略调用形参的代码,使编译器不提示 ”界说的变量未被调用”的正告)。

(2) 从上”详细进程”之(1)。

(3) 从上”详细进程”之(2)。

(4) 编译文件,将test.c 从工程中移除,将生成的test.src文件改名,如test.a51。

(5) 将test.a51参加工程, 并在其内部书写详细要完成的汇编代码。

(6) 从头编译全体文件即可。

留意事项:

(1) 调用前一定要在所调用的文件内部声明该函数的存在,写法应同汇编言语的C函数完成相同,即test.c 中的函数称号。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/276677.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部