音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(4)

作者:JerryBJ 欄目:單片機(jī)
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(4)
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺(jué)得寫(xiě)得很好,基本上涵蓋了使用C語(yǔ)言對(duì)HC(S)08微控制器編程的基本知識(shí),推薦給大家。把這篇文章轉(zhuǎn)貼過(guò)來(lái),沒(méi)有經(jīng)過(guò)原文作者和MCU123的允許,希望他們不會(huì)生氣。若作者和MCU123對(duì)此感到不適,請(qǐng)即告知,我們立刻刪除此轉(zhuǎn)貼。原文鏈接如下:
http://www.mcu123.com/news/Article/uc/Motorola/200608/255.html


混和編程


1)內(nèi)嵌匯編

HCS08 C 語(yǔ)言提供一個(gè)很有用的功能,內(nèi)嵌匯編。凡是C語(yǔ)言程序段能出現(xiàn)的地方匯編語(yǔ)言源程序都可以出現(xiàn),但是匯編語(yǔ)言源程序必需位于一個(gè)C語(yǔ)言函數(shù)中。

語(yǔ)法格式

1) "asm" <匯編指令> ";" ["/*" 注釋 "*/"]

雙引號(hào)中的內(nèi)容為關(guān)鍵字,方括號(hào)中的內(nèi)容為可選項(xiàng)。

例如:

asm sta COPCTL;  /* 喂狗 */

2) "asm" "{"

<匯編指令 1> [";" 注釋]

<匯編指令 2> [";" 注釋]

"}"

要求:大括號(hào)內(nèi)每條匯編指令占一行;標(biāo)號(hào)以“:”結(jié)尾占一行;注釋以“;”開(kāi)始;可以用變量名訪問(wèn)全局變量和C 函數(shù)中的局部變量。匯編語(yǔ)言結(jié)束前要保證堆棧內(nèi)容與匯編開(kāi)始前一致。

例如:用內(nèi)嵌匯編方法實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符的個(gè)數(shù)。

int strlen (CHAR *str)

/*** 'str' 參數(shù)由堆棧傳遞. 函數(shù)返回字符串'str'的長(zhǎng)度

假定字符串的長(zhǎng)度小于256!

*/

{

asm {

LDHX str     ; 裝入指針

CLRA          ; 初始化計(jì)數(shù)器

BRA TEST     ; 跳到TEST

loop:

AIX #1       ; 指針加1

INCA         ; 計(jì)數(shù)器加1

TEST:

TST 0,X     ; 字符串是否結(jié)束?

BNE loop    ; 下一字符

CLRX         ; 返回值在 X:A(參見(jiàn)后文)

};

/* 這里可以繼續(xù)寫(xiě) C 語(yǔ)言程序段 */

}



2)混和調(diào)用

混和調(diào)用指的是C語(yǔ)言函數(shù)調(diào)用匯編語(yǔ)言函數(shù)和匯編語(yǔ)言函數(shù)調(diào)用C語(yǔ)言函數(shù)。實(shí)現(xiàn)混和調(diào)用要解決兩個(gè)問(wèn)題1:常量和變量的相互訪問(wèn);2調(diào)用協(xié)議

1常量和變量的相互訪問(wèn)

C 語(yǔ)言函數(shù)訪問(wèn)匯編語(yǔ)言常量、變量

在匯編語(yǔ)言源程序中采用匯編語(yǔ)法定義變量和常量;在C語(yǔ)言中把這些變量、常量聲明為外部常量變量,即可以用變量、常量名來(lái)訪問(wèn)。匯編器和編譯器敏感段名的大小寫(xiě)。

例如:

匯編源程序中

XDEF ASMData, ASMConst ;聲明 ASMData, ASMConst 可以在模塊外訪問(wèn)

MyData: SECTION

ASMData: DS.W 1 ; 定義變量

MyConst: SECTION

ASMConst: DC.W $44A6 ; 定義常量

在 C 語(yǔ)言源程序中

#pragma DATA_SEG MyData /* 定義變量段 */

extern int ASMData; /* 變量 ASMData 是外部模塊聲明的 */

#pragma DATA_SEG DEFAULT /* 返回默認(rèn)變量段 */

#pragma CONST_SEG MyConst /* 定義常數(shù)段 */

extern const int ASMConst; /* 常量 ASMConst 是外部模塊聲明的*/

#pragma CONST_SEG DEFAULT /*返回默認(rèn)常數(shù)段  */



匯編語(yǔ)言訪問(wèn)C語(yǔ)言變量、常量

在C語(yǔ)言中用標(biāo)準(zhǔn)格式定義常量、變量,在匯編語(yǔ)言中聲明這些常量變量是外部定義即可。

例如:

在C語(yǔ)言源文件中:

unsigned int CData; /* 定義變量 */

unsigned const int CConst; /* 定義常量 */

在匯編語(yǔ)言源文件中:

XREF CData ; 外部聲明的變量

XREF CConst; 外部聲明的常量

使用:

LDD CConst

STD CData

2)調(diào)用協(xié)議

調(diào)用協(xié)議,即函數(shù)參數(shù)傳遞和返回值的協(xié)議。對(duì)于HC08和HCS08調(diào)用協(xié)議是不同的。

HC08 參數(shù)傳遞:調(diào)用者函數(shù)把所需參數(shù)從左到右依次入棧,調(diào)用結(jié)束后由調(diào)用者函數(shù)從堆棧中清除傳遞的參數(shù)。在函數(shù)傳遞的是值參數(shù)的情況下,如果最后一個(gè)參數(shù)長(zhǎng)度為2字節(jié),則用X:A寄存器對(duì)傳遞;如果最后一個(gè)參數(shù)長(zhǎng)度為1字節(jié)且倒數(shù)第2個(gè)參數(shù)長(zhǎng)度超過(guò)1字節(jié),則最后一個(gè)參數(shù)用寄存器A傳遞;如果最后一個(gè)參數(shù)長(zhǎng)度為1字節(jié)且倒數(shù)第2個(gè)參數(shù)長(zhǎng)度也是1字節(jié),則最后一個(gè)參數(shù)用寄存器X傳遞,倒數(shù)第2個(gè)參數(shù)用寄存器A傳遞;



參與討論
昵稱(chēng):
討論內(nèi)容:
 
 
相關(guān)帖子
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(3)
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(1)
各路高手請(qǐng)推薦學(xué)習(xí)MPC852的好資料
冷火系列與ARM系列相比,有那些優(yōu)勢(shì)?
請(qǐng)問(wèn)下,coldfire有沒(méi)有這樣的CPU
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)