1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      keil中匯編函數調用c51函數

      更新時間: 2006-02-27 15:12:38來源: 粵嵌教育瀏覽量:2941

        步在工程里多了一個被匯編調用的c51的函數文件(c51func.c),至于匯編函數還是先用c51編寫出主體(a51func.c),這樣匯編程序接口和段都交給編譯器處理,你只管在編譯成匯編代碼后按你的要求改寫匯編代碼就行了。

      例程如下:
      //main.c
      #include < reg51.h >

      #define uchar unsigned char
      #define uint unsigned int

      extern uint AFUNC(uchar v_achr,bit v_bflag);

      void main()
      {
      bit BFLAG;
      uchar mav_chr;
      uint mvintrslt;

      mav_chr=0xd4; BFLAG=1;
      mvintrslt=AFUNC(mav_chr,BFLAG);
      }

      //a51FUNC.c

      #define uchar unsigned char
      #define uint unsigned int

      extern uint CFUNC(uint);

      uint AFUNC(uchar v_achr,bit v_bflag) //c51寫的匯編函數,終要變成匯編代碼
      {
      uchar tmp_vchr;
      uint tp_vint;

      tmp_vchr=v_achr;
      tp_vint=(uint)v_bflag;

      return CFUNC(tp_vint); //這里調用一個c51函數
      }

      //c51FUNC.c

      #define uchar unsigned char
      #define uint unsigned int

      uint CFUNC(uint v_int) //被匯編函數調用c51函數
      {
      return v_int<<2;
      }

        第二步是按89852帖子的step2,3,4把用c51寫的(匯編)函數變成a51文件(今天我試了一下step3可以不要)例程編譯結果如下:
      ; .\a51func.SRC generated from: a51func.c
      NAME A51FUNC

      ?PR?_AFUNC?A51FUNC SEGMENT CODE
      ?DT?_AFUNC?A51FUNC SEGMENT DATA OVERLAYABLE
      ?BI?_AFUNC?A51FUNC SEGMENT BIT OVERLAYABLE
      EXTRN CODE (_CFUNC)
      PUBLIC ?_AFUNC?BIT
      PUBLIC _AFUNC

      RSEG ?DT?_AFUNC?A51FUNC
      ?_AFUNC?BYTE:
      tmp_vchr?042: DS 1

      RSEG ?BI?_AFUNC?A51FUNC
      ?_AFUNC?BIT:
      v_bflag?041: DBIT 1
      ; //a51FUNC.c
      ;
      ; #define uchar unsigned char
      ; #define uint unsigned int
      ;
      ; extern uint CFUNC(uint);
      ;
      ; uint AFUNC(uchar v_achr,bit v_bflag)

      RSEG ?PR?_AFUNC?A51FUNC
      _AFUNC: ;c51所寫的函數產生的匯編代碼從這里開始
      USING 0
      ; SOURCE LINE # 8
      ;---- Variable 'v_achr?040' assigned to Register 'R7' ----
      ; {
      ; SOURCE LINE # 9
      ; uchar tmp_vchr;
      ; uint tp_vint;
      ;
      ; tmp_vchr=v_achr;
      ; SOURCE LINE # 13
      MOV tmp_vchr?042,R7
      ; tp_vint=(uint)v_bflag;
      ; SOURCE LINE # 14
      MOV C,v_bflag?041
      CLR A
      MOV R6,A
      RLC A
      MOV R7,A
      ;---- Variable 'tp_vint?043' assigned to Register 'R6/R7' ----
      ; 這里說明R6,R7內容就是tp_vint
      ; return CFUNC(tp_vint);
      ; SOURCE LINE # 16
      LCALL _CFUNC ;這里調用了用c51寫的函數
      ; }
      ; SOURCE LINE # 17
      ?C0001:
      RET
      ; END OF _AFUNC

      END

        這個文件就是你的匯編函數所在文件,把函數里面的匯編代碼修改成你所需的匯編函數就ok了。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲综合精品伊人久久 | 亚洲国产人成中文字幕 | 亚洲中文字幕tⅴ | 日本在线精品视频观看 | 中文字幕一区二区日韩欧美 | 一级a一片久久久 |