keil C调用汇编模块的例子

//第一个文件是C的内容
#include <reg51.h>

extern void DELAY(unsigned int delaytime);//对汇编函数的声明

void main(void)
{
while(1)
{
                P0=0x00;
                DELAY(0xFF);//在这里调用了汇编
                P0=0xFF;
     DELAY(0xFF);
}

}

//第二个文件是汇编的内容
?PR?_DELAY SEGMENT CODE 
PUBLIC _DELAY
RSEG ?PR?_DELAY
_DELAY:                    //注意这里有个“_”下划线是不可缺的
USING 0
?C0001:
MOV   A,R7
DEC   R7
MOV   R4,AR6
JNZ   ?C0004
DEC   R6
?C0004:
ORL   A,R4
JNZ   ?C0001
?C0003:
RET  
END
这两个添加都keil工程里面就可以了,可简单了,希望新手少走点弯路
其它的知识:
函数名的转换规律
主函数中的声明 汇编符号名 说明
Viod func(void) FUNC 无参数传递或不含寄存器的函数名不作转变转入目标文件中,名字只是简单地转为大写形式
Void func(char) _FUNC 带寄存器参数的函数名,前面加“_”前缀,它表明这类函数包含寄存器内的参数传递
Void func(void) reentrant _?FUNC 对于重入函数,前面加“_?”前缀,它表明该函数包含栈内才参数传递
命名转换规律
存储区 命名转换
CODE  ?PR?CO
XDATA ?XD
DATA ?DT
BIT ?BI
PDATA ?PD
接收参数寄存器
参数序号 Char Int Long,float 通用指针
1 R7 R6&R7 R4~R7 R1~R3
2 R5 R4&R5 - -
3 R3 R2&R3 - -
返回值类型与寄存器对照
返回值类型 寄存器 说明
Bit C(标志位) 由具体标志位返回
Char/unsigned char 1byte指针 R7 单字节由R7返回
int/unsigned int 2byte指针 R6&R7 双字节由R6和R7返回,高位在R6中,低位在R7中
Long、unsigned long R4~R7 高位在R4中,低位在R7中
Float R4~R7 32bit IEEE格式,指数和符号位在R7中
通用指针 R1~R3 存储类型在R3中,高位在R2中,低位在R1中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值