當前位置:編程學習大全網 - 編程語言 - KEIL C51程序中如何嵌入匯編?

KEIL C51程序中如何嵌入匯編?

keil中匯編函數調用c51函數 [ycong_kuang]

在keil的寫法可參考89852帖子,具體如下:

與89852帖子相比,第壹步在工程裏多了壹個被匯編調用的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了。

建議參考 徐愛鈞,彭秀華所寫的《單片機高級語言C51windows環境編程與應用》或馬忠梅所寫的

《單片機的c語言應用程序設計》有關混合語言編程有關章節

  • 上一篇:浦桑尼克和科沃斯大對比,到底誰才值得購買?
  • 下一篇:英語字母插畫-插畫是怎麽畫的,
  • copyright 2024編程學習大全網