x86_opcode_structure_and_instruction_overview.pdf on -= pnx.tf =-
Posted by jpluimers on 2024/06/18
It is more than a decade old but still the best reference around [Wayback/Archive] -= pnx.tf =- has [Wayback] x86_opcode_structure_and_instruction_overview.pdf
I found it via [Wayback/Archive] Alice Climent-Pommeret on Twitter: “I’ve just discovered this amazing document showing super clearly the relation between the opcode and the instruction 🤯 …”
The screenshot is only the left half of the table (the single byte part). The actual table in the PDF by Daniel Plohmann also contains a 2-byte opcode list on right and smaller tables with bit vectors refining the various instruction parts: recommended downloading!
And yes: if you did not already know, now you can easily see on x86 the NOP is just a single byte XOR EAX, EAX instruction with byte code 0x90.
[Wayback/Archive] JT on Twitter: “@JeffDuntemann Never mind. I figured it out. 🤣🤣 It’s just XCHG (E/R)AX, (E/R)AX.”
Daniel is still fond of it: [Wayback/Archive] Daniel Plohmann on Twitter: “@AliceCliment @dragosr Thanks! I can’t believe that it’s already 10+ years now since I created that visualization. But it definitely helped me get a much better understanding of x86 instruction encoding up to point of basic ability to recognize instruction sequences directly from hex dumps. 🙃”.
That reminded me back of the days, I saw a similar but smaller table. I thought that was on a LISTSERV mailing list but was wrong since that was a long time ago. In retrospect: 30 years ago as that was when I used it to improve DUMPPROG to include i486 disassembly as found back from [Wayback/Archive] “dumpprog” pluimers – Google Search.
DMPPRG20 (DUMPPROG version 2.01, (c) D.J. Murdoch, 1991, 1992, (c) 1992 Jeroen Pluimers, based on PD code by William Peavy) Take up to 80486 opcodes!
So I did not see it in a mailing list, but in the official Intel i386 and i486 documentation.
I wrote this twitter thread as a result:
- [Wayback/Archive] “@push_pnx @AliceCliment @dragosr I forgot where on the LISTSERV instances I saw a much smaller version of this (I even forgot if it was Z80, 8080 or 8086). It was helpful as it made mental decoding of instructions a lot easier. Glad you made a big one. Anyone having the energy and time to do it for AVX512?”
- [Wayback/Archive] “@push_pnx @AliceCliment @dragosr It wasn’t in the LISTSERV, but in the same era:
intel :: 80386 :: 230985-001 80386 Programmers Reference Manual 1986I remember using that and a more recent version of it to improve DUMPPROG so it could disassemble the 486 instructions in EXE files tine mid 1990s.” - [Wayback/Archive] “@push_pnx @AliceCliment @dragosr The 486 manual was in
intel :: 80486 :: i486 Processor Programmers Reference Manual 1990It was hard to get these in The Netherlands (and were way about twice as expensive as in the USA), but luckily the computing department library at the university had them. Look for “Opcode Map” in the PDF files of both.” - [Wayback/Archive] “@push_pnx @AliceCliment @dragosr I am so glad you extended it by a lot, though I missed it as I had no real need digging further as my main development tool of choice Delphi still has limited instruction set extensions support. Good work!”
- [Wayback/Archive] “@push_pnx @AliceCliment @dragosr Boy, those DumpProg improvements were 30 years ago! … (: It reminds me to get in touch with Duncan Murdoch and William Peavy after all this time. We’re in the group of aging people…”
You can find the BitSavers‘ PDF files of the Intel documentation in these directories:
- [Wayback/Archive] Index of /components/intel/80386
- [Wayback/Archive] Index of /components/intel/80486
They are also archived at the Internet Archive which hosts other formats than PDF as well:
- [Wayback/Archive] intel :: 80386 :: 230985-001 80386 Programmers Reference Manual 1986 : Free Download, Borrow, and Streaming : Internet Archive
- [Wayback/Archive] intel :: 80486 :: i486 Processor Programmers Reference Manual 1990 : Free Download, Borrow, and Streaming : Internet Archive
Related blog post: Delphi – back in 1996 – CARDS.DLL component wrapper in Delphi 1 and 2!
Related download is DUMPROG version 2.1 from [Wayback/Archive] Duncan Murdoch’s Programs as [Wayback] dmpprg21.zip
–jeroen








Leave a comment