Я декомпилировал некоторые файлы ARM ELF и прочитал код ассемблера. Но я не вижу, как некоторые коды переводятся в мнемонику. Например, я получаю следующий код:Как кодируются регистровые операнды в ARM-ассемблере?
#hex code | #mnemonic | #binary
0xb480 | push {r7} | 1011 0100 1000 0000
0xb580 | push {r7, lr} | 1011 0101 1000 0000
0xb5f0 | push {r4,r5,r6,r7,lr} | 1011 0101 1111 0000
Таким образом, вы можете ясно видеть опкод для push
является 0xb4
или 0xb5
, если толкая несколько значений. Но как же тогда создается список регистров?
Первый пример очень прост, r7
кодируется 8-м битом, который установлен. Но почему второй код операции также толкает lr
? Для этого нет битового флага?
Вы уверены, что код операции - два полных байта? это может быть всего 6/7 бит. – hivert