[HN Gopher] Undocumented 8086 instructions, explained by the mic...
___________________________________________________________________
Undocumented 8086 instructions, explained by the microcode
Author : kens
Score : 58 points
Date : 2023-07-16 21:06 UTC (1 hours ago)
(HTM) web link (www.righto.com)
(TXT) w3m dump (www.righto.com)
| djmips wrote:
| Offtopic: this is an excellent series on the 8086! Do you have
| plans to give a similar treatment to the Motorola 68000?
| kens wrote:
| When I'm done with the 8086, I might look at the 68000 but I
| don't have any specific plans.
| EvanAnderson wrote:
| Based on AMM using CORD for the division operation will D4 00
| generate the same division by zero error as a DIV with a zero
| divisor? (I can't think of any reason this would be useful but I
| do like thinking about edge cases and how things break.)
| kens wrote:
| My transistor-level simulator shows that the 8086 will generate
| a divide by 0 interrupt if you give the AAM instruction a
| divisor of 0. But I haven't tried this on a real chip.
| quickthrower2 wrote:
| Aside: If you are writing stuff this good (and this niche) I
| would say ditch the ads. They really will turn off the audience
| you want to attract. Or at least use one of the developer-focused
| ad networks that just inline ads not pop them up.
| djmips wrote:
| Data point: I browsed without an adblocker on phone in Chrome
| and didn't see any ads.
| EvanAnderson wrote:
| I'm on iOS and the ad was unobtrusive. I'm very happy to
| support Ken. Unless the ads are more disruptive on other
| platforms I'd say leave 'em in.
| unnouinceput wrote:
| What ads? Didn't seen any ads when visiting the page. Are you
| browsing the web without uBlock Origin by any chance?
| lloydatkinson wrote:
| I am always amazed how many tech orientated people don't use
| any kind of ad blocking
| [deleted]
| flockonus wrote:
| Having AdBlock extension, but like all my extensions also
| have "This can read and change site data > when you click
| the extension" while turn on to any domain that "misbehave"
| with sticky ads, videos or whatever annoying flashing
| things. Otherwise I'm just hurting content creators for no
| good reason. I would not enable an extension on any domain
| i input my email, password, or otherwise have sensitive
| private information.
| bruce343434 wrote:
| Where can one learn more about microcode, how it's implemented in
| silicon? As I understand it most machine code is actually "VM
| bytecode", and the "real" cpu is the microcode processor?
| kens wrote:
| A computer architecture book such as Hennessy and Patterson
| will describe microcode in detail.
|
| It's a bit confusing because microcode has changed meaning a
| bit over time. "Classical" microcode, such as the 8086,
| replaces hard-wired control logic with micro-instructions. The
| processor steps through the appropriate micro-instructions,
| which are decoded to generate control signals.
|
| The Pentium Pro introduced a new model, where machine
| instructions are broken down into independent micro-ops, which
| are handed off to the core processor engine and processed
| independently, in parallel. At the end, the micro-ops are
| "retired" in a sequential order, so your program appears
| sequential.
|
| Most micro-ops are generated by decoders that convert a machine
| instruction into a small number of micro-ops. However,
| complicated machine instructions are converted into micro-ops
| by microcode. This is similar to classical microcode, except
| it's not executing micro-instructions but generating micro-ops
| that then get run by the underlying processor.
| pests wrote:
| Ben Eater on YouTube has recreated an 8-bit computer on
| breadboards.
|
| https://www.youtube.com/watch?v=dXdoim96v5A
|
| That is the start of the videos where the control logic gets
| microcoded. Its pretty basic but over the next few videos he
| comes up with about 10 different OPCODES and programs their
| microcode (a series of control logic activations). Its pretty
| amazing to see it all come together and work in the end.
| Emily56 wrote:
| [dead]
| colejohnson66 wrote:
| A lot of the undocumented instruction "match" bits make sense,
| such as POP CS at [0F]. However, it's clear that the authors of
| the microcode _deliberately_ made every opcode match to some
| routine, as evidenced by Jcc being mirrored into the [60..6F]
| region, LOCK into [F1], group 2 /6 into /7, etc. It wouldn't've
| "cost" anything extra to make Jcc only match on its documented
| [70..7F] region (and others) like later processors do. What's the
| advantage of matching on undefined byte sequences?
|
| Also, SALC is still _technically_ undocumented by Intel (AMD
| documents it, though). It doesn 't have a dedicated section in
| the SDM (would be in Volume 2, Chapter 4), and in the opcode map
| (Volume 2, Appendix A), there's a blank there. One actually has
| to go to Volume 3, Chapter 23 "Architecture Compatibility",
| Section 15 "Undefined Opcodes" (of version 080 from June) to see
| it mentioned. It's weird. They even call it out as SALC "when not
| in 64-bit mode" and that it performs "IF (CF=1), AL=FF, ELSE,
| AL=0", but refuse to officially document it.
| kens wrote:
| There's a reason why every 8086 opcode matches something. If an
| instruction didn't match anything, I think the microcode engine
| would spin idle and the instruction would never terminate. (You
| need a RNI micro-instruction to end microcode processing.)
| Having your processor lock up due to a bad opcode is something
| that the designers presumably explicitly avoided.
|
| The 6502 on the other hand, didn't take such precautions. There
| are opcodes that cause the internal timing state machine to
| sort of fall off the end, causing the CPU to lock up and even
| an interrupt won't rescue you. You need a RESET signal.
| greenyoda wrote:
| Also the 6800, with its famous HCF (Halt and Catch Fire)
| instruction:
|
| > _With the advent of the MC6800 (introduced in 1974), a
| design flaw was discovered by programmers. Due to incomplete
| opcode decoding, two illegal opcodes, 0x9D and 0xDD, will
| cause the program counter on the processor to increment
| endlessly, which locks the processor until reset. Those codes
| have been unofficially named HCF. During the design process
| of the MC6802, engineers originally planned to remove this
| instruction, but kept it as-is for testing purposes. As a
| result, HCF was officially recognized as a real instruction._
|
| https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing.
| ..
| chx wrote:
| > The undocumented C9 opcode is identical to the documented CB,
| far return instruction.
|
| I _remember_ this.
|
| Once ... gosh, it's hard to believe how long ago that was now,
| but once I knew the entire Z80 opcode table off head. I could
| read the Z80 machine code and disassemble it. High school crowded
| that stuff out of my head, I went to a special math school, it
| was very very hard. Except... C9 was RET (and the Z80 is an
| extension of the Intel 8080). That has burned into me so deep I
| still remember, across more than 35 years. I will be 30 ;) years
| old in two weeks.
| gnat wrote:
| I'm the same with LDA immediate = A9 in 6502 machine code, from
| my C64 days. It's disturbing how strongly burned-in those
| neurons are ...
___________________________________________________________________
(page generated 2023-07-16 23:00 UTC)