By: Megol (golem960.delete@this.gmail.com), August 13, 2022 12:05 pm
Room: Moderated Discussions
none (none.delete@this.none.com) on August 12, 2022 3:53 am wrote:
> Megol (golem960.delete@this.gmail.com) on August 12, 2022 3:04 am wrote:
> [...]
> > > Ugly, but not so ugly as x86.
> > Debatable. X86 is like two separate architectures with some similarities,
> > the 8086-80286 was pretty clean, the 80386 too.
>
> I guess you are talking about encoding which was cleaner than 68k IIRC. Because for the rest,
> what was not ugly in 8086? Non orthogonal use of registers all around the place, non
> orthogonal settings of flags, segments, etc.
Something doesn't need to be orthogonal to be clean. The 8086 was clean as instructions mapped well to normal code and it was clear how to program most things, the limited orthogonality also meant many instruction classes could use more registers. The design of flags have proven to work well far beyond the original architecture, while for instance the (even more hacky) 68k design would be much more complicated to manage in a superscalar OoO processor. I don't see how flags could be made more orthogonal except setting them all for all instructions however that would complicate programming.
I don't see the non-orthogonality of segments as the segment registers were considered part of fixed blocks: code CS, data DS (also ES), stack SS. The architecture however allows normal fixed segment use to be overridden via segment prefixes which IMO mostly makes the low amount of segment registers a bottleneck - but it wasn't really in the original 8086 design.
> Megol (golem960.delete@this.gmail.com) on August 12, 2022 3:04 am wrote:
> [...]
> > > Ugly, but not so ugly as x86.
> > Debatable. X86 is like two separate architectures with some similarities,
> > the 8086-80286 was pretty clean, the 80386 too.
>
> I guess you are talking about encoding which was cleaner than 68k IIRC. Because for the rest,
> what was not ugly in 8086? Non orthogonal use of registers all around the place, non
> orthogonal settings of flags, segments, etc.
Something doesn't need to be orthogonal to be clean. The 8086 was clean as instructions mapped well to normal code and it was clear how to program most things, the limited orthogonality also meant many instruction classes could use more registers. The design of flags have proven to work well far beyond the original architecture, while for instance the (even more hacky) 68k design would be much more complicated to manage in a superscalar OoO processor. I don't see how flags could be made more orthogonal except setting them all for all instructions however that would complicate programming.
I don't see the non-orthogonality of segments as the segment registers were considered part of fixed blocks: code CS, data DS (also ES), stack SS. The architecture however allows normal fixed segment use to be overridden via segment prefixes which IMO mostly makes the low amount of segment registers a bottleneck - but it wasn't really in the original 8086 design.