2014-03-26 68 views
1

我正試圖在ARM M4彙編中調用printf並遇到一些問題。目的是在R1中轉儲內容。該代碼是像我滿足的是,當把「output_string」地址爲R0以下ARM Cortex-M4:在彙編中調用printf時遇到了問題

.data 
    .balign 4 
output_string: 
    dcb "content in R1 is 0x%x\n", 0 
.... 
    .text 
.... 
    push {r0, r1} 
    mov r1, r0 
    ldr r0, =output_string 
    bl printf 
    pop {r0, r1} 

的問題,該值將添加一個額外的1。例如,如果符號「output_string」有一個值0x2000,R0將得到值0x2001。

我覺得這與THUMB/ARM模式有關。但是我已經在數據部分中聲明瞭「output_string」,爲什麼彙編器仍然將它作爲指令地址進行轉換?

或者是有一些更正式的方式來做這種in-assembly函數調用嗎?

+0

哪個工具鏈? – auselen

+0

我正在使用iar 6.73 –

回答

0

我認爲你應該使用:

ldr r0, =output_string 

=前綴是一個彙編的簡寫,使其加載一個任意的32位常數。請參閱this ARM Information Center頁面。

+0

您是否認爲'ldr r0,output_string'產生了一個奇怪的地址? – auselen

+0

感謝您指出,實際上,當我描述問題時,這是一個錯字。我實際上在我的代碼中使用「ldr r0,= output_string」,但加載到r0中的地址是「output_string + 1」。我在原始帖子中修改了它。 –