zoukankan      html  css  js  c++  java
  • 悬而未决:在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++(感谢waterwalk翻译)
    容器操作笔记
    如此理解面向对象编程
    C++初学者小细节(不定时更新)
    Sales_item 专题
    10步让你成为更优秀的程序员
    C++ PRIMER 笔记
    C++ 异常处理
    透明度 rgba 和 opacity 的区别
    盒模型
  • 原文地址:https://www.cnblogs.com/techstone/p/2664468.html
Copyright © 2011-2022 走看看