最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊(cè) 首頁 | 行業(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語言程序設(shè)計(jì)(4)

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


混和編程


1)內(nèi)嵌匯編

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

語法格式

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é)尾占一行;注釋以“;”開始;可以用變量名訪問全局變量和C 函數(shù)中的局部變量。匯編語言結(jié)束前要保證堆棧內(nè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(參見后文)

};

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

}



2)混和調(diào)用

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

1常量和變量的相互訪問

C 語言函數(shù)訪問匯編語言常量、變量

在匯編語言源程序中采用匯編語法定義變量和常量;在C語言中把這些變量、常量聲明為外部常量變量,即可以用變量、常量名來訪問。匯編器和編譯器敏感段名的大小寫。

例如:

匯編源程序中

XDEF ASMData, ASMConst ;聲明 ASMData, ASMConst 可以在模塊外訪問

MyData: SECTION

ASMData: DS.W 1 ; 定義變量

MyConst: SECTION

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

在 C 語言源程序中

#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ù)段  */



匯編語言訪問C語言變量、常量

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

例如:

在C語言源文件中:

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

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

在匯編語言源文件中:

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)度超過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傳遞;



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


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)