久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4564|回復: 0
打印 上一主題 下一主題
收起左側

Keil C51匯編混合編程詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:59306 發表于 2014-2-27 14:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、在C51中嵌入匯編

在這個例子里,闡述了編寫c51程序調用匯編函數的一種方法,這個外部函數的入口參數是一個字符型變量和一個位變量,返回值是一個整型變量。例中,先用c51寫出這個函數的主體,然后用SRC控制指令編譯產生asm文件,進一步修改這個asm文件就得到我們所要的匯編函數。該方法讓編譯器自動完成各種段的安排,提高了匯編程序的編寫效率。

step1. 按寫普通c51程序方法,建立工程,在里面導入main.c文件和CFUNC.c文件。相關文件如下:

//main.c文件
#include < reg51.h >
#define uchar unsigned char
#define uint unsigned int
extern uint AFUNC(uchar v_achr,bitv_bflag);
void main()
{
   bit BFLAG;
   uchar mav_chr;
   uint    mvintrslt;
   mav_chr=0xd4; BFLAG=1;
   mvintrslt=AFUNC(mav_chr,BFLAG);
}
//CFUNC.c文件
#define uchar unsigned char
#define uint unsigned int
uint AFUNC(uchar v_achr,bit v_bflag)
{
   uchar tmp_vchr;
   uint  tp_vint;
   tmp_vchr=v_achr;
   tp_vint=(uint)v_bflag;
   return tmp_vchr+(tp_vint<<8);
}

step2. Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Optionsfor ...”,點擊右邊的“Generate Assembler SRC File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態;

step3. 根據選擇的編譯模式,把相應的庫文件(如Small 模式時,是 Keil\C51\Lib\C51S.Lib)加入工程中,該文件必須作為工程的最后文件;

step4. build這個工程后將會產生一個CFUNC.SRC的文件,將這個文件改名為CFUNC.A51(也可以通過編譯選項直接產生CFUNC.A51
      件),然后在工程里去掉庫文件(如C51S.Lib)CFUNC.c,而將CFUNC.A51添加到工程里。

//CFUNC.SRC文件如下
.\CFUNC.SRC generated from: CFUNC.c
NAME CFUNC
?PR?_AFUNC?CFUNC     SEGMENT CODE
?BI?_AFUNC?CFUNC     SEGMENT BIT OVERLAYABLE
   PUBLIC    ?_AFUNC?BIT
   PUBLIC    _AFUNC
   RSEG  ?BI?_AFUNC?CFUNC
?_AFUNC?BIT:
   v_bflag?041:   DBIT   1
; #define uchar unsigned char
; #define uint unsigned int
;
; uint AFUNC(uchar v_achr,bit v_bflag)
   RSEG  ?PR?_AFUNC?CFUNC
_AFUNC:
   USING    0
           ; SOURCE LINE # 5
;---- Variable 'v_achr?040' assigned toRegister 'R7' ----
; {
           ; SOURCE LINE # 6
;    uchar tmp_vchr;
;    uint    tp_vint;
;
;    tmp_vchr=v_achr;
           ; SOURCE LINE # 10
;---- Variable 'tmp_vchr?042' assigned toRegister 'R5' ----
   MOV      R5,AR7
;    tp_vint=(uint)v_bflag;
           ; SOURCE LINE # 11
   MOV      C,v_bflag?041
   CLR      A
   RLC      A
;---- Variable 'tp_vint?043' assigned toRegister 'R6/R7' ----
;    return tmp_vchr+(tp_vint<<8);
           ; SOURCE LINE # 12
   MOV      R6,A
   MOV      R4,#00H
   CLR      A
   ADD      A,R5
   MOV      R7,A
   MOV      A,R4
   ADDC     A,R6
   MOV      R6,A
; }
           ; SOURCE LINE # 13
?C0001:
   RET
; END OF _AFUNC
   END

step5. 檢查main.c的“GenerateAssembler SRC File”和“Assemble SRC File”是否有效,若是有效則點擊使檢查框變成無效狀態;再次build這個工程,到此你已經得到匯編函數的主體,修改函數里面的匯編代碼就得到你所需的匯編函數了。






二、 keil中直接嵌入匯編

step1、在C文件中要嵌入匯編代碼片以如下方式加入匯編代碼:
#pragma ASM
; Assembler Code Here
#pragma ENDASM

step2、在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Optionsfor ...”,點擊右邊的“Generate Assembler SRC File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態;

step3、根據選擇的編譯模式,把相應的庫文件( Small 模式時,是Keil\C51\Lib\C51S.Lib)加入工程中, 該文件必須作為工程的最后文件;

step4、編譯,即可生成目標代碼。




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在 | 久久精品无码一区二区三区 | 亚洲毛片在线观看 | 伊人久久综合 | 精品少妇一区二区三区在线播放 | 国产激情一区二区三区 | 国产成人免费在线 | 男女视频在线免费观看 | 精品视频久久久 | 久久久女 | 91久久久久久| 国产精品久久久久久久岛一牛影视 | 久久久女 | 欧美成人免费在线视频 | 日韩视频区 | 欧美日韩一区二区三区在线观看 | 国产 日韩 欧美 制服 另类 | 久草视频观看 | 日韩午夜精品 | 四虎在线视频 | 九九热在线视频 | 久久草在线视频 | 成人夜晚看av | 欧美在线视频a | 国产精品免费av | 亚洲成人精品在线 | 久久亚洲精品国产精品紫薇 | 免费久久久久久 | 精品国产乱码久久久久久影片 | 中文字幕一区在线观看视频 | 日韩欧美一区在线 | 欧美日韩中文在线 | 日韩在线免费播放 | 一区二区三区四区在线视频 | 亚洲成人自拍 | 草草影院ccyy| 免费久久久久久 | www狠狠干| 欧美一区二区三区大片 | 黄色网址av | 美日韩中文字幕 |