日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题

發布時間:2023/12/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??在編譯下面一段代碼時:

STACK_TOP EQU 0x20002000AREA Reset,CODE,READONLYDCD 0x20002000DCD StartENTRY ; CODE16 Startldr r2,=TestLDRD r0,r1,[r2,#4]LDRD r0,r1,[r2]LDRD r0,r1,[r2] ; movs r0,r0 ; NOP ; align 4 TestDCD 0x12345678END我發現,如果加上NOP或align4,程序就不會跑飛,否則程序就跑飛了。

??經調試發現: ? ?如果不加NOP或align 4的話產生的Test的標號地址就會產生錯誤,而LDRD 指令操作的地址必須是4字節對節的,如果使用的地址不是四字節對齊,那么程序就會產生異常,所以程序就跑飛了。 ?那么為什么不加NOP或align 4的話Test標號地址就會產生錯誤呢? ?來看一段手冊上的話:
也就是說DCD是需要標號地址按字對齊的,如果你沒有對齊就可以看到如下的編譯警告:test.asm(18): warning: A1581W: Added 2 bytes of padding at address 0x1a
這說明編譯器會自動添加兩個字節來幫你對齊,數據分布情況和下面很相似:

這說明編譯器會自動添加兩個字節來幫你對齊,數據分布情況和下面很相似:STACK_TOP EQU 0x20002000AREA Reset,CODE,READONLYDCD 0x20002000DCD StartENTRY ; CODE16 Startldr r2,=TestLDRD r0,r1,[r2,#4]LDRD r0,r1,[r2]LDRD r0,r1,[r2] ; movs r0,r0 ; NOP ; align 4 Testdcb 00 ;編譯器自動添加dcb 00 ;編譯器自動添加,而movs r0,r0的機器碼就是0x0000,會被 ;編譯器翻譯成movs r0,r0,不是當作數據0x0000DCDU 0x12345678END也許看來這樣就完美了,但是程序依然會跑飛。原因有兩點:
?1.即使加了兩個字節那么Test的標號地址依然不是四字節對齊。

?2.這兩個字節的零會被編譯器當作指令來處理的,這也就是說Test標號會被編譯器來當作代碼標號來處理,看到了吧,我們的數據編譯器一插手就變成代碼了,實在無奈的很。再來看一段手冊上的講解:

?? ? ? ? ? ? ? ? ? ? ?

也就是實際上LDR r2,=Test執行后,r2=Test+1這也解釋了為什么不加NOP或align 4的話r2=0x8000017而加了NOP或Align 4就r2=0x8000018。那么來看一下,加nop或align 4后的效果:STACK_TOP EQU 0x20002000AREA Reset,CODE,READONLYDCD 0x20002000DCD StartENTRY ; CODE16 Startldr r2,=TestLDRD r0,r1,[r2,#4]LDRD r0,r1,[r2]LDRD r0,r1,[r2] ; movs r0,r0; 如果是align 4會被加兩個節字的movs r0,r0(機器碼為0x0000); 如果是nop 則會被加上nop的機器碼(0xBF00); NOPalign 4 TestDCDU 0x12345678END需要說明的是,我總是把align 和nop 放在一塊說,并不是說nop也具有對齊作用。是因為加上nop后剛好可以使Test標號地址放在4字節對齊的其他地方。在其他地方,nop也許并無此作用。

轉載于:https://www.cnblogs.com/findstr/archive/2011/11/05/2803707.html

總結

以上是生活随笔為你收集整理的关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。