Biblioteca de opcodes

TriCore (MED17, EDC17, Simos, MG1/MD1) e PowerPC MPC5xx/MPC56x e e200 (EDC16, MED9, ME9). Busque pelo mnemônico, pelo que a instrução faz ou cole o hexa de uma instrução — e decodifique um trecho inteiro copiado do hex dump.

Buscar

Decodificar bytes

Cole só os bytes (com ou sem espaço). Uma linha que começa com endereço: tem o endereço descartado — e, se o campo acima estiver vazio, ele vira o endereço inicial. No TriCore, "palavras como no manual" quer dizer 0480000D em vez de 0D 00 80 04.
De onde vêm os dados e como ler

TriCore. A codificação de cada forma (máscara e valor) foi extraída do tricore.sinc do Ghidra, o mesmo arquivo que o Ghidra usa para desmontar — não foi digitada à mão. Por isso o decodificador escreve a instrução do mesmo jeito que o Ghidra (ld.w d15,[a15]0x4), e as constantes saem em hexa com #. As formas marcadas TC1.6+ só existem nos núcleos AURIX (TC2xx/TC3xx, MG1, MD1); Rider-D+ a partir do TC1.3.1. As descrições em português são escritas à parte e casadas pelo mnemônico.

PowerPC. A tabela foi montada a partir dos manuais (UISA, RCPU do MPC5xx e o do e200z). Cada linha diz só quais campos são fixos; a máscara sai dali. Em "escrever como o Ghidra", o texto sai igual ao listing da linguagem PowerPC padrão: rlwinm r3,r3,0x0,0x18,0x1f, mfspr r0,lr, subi para imediato negativo, SPR sem nome como spr050 (o nome do MPC5xx, EIE, vai para a observação). Em "o manual", com os mnemônicos simplificados: clrlwi r3,r3,24, mflr r0, mtspr EIE,r0. sync/msync e eieio/mbar são a mesma palavra — o nome segue o núcleo escolhido, assim como o nome dos SPR (528 é MI_GRA no MPC5xx e IVOR32 no e200). O e200 em modo VLE (instruções de 16 bits, e_ e se_) não está aqui.

Conferido contra o Ghidra 12. Trechos de 32 KB de código real desmontados nos dois, instrução por instrução: MED17.5.2 (TriCore 1.3) e MG1 (AURIX) saíram 100% idênticos; MED9 (MPC56x) 16.382 de 16.384 — as duas que sobram são dado no meio do código.

Numeração de bits. No diagrama do PowerPC o bit 0 é o mais significativo, como no manual (é a numeração de MB e ME do rlwinm). No TriCore o bit 0 é o menos significativo. Os campos em azul são variáveis; o resto é a parte fixa da instrução.

Ordem dos bytes. PowerPC é big-endian: a palavra 7C0802A6 aparece no hex dump como 7C 08 02 A6. TriCore é little-endian e de tamanho variável: o bit 0 do primeiro byte diz se a instrução tem 16 (bit 0 = 0) ou 32 bits (bit 0 = 1), e isync (0x04C0000D) aparece como 0D 00 C0 04.

Desvios. O alvo é calculado a partir do endereço informado. Sem endereço, conta a partir de zero — os saltos relativos ficam certos entre si, mas não batem com o mapa de memória.