Pisze sobie disassembler kodu dla 8086 który będzie służył mi do emulatora. Generalnie troche działa, dekodowanie bajtu ModRM
/prefixów/itd jest łatwe. Ale. Czy ktoś mądry może wyjaśnić mi, dlaczego przykładowo
or
i cx
(za wykluczeniem or/cx ax
dla akumulatora są dedykowane opki) mają te same opkody?
Objdump jakoś to łyka i wyświetla poprawnie. Przykład
objdump -M intel -m i8086 -D -b binary test.bin
3: 90 nop
4: 83 cb 17 or bx,0x17
7: 83 e1 20 and cx,0x20
a: 83 fa 0c cmp dx,0xc
d: 80 f3 17 xor bl,0x17
10: 80 37 17 xor BYTE PTR [bx],0x17
13: f7 eb imul bx
15: f7 f0 div ax
17: 90 nop
Z tego co rozumiem, weźmy na przykład instrukcję or bx, 0x17
, bajt 0x83
to opkod, 0xcb
to ModRM w którym znajdują sie rejestr źródłowy(3 bity), docelowy(3 bity), i selektor(2 bity) instrukcji, no i 0x17
to wartość.
Ad ModRM ładna tabelka.
No i generalnie tu jest mój problem, jak rozkodować czy to or, and czy cmp (czy jescze co innego, sporo instrukcji jest na jednym opkodzie, lista tu )
Może ktoś coś takiego pisał, i miał podobny problem, bądź po prostu - wie ;-)
Żeby nie było że nie szukam, zrobiłem wstępny research stacka i:
Tu gosciu wspomina to, co wiem, ale nic o tych opkodach.
No generalnie na razie nie zajrzałem w miejsce w które powinienem zajrzeć najpierw, manual od 8086, dosyć trudny w odbiorze ;p
Ok, teraz ide chyba jednak zajrzeć w manual, tam pewno coś będzie. Anyway thx z góry za odpowiedzi.