ABOUTc程序调用汇编
下面是C语言的主程序
#include <REG52.H>
#include <stdio.h>
extern char asm(char c,char b);
bit VAL;
void main (void)
{
char out=0x49;
char direct;
char key;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11.0592MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
VAL=0;
while (1)
{
key=getchar();
if(key=='R')
{
direct=0X01;
out=asm(out,direct); /*汇编子程序调用*/
printf ("Right rotate\n");
}
if(key=='L')
{
direct=0X02;
out=asm(out,direct); /*汇编子程序调用*/
printf ("Left rotate\n");
}
printf("%bx\n",out);
}
}
下面是汇编的子程序(文件名称asmtest.asm)
NAME ASM
?PR?_asm?ASMTEST SEGMENT CODE
?BI?_asm?ASMTEST SEGMENT BIT
PUBLIC ?_asm?BIT
PUBLIC _asm
RSEG ?BI?_asm?ASMTEST
?_asm?BIT:
VAL: DBIT 1
RSEG ?PR?_asm?ASMTEST
_asm:
MOV A,R7
MOV C,VAL
DJNZ R5,JP1
RRC A
JP1:
DJNZ R5,JP2
RLC A
JP2:
MOV 90h,A
MOV R7,A
MOV VAL,C
RET
END
以上是网上别人的C调用汇编一个示例
1)我看《单片及高级语言c51应用程序设计》中写
VAL: DBIT 1 的写法是 val dbit 1,不用冒号呀??
2)他的程序 他的程序为什么没有定义传递参数字节c和b,却定义传递数据位VAL,即:
?_asm?BYTE:
C: DS 1
B: DS 1
3)如果在 SEGMENT BIT 后面加OVERLAYABLE有什么问题,OVERLAYABLE起什么作用?
5)程序中的NAME ASM的作用是什么?
发表时间:2004年5月12日10:19:57