第八章arm语言的使用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章arm语言的使用

本章節將介紹ARM C語言程式設計概念,透過對本文的閱讀,希望讀者能瞭解ARM微處理器支援的C語言的使用方法,我們會搭配反組譯的功能,讓讀者更瞭解ARM是如何來支援高階語言的運作。 本章的主要內容有: - 抽象化概念 - 運算子 - 區域變數/全域變數 - 指標運算 - 迴圈/條件判斷 - 傳址呼叫和傳值呼叫 8-1 抽象化概念: 當讀者熟讀前面幾章後,應該對ARM有深刻的印象,在指令集您會感覺到ARM的強大功能,單一指令可以同時完成許多動作,然而使用組合語言來撰寫程式,您一定倍感辛苦,而特別是靈活運用條件執行﹝Conditional Execution﹞,把每一道指令添增了16種變化,相信您必須具備孫悟空72變化能力才能順利駕馭。本章將說明如何使用高階語言來撰寫ARM應用程式。在這之前先讓我們來看看組合語言及C語言抽象化的概念。 組合語言層次的抽象化 程式設計師直接以指令來撰寫組合語言的程式,您必須熟悉指令格式、定址方式、暫存器及記憶體空間等觀念。通常組合言的指令和機器指令是採1對1的關係,在指令格式中要特別注意條件執行,若能妥善運用不但能增強管線的效能而且程式也變得更加精簡,程式長度有可能比高階語言還要短。ARM指令集可分成ARM及THUMB兩種,前者為32位元而後者則為16位元。通常對於要求效能可以使用32位元,但對於空間及節能等需求時則可以考慮將部份程式用THUMB指令撰寫。 高階語言層次的抽象化 高階語言允許程式設計師以跳脫機械層級的思考來撰寫程式。高階語言和機器語言間已不是1對1的關係,對高階語言的程式設計師而言,不見得要熟悉ARM指令或暫存器等配置。所以有很多高階語言程式設計師並不見得對ARM機器有很深的瞭解。然而建議讀者要清楚瞭解ARM的硬體結構,在撰寫C語言程式時,能多考慮到ARM機器的特質,如此才能事半功倍。例如:過長的迴圈將會使快取記憶體(Cache)無法發揮它的長才。 8-2 運算子: C語言提供強大的運算子來處理運算工作,運算子可分成一元運算子﹝Unary Operators﹞、二元運算子﹝Binary Operators﹞、及三元運算子﹝Ternary Operators﹞,依其功能可將運算子可分成下列: 1. 算術運算子﹝Arithmetic Operators﹞ 2. 關係運算子﹝Relational Operators﹞ 3. 邏輯運算子﹝Logical Operators﹞ 4. 指定運算子﹝Assignment Operators﹞ 5. 增減運算子﹝Increments and Decrement Operators﹞ 6. 條件運算子﹝Conditional Operators﹞ 7. 位元運算子﹝Bitwise Operators﹞ 8. 特殊運算子﹝Special Operators﹞ 8-2.1 算術運算子 算術運算子可分成:加法、減法、乘法、除法、及取餘數,分別用+、-、*、/、及%來表示。詳如下表: 以下為運算子的範例: int main() { int a,b,c; a=1; b=2; c=a+b; return 0; } 其反組譯程式如下: 1 int main() 2 { 3 int a,b,c; 4 a=1; main [0xe3a01001] * mov r1,#1 5 b=2; 000080ac [0xe3a02002] mov r2,#2 6 c=a+b; 000080b0 [0xe0813002] add r3,r1,r2 7 return 0; 000080b4 [0xe3a00000] mov r0,#0 8 } 000080b8 [0xe1a0f00e] mov pc,r14 接下來我們來觀察,ARM對於除法的支援情形,以下是除法範例的反組譯程式列表: 3 int a,b,c; 4 a=6; 000080ac [0xe3a04006] mov r4,#6 5 b=2; 000080b0 [0xe3a05002] mov r5,#2 6 c=a/b

文档评论(0)

181****7127 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档