2016-02-28 12 views
0

Почему коды операций для powerpc отличаются от того, что выводит дизассемблер?PowerPC disassembler output отличается от опкодов

Diassambler Output

Disassembly of section .text: 

00000000100000b0 <main>: 
    100000b0: 38 22 ff f8  addi r1,r2,-8 
    100000b4: 48 00 00 09  bl  100000bc <_main> 
    100000b8: 48 00 00 58  b  10000110 <exit> 

Например, для команды, «б» первые 6 битов содержат шестнадцатеричное значение 48. Однако, на столе опкод, это говорит о том, что опкод 18. Почему это ? Я неправильно интерпретирую коды операций?

+0

Публикация внешних ссылок как основной источник вашего вопроса не работает здесь, поскольку эти ссылки могут исчезнуть. размещать соответствующие части источника и разборки на SO в вопросе. –

+0

@dwelch Это не позволило мне встроить исходный код для некоторого rason – Bob

+0

вы не можете вырезать и вставлять? что фактически просто набирает ... –

ответ

2

18 находится в десятичной форме и является битами 0..5 верхнего байта 0..7. Поэтому вам нужно сдвинуть его на 2 и преобразовать в шестнадцатеричный. Затем вы получите 0x48. то есть.

% printf %x $((18 << 2)) 
48 
%