ARMC语言的使用方法.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8-3 全域變數和區域變數: 變數主要是用來讓程式設計者暫時存放數值的地方,當您有需要時可以將它取出或修改它。在C語言中變數可分成兩大類: 全域變數 宣告在程式開頭處即為函式外面,其範圍涵蓋所有函式。通常使用記憶體空間來存放。 區域變數 宣告在函式內部,都以是暫存器或堆疊來存放,其使用範圍僅限於函式內部。 以下為全域變數和區域變數的程式範例: //採用全域變數 int a, b, c; int main() { a=1; b=1; c = a+b; return 0; } //採用區域變數 int main() { int a, b, c; a=1; b=1; c = a+b; return 0; } 上面範例看起來程式長度一樣,但我們利用反組譯功能,您會發現多使用區域變數會提高程式的效能,其程式列表如下圖: 圖8-2 全域變數及區域變數效能比較 8-4 指標變數: 指標變數簡單來說是一種指位器,該變數儲存不是數值內容而是位址,我們可以使用*來宣告,使用如下: int *p; 在計算指標的大小時,可分成編譯階段得知或執行階段得知,編譯階段得知範例如下: int *p; p=p+1; 我們得知每次增加4位元組,因為指標的資料型態為整數佔四個位元組。但有些情形不易得知,例如: int *p; int i=4; p=p+i; 在此情形則需要執行階段才能獲知,則編譯器會使用ADD指令來處理。C語言最迷人地方在於它擁有指標功能,但也是它可怕的地方。圖8-3展示其可怕之處,從圖中您會得知指標居然指到位址0,而且我們把它改成1。從此您可以得知指標能修改記憶體的內容,但必須要非常小心,否則您會把重要的程式或資料給修改,造成不可預測的結果。 圖8-3 危險指標 圖8-4 指標一定要指向變數 圖8-4說明將變數指向變數,您會發現我們可以安全地變更p指標所指變數的內容,在圖中a變數為0xc000而p變數則為0xc004。 8-5 條件敍述: C語言條件敍述有if和switch兩種,if又可搭配else使用。if範例如下: if (a>b) c=a; else c=b; 上述程式說明當a>b條件成立時c變數指定為變數a的內容否則指定為變數b。當上面範例組譯成組合語言時,可以反組譯成下面: CMP r0,r1 ;if(a>b) … MOVGT r2,r0 ;..c=a.. MOVLE r2,r1 ;…else c=b.. 以下程式碼是C與組合語言混合寫法,詳細語法請參照8-8節。首先使用AXD模擬針對if….else的C語言程式碼如下,並進行C的反組譯如下圖8-5灰色字所示,執行結果,由於A小於B所以執行A加B的動作,結果在Global Variable 的值A等於9,B等於5。 int a=4,b=5; int Main(void) { if (a>b) L a=a-b; else a=a+b; return 0; 圖 8-5 if….else範例程式示意圖 接下來我們來看另一個敍述switch,其語法如下: switch (條件表示式) { case 常數1: 敍述區塊1;break; case常數2: 敍述區塊2;break; … case常數N: 敍述區塊N;break; default: 敍述區塊d;break; } ARM在支援switch指令採用,有時會採取跳躍表格方式處理,利用一表格來儲存各常數值的目的地,其指令樣板如下: ;r0 包含條件表示式的數值 ADR r1,JUMPTABLE ;取得跳躍表格的基值 CMP r0,#TABLEMAX ;表格最大值 LDRLS pc,[r1,r0,LSL#2] ;改變PC值來進行跳躍 B Exit L1: .. B Exit .. LN .. Exit .. 以下程式碼是C與組合語言混合寫法,詳細語法請參照8-8節。首先使用AXD模擬針對switch…case 的C語言程式碼如下,並進行C的反組譯如下圖8-6灰色字所示,執行結果,由

文档评论(0)

beautyeve + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档