2016-06-23 8 views
0

Я изменил код сборки из игры на платформе ARM, и я нашел инструкцию cmp r2,0h. Если вы ищете онлайн-инструкцию для cmp, я заметил, что это действительно сравнило бы значение в r2 с 0 (pseudo-C будет r2==0, верно?) Так что мне было интересно, имеет ли значение 0h то же значение? 0h равно 0 (unsigned int)?Сборка руки: Является ли cmp r2,0h таким же, как cmp r2, # 0?

В общем, я нахожу «h» после смещения адресов, а также после значений, поэтому я думаю, что это какой-то флаг или что-то в этом роде? Например, после инструкции cmp есть sub r2, r2,1h

Большое спасибо.

PS: Я не буду использовать не $ GBA отладчик, если это имеет значение

+3

Это, конечно, не архитектурный синтаксис для постоянного, но в конечном итоге дизассемблеры могут свободно отображать вещи, как они хотят. Я не помню, чтобы я когда-либо смотрел на нет gba конкретно, но я был бы невероятно удивлен, если бы это означало что-то другое, кроме шестнадцатеричного значения (например, 10h == 0x10 == 16). – Notlikethat

+0

@ Не заметите, что вы имеете в виду, что «h» означает что-то вроде «hex»? поэтому 1h будет 1 в шестнадцатеричном виде, которое равно 0x1. Следовательно, 0h == 0x0 == 0 правильно? Кажется, это решение. –

+2

http://www.keil.com/support/man/docs/uv4/uv4_db_exp_constants.htm –

ответ

0

Как пояснил @Notlikethat, суффикс ч, кажется, стоит за «гекс» (шестнадцатеричное). Адреса (то есть 02035000h будет 0x02035000), а значения (10h будут 0x10) без $ gba использовать этот суффикс.

+1

Ассемблеры DOS/Windows x86 (например, MASM/TASM), [поддерживают только суффиксу 'h'] (http://stackoverflow.com/a/37152498/224132) для шестнадцатеричных констант, а не' 0xDEADBEEF' (поддерживается портативной x86 монтажники). Таким образом, предположительно, этот выбор был сделан кем-то, кто считал, что он будет более знаком с программистами asm, используемыми для инструментов DOS/Windows. –