2014-02-08 41 views
1

我一直致力於通過gcc生成的一些不同的arm彙編代碼進行閱讀,並且我遇到了一些我在規範中找不到的東西。ARM組裝中奇怪的立即值

movw r0, #39784 
movt r0, 1 

顯然,第一個是價值39784移動進入底部16位或R0,而是「1」 MOVT的操作數是奇數,因爲它不前,它有亂碼,我的印象是,立即下值需要散列。在某些情況下它是否可選?或者我錯過了一些神奇的東西?

+0

這是一個常見的話題; ARM彙編器中的常量。這裏是一個[很好的ARM博客](http://community.arm.com/groups/processors/blog/2010/07/27/how-to-load-constants-in-assembly-for-arm-architecture)主題。他們總是使用'​​哈希'。對於其他ARM彙編程序來說,使用散列可能更具可移植性。然而,'gcc'和'gas'是親密的。我不一定會使用編譯器輸出的內容作爲編寫彙編程序的指南。看看編譯器在做什麼是很有用的。 –

回答

2

GNU彙編程序在ARM彙編代碼的立即數操作數之前不需要一個八進制表示。您的印象不正確。

+0

謝謝!你有沒有理由不使用它?什麼是約定? – Whyrusleeping

+0

我不知道有一個公認的約定。不過,你當然應該保持一致。 – 2014-02-09 00:01:34