悬而未决:在C51中子函数使用C51与汇编交互编程的问题

C51源文件选段如下:

void main()
{
 JN1 = 1;
 JN2 = 0;
 while(1)
 {
  JN1 = 0;
  Delay(1);

  JN1 = 1;
  Delay(1);

  
  
//  Pulse();
 }

}

void Delay(u8 counter)
{
 for( ; counter > 0; counter -- )
 {

//

//注意以下程序段在交互编译后生成的汇编SRC文件
// 

 #pragma asm
   NOP
   NOP
   NOP
   NOP
  #pragma endasm
 
 }
}

 

交互编译后生成的汇编SRC文件选段如下:

 RSEG  ?PR?main?MAIN
main:
 USING 0
   ; SOURCE LINE # 18
; {
   ; SOURCE LINE # 19
;  JN1 = 1;
   ; SOURCE LINE # 20
 SETB  JN1
;  JN2 = 0;
   ; SOURCE LINE # 21
 CLR   JN2
?C0001:
;  while(1)
   ; SOURCE LINE # 22
;  {
   ; SOURCE LINE # 23
;   JN1 = 0;
   ; SOURCE LINE # 24
 CLR   JN1
;   Delay(1);
   ; SOURCE LINE # 25
 MOV   R7,#01H
 LCALL _Delay
;
;   JN1 = 1;
   ; SOURCE LINE # 27
 SETB  JN1
;   Delay(1);
   ; SOURCE LINE # 28
 MOV   R7,#01H
 LCALL _Delay
;
;   
;   
; //  Pulse();
;  }
   ; SOURCE LINE # 33
 SJMP  ?C0001
; END OF main

;
; }
;
; void Delay(u8 counter)

 RSEG  ?PR?_Delay?MAIN
_Delay:
 USING 0
   ; SOURCE LINE # 37
;---- Variable 'counter?140' assigned to Register 'R7' ----
; {
   ; SOURCE LINE # 38
;  for( ; counter > 0; counter -- )
   ; SOURCE LINE # 39
?C0004:
 MOV   A,R7
 SETB  C
 SUBB  A,#00H
 JC    ?C0007
;  {
   ; SOURCE LINE # 40
;   counter ++;
   ; SOURCE LINE # 41
 INC   R7
;   #pragma asm
;    NOP
   NOP
;    NOP
   NOP
;    NOP
   NOP
;    NOP
   NOP
;   #pragma endasm
;  
;  }
   ; SOURCE LINE # 49
 DEC   R7
 SJMP  ?C0004
; }
   ; SOURCE LINE # 50
?C0007:

;

;注意,C51调用子函数后,没有执行NOP语句,而是直接返回主函数。

;
 RET   
; END OF _Delay

后记:

关于这个问题,暂无头绪,有知道答案的朋友请联系我,谢谢指教!

你可能感兴趣的:(编程,c,汇编,delay)