2012-02-21 3 views
0

Как я могу сделать «истинным» это istrution?Ассемблер патч сравнить конструкции и ветвь

CMP    R0, #0 

То, что я хочу сделать, это, например, делают

CMP R0,R0 or CMP #0, #0 

00 28 является ОП-кодом. Я стараюсь делать 28 28 без каких-либо результатов! Другой вопрос , что это за образования BNE.W? что это последний W? Как я могу это сделать в BE? op code is 40 F0 65 85

ПРИМЕЧАНИЕ: Все коды op находятся в режиме большого пальца!

* EDIT Существует ли компилятор armv7 для Mac?

+0

Какой процессор для ??? Добавьте соответствующий тег. –

+0

Ручной процессор! извините –

+0

Соберите инструкцию 'CMP R0, R0' или' CMP # 0, # 0' и замените вышеуказанный код операции на этот. – AusCBloke

ответ

1

Вы можете просто собрать CMP R0, R0 или CMP #0, #0 и извлечь необходимый код операции из этих инструкций таким образом.


Другой способ - посмотреть справочное руководство по ARM и вручную создать код операции. This - это руководство ARMv5, которое я быстро нашел, и под 7.1.22 у вас есть CMP <Rn>, <Rm> с подробностями построения кода операции для сравнения двух регистров. Детали, похоже, такие же, как и руководство ARMv7, которое я нашел непосредственно перед тем, как я собирался опубликовать.

Он имеет биты 15-6 будучи 0 1 0 0 0 0 1 0 1 0, то биты 5-3 являются количество первого регистра (число 0 представлено 3 битами для R0), а биты 2-0 будучи вторым регистром (также R0). Так что ваш опкод теперь будет:

0 1 0 0 0 0 1 0 1 0 (CMP) 000 (R0) 000 (R0)

100001010000000 в шестнадцатеричном является 4280, поэтому в обратном порядке два байта, которые вам нужно 80 42.

Как вы можете видеть, было бы намного быстрее просто позволить ассемблеру работать для вас.