1.在C中内嵌汇编语句
在#pragma asm 与#pragma endasm 中加入要内嵌的汇编语句
例子:
#include <reg52.h>
void main()
{
P0^1=1;
#pragma asm
汇编延时程序
#pragma endasm
P0^1=0;
}
2.C程序调用汇编
(1)C文件格式
C程序调用汇编函数之前必须先用extern对函数加以声明
例子:
#include<reg51.h>
extern void DLY1s();
void main()
{
P2=0xff;
DLY1s();
P2=0;
}
(2)汇编文件格式
用NAME定义模块名,PUBLIC声明为公共函数,RESG为汇编函数起始标志
例子1:
;;************************************ ;Delay time 1s ;;************************************ NAME DLY1s ;定义模块名 PUBLIC DLY1s ;声明为公共函数 SEG_DLY1s SEGMENT CODE ;在程序存储区中定义段 USING 1
RSEG SEG_DLY1s ;函数起始位置 ;;-------------------------- DLY1s: SETB RS0 MOV R4,#04H DLY100: MOV R3,#0FFH DLY101: MOV R2,#0FFH DLY102: NOP NOP DJNZ R2,DLY102 DJNZ R3,DLY101 DJNZ R4,DLY100 CLR RS0 RET ;;----------------------------------- END 例子2:
;;************************************ ;Delay time 10ms ;;************************************ NAME DLY10ms PUBLIC DLY10ms SEG_DLY10ms SEGMENT CODE USING 1
RSEG SEG_DLY10ms ;;-------------------------- DLY10ms: SETB RS0 MOV R3,#32H DLY101: MOV R2,#31H DLY102: NOP NOP DJNZ R2,DLY102 DJNZ R3,DLY101 CLR RS0 RET ;;----------------------------------- END
3.汇编调用C函数
(1)汇编文件格式
EXTRN CODE(function) ;声明所要调用的C函数
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV 30H,#5
MOV 31H,#6
CALL function ;调用C函数
MOV P2,32H
END
(2)C文件格式
#include <reg51.h>
#include <absacc.h>
void function()
{
DBYTE[0x32]=DBYTE[0x30]+DBYTE[0x31];
}
注:该方法简单且容易掌握,却有存储空间使用效率低的缺点,但在项目对存储空间需求较低的情况下,该方法是一个不错的选择。
4通过寄存器传递参数的混合调用
相互之间的调用必须满足上述C调汇编和汇编调C的规则
例子1 C调用汇编:
C文件:
#include <reg51.h> unsigned int ADD1(unsigned int a,unsigned int b) void main() { unsigned int c; c=ADD1(100,100); }
汇编文件:
NAME _ADD1 PUBLIC _ADD1 SEG_ADD1 SEGMENT CODE USING 1 RSEG SEG_ADD1 _ADD1: MOV A,R5 ADD A,R7 MOV R7,A MOV A,R4 ADDC A,R6 MOV R6,A RET END
注:当通过寄存器传递参数时在汇编里定义函数要用“_函数名”来定义函数
例子2 汇编调用C:
汇编文件:
EXTRN CODE(_function) ;声明所要调用的C函数,通过寄存器则函数为_function ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R7,#5 ;把所要传送的值放入响应寄存器单元 MOV R5,#6 CALL _function MOV A,R7 END
C文件: #include <reg51.h> unsigned char function(unsigned char a,unsigned char b) { return(a+b); }
如何C语言与汇编混编
最新推荐文章于 2022-10-21 09:17:11 发布