导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ABOUTc程序调用汇编

* 54335: ABOUTc程序调用汇编

   guest 
guest发表的帖子 

 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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:PCI中TRDY信号问题请教各大虾:   PCI设备复位时,总线中的TR
[下一篇帖子]:到 www.hjhj.com去下