关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题
生活随笔
收集整理的這篇文章主要介紹了
关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??在編譯下面一段代碼時:
??經調試發現: ? ?如果不加NOP或align 4的話產生的Test的標號地址就會產生錯誤,而LDRD 指令操作的地址必須是4字節對節的,如果使用的地址不是四字節對齊,那么程序就會產生異常,所以程序就跑飛了。 ?那么為什么不加NOP或align 4的話Test標號地址就會產生錯誤呢? ?來看一段手冊上的話:
也就是說DCD是需要標號地址按字對齊的,如果你沒有對齊就可以看到如下的編譯警告:test.asm(18): warning: A1581W: Added 2 bytes of padding at address 0x1a
這說明編譯器會自動添加兩個字節來幫你對齊,數據分布情況和下面很相似:
?1.即使加了兩個字節那么Test的標號地址依然不是四字節對齊。
?2.這兩個字節的零會被編譯器當作指令來處理的,這也就是說Test標號會被編譯器來當作代碼標號來處理,看到了吧,我們的數據編譯器一插手就變成代碼了,實在無奈的很。再來看一段手冊上的講解:
?? ? ? ? ? ? ? ? ? ? ?
轉載于:https://www.cnblogs.com/findstr/archive/2011/11/05/2803707.html
總結
以上是生活随笔為你收集整理的关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技大厂裁员潮还在继续?推特裁减部分广告
- 下一篇: 推特又裁员:裁减部分广告销售员工