[英]Why if I use immediately r0 the program doesn't work but if I LDR to r2 and then LDR to r0 it works?
[英]anybody knows why LDR r0,[r1, r2]! not working properly? (in thumb-2)
例如, LDR r0,[r1, #4]!
, r1
值將更改為r1+4
然后將值加載到r0
,但是,當我嘗試使用LDR r0,[r1, r2]!
, r1
沒變。
我正在使用TM4C123GH6PGE和CCS 5.4
根據體系結構參考手冊,當使用寄存器作為偏移時,不支持回寫。
當您嘗試組裝不可編碼的東西時,請使用一個更好的匯編程序,它不會以靜默方式扭曲您的代碼 。 或者,如果它確實打印了警告消息,請不要忽略警告!
.syntax unified
.thumb
LDR r0,[r1, #4]!
LDR r0,[r1, r2]!
LDR r0,[r1, r2]
用arm-none-eabi-as -mthumb -mcpu=cortex-m4 arm.S
:GAS說arm.S:4: Error: Thumb does not support register indexing with writeback -- 'ldr r0,[r1,r2]!'
而不是將它組裝成ldr r0,[r1, r2]
或其他東西。
( Cortex-M4支持整個Thumb2指令集 ,而gas知道這一點。我認為沒有辦法直接啟用Thumb2,任何選項的名稱都包含thumb2
,只有-mthumb
或.thumb
和-mcpu=CPU
支持Thumb2的-mcpu=CPU
或-march
。)
它在ARM模式下組裝良好,其中LDR r0,[r1, r2]!
是可編碼的:
0: e5b10004 ldr r0, [r1, #4]!
4: e7b10002 ldr r0, [r1, r2]!
8: e7910002 ldr r0, [r1, r2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.