|
![](/i/fill.gif) |
clipka <ano### [at] anonymous org> wrote:
> > Speaking of which, even though the 80386 processor was introduced
> > in 1985 (that's almost 30 years ago), PCs still boot up in 16-bit
> > mode. Yes, even the new 64-bit ones.
> Not all of them. Look up UEFI and coreboot.
An x86 CPU will start in 16-bit mode when it's powered-up. I don't think
there's any way to bypass that via anything. The only thing that a
32/64-bit BIOS can do is to make the switch to 32/64-bit mode earlier
in the bootup process.
However, such a BIOS could theoretically allow for a x86 CPU to drop
16-bit support completely (if the OS can, thanks to such a BIOS, assume
the CPU is already running in 32/64-bit mode when it boots.)
> > The very first thing that the OS does is to switch to either 32-bit
> > mode (if the CPU is that old) or to 64-bit mode. After that it will
> > usually never revert back to 16-bit mode ever again.
> I thought the 64-bit mode was exactly the same as the 32-bit one, except
> that some memory pages are flagged differently?
Actually, if I have understood correctly, the 64-bit mode in an x86-64
architecture is quite different from its 32-bit mode. For instance, a
whole family of CPU opcodes are treated completely differently in
64-bit mode than in 32-bit mode (for example to account for the larger
number of available CPU registers.)
16-bit and 32-bit modes are much more tied together. For instance, you
can access 32-bit registers in 16-bit mode and vice-versa (and IIRC it
happens by using the exact same opcode prefix). However, the 64-bit mode
is so separate that you can't eg. use 64-bit CPU registers in 32-bit mode
at all.
There are some completely different CPU architectures where the
distinction between 32-bit and 64-bit modes is much more transparent.
The UltraSparc would be a perfect example. It's so transparent that it
doesn't even need separate modes for 32-bit and 64-bit code: They both
run just fine as-is, even if you mix them up. (The original Sparc
architecture was 32-bit, and the UltraSparc is 64-bit, but was designed
in such a manner that it can run old 32-bit code as-is, without having
to switch to any kind of compatibility mode, like the x86-64 has to.
32-bit code will use the same 64-bit registers as 64-bit code, but be
none the wiser.)
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |