51 C语言与汇编语言混编
来源:互联网 发布:物流软件系统 编辑:程序博客网 时间:2024/06/06 07:50
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);
}
- 51 C语言与汇编语言混编
- 51 C语言与汇编语言混编
- c语言与汇编语言混编注意事项及参数传递方法
- c语言与汇编语言:
- c语言与汇编混编写法
- 如何C语言与汇编混编
- 基于SDL的四则运算即C语言和汇编语言的混编实验设计总结
- (四)ARM中通信协议的总结,以及c语言和汇编语言的混编
- 通过51对比C语言与汇编语言的差别
- c++与c混编
- C++与C混编
- Lua与C混编
- 汇编语言与C语言的混合使用
- 汇编语言与C语言的混合使用
- 汇编语言与C语言的混合使用
- C语言与汇编语言的相互调用
- 汇编语言与C语言的接口技术
- keil C语言与汇编语言混合编程
- 针对不同浏览器预览上传文件的处理方式
- C# 基础知识系列]专题六:.net WinForm 控件的事件委托剖析
- 云计算:为什么说存储是云计算发展瓶颈之一?虚拟化是解决之道!
- redis桌面管理工具 redis-desktop-manager使用指南
- Leedcode 19 Remove Boxes
- 51 C语言与汇编语言混编
- stm32 can基础测试例程
- #python学习笔记#使用python爬取拉勾网职位信息(二):爬取数据
- form标签和其内部的button标签的关系
- 《Effective C++》第七章:模板与泛型编程
- Android 中的MVC模式
- Java 模拟登录新浪微博(Cookie)
- 搭建百万级别邮件发送平台
- 《Java编程思想》学习笔记9——对象序列化