keil C调用汇编模块的例子

//第一个文件是C的内容
#include 

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中

你可能感兴趣的:(智能卡,汇编,c,delay,float,byte,存储)