2014-02-08 2 views
1

Ive работал над чтением через какой-то другой код сборки рукоятки, созданный gcc, и я наткнулся на то, что мне не удалось найти в спецификации.Странное мгновенное значение в сборе в сборе

movw r0, #39784 
movt r0, 1 

Очевидно, что первый один движется значение 39784 в нижний 16bits или r0, а операнд в MOVT о «1» является странным, потому что он не имеет хэш перед ним, и я был под впечатлением, что непосредственное значениям нужен хеш. Это как-то необязательно в определенных ситуациях? или я пропускаю что-то волшебное?

+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

Я не знаю, что существует конвенция. Конечно, вы должны быть последовательны. –

Смежные вопросы