Keil C51和ASM混合编程的问题

romyks 2003-08-27 01:14:11
请问各位高手如何用汇编写供KEIL C51调用的子程序和函数.例如C的函数原型为
unsigned int fun(char v1,int v2,bit v3,long v4).
在SMALL COMPACT LARGE下如何用汇编写出这个函数,在C51中调用它时,又如何传递参数,还有一个问题,如何在汇编中直接使用在C51中定义的变量.
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qila 2003-09-17
  • 打赏
  • 举报
回复
不是仿真器支持,是要编译器支持,只要你有完整的c51编译器就可以了!!

到老古看看,我记得好象有的!
qila 2003-09-15
  • 打赏
  • 举报
回复
哎,徐爱均书上有很详细的说明,我原来也搞不清楚,但看了之后明白了,再看看keil中的a51文档,这两个东西网上都有的下载
BTW888 2003-09-15
  • 打赏
  • 举报
回复
借地盤問個問題.
仿真器支持c51和asm混合編程么
jhwjh 2003-09-15
  • 打赏
  • 举报
回复
下载的网址是多少啊?
gcai 2003-09-13
  • 打赏
  • 举报
回复
还有要注意堆栈
gcai 2003-09-13
  • 打赏
  • 举报
回复
不行,贴出来格式都变了

可以看看电子设计世界,Keil C51使用详解这个文章,关键是参数传递
函数名汇编就用 _fun 应该可以了



caijb2000@163.com
gcai 2003-09-13
  • 打赏
  • 举报
回复
C模块与汇编模块的接口较简单,分别用C51与A51对源文件进行编译,然后用L51将obj文件连接即可,关键问题在于C函数与汇编函数之间的参数传递问题,C51中有两种参数传递方法。

(1) 通过寄存器传递函数参数

最多只能有3个参数通过寄存器传递,规律如下表:



参数数目
char
int
long,float
一般指针

1

2

3
R7

R5

R3
R6 & R7

R4 & R5

R2 & R3
R4~R7

R4~R7
R1~R3

R1~R3

R1~R3




(2) 通过固定存储区传递(fixed memory)

这种方法将bit型参数传给一个存储段中:

?function_name?BIT

将其它类型参数均传给下面的段:?function_name?BYTE,且按照预选顺序存放。

至于这个固定存储区本身在何处,则由存储模式默认。

(3) 函数的返回值

函数返回值一律放于寄存器中,有如下规律:



return type
Registev
说明

bit
标志位
由具体标志位返回

char/unsigned char 1_byte指针
R7
单字节由R7返回

int/unsigned int 2_byte指针
R6 & R7
双字节由R6和R7返回,MSB在R6

long&unsigned long
R4~R7
MSB在R4, LSB在R7

float
R4~R7
32Bit IEEE格式

一般指针
R1~R3
存储类型在R3 高位R2 低R1


(4) SRC控制

该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM文件,再用A51进行编译。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧