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 中的函数称号。