For binaries to run on an ARM processor, they have to be compiled for that processor specifically or be run in an emulator.
Since Linux systems are open source, people can compile them specifically for ARM systems and rewrite any x86 specific code. Because the source for Windows is closed, unless Microsoft releases an ARM version, it cannot be recompiled and run on it.
There are other problems with moving to ARM systems, but this is probably the biggest.
As far as I know, VMware will not emulate an x86. I think qemu may be able to, but I have not used it for ARM emulating x86 before, just x86 emulating ARM. There will be a significant performance hit if it does work.
While any program needs to be compiled for the architecture it is intended run on, an operating system often needs to be much more customized to the specific architecture. Operating systems are responsible for things like scheduling and task switching, which work with the processor at very deep levels.
Memory mapped hardware registers are accessed like RAM. All CPUs have specific instructions for reading/writing RAM and these same instructions are used to access memory-mapped registers.
Hardware registers in general do not have to be memory mapped, this is simply a common convention.
x86 provides two address spaces in which two separate groups of instructions are used to read and write - the first is RAM or memory space (all the MOV
instructions), the second is I/O space (using the IN
and OUT
instructions). On x86, hardware registers may appear in either space.
You also may need to go through a level of indirection to really reach a hardware register. A device may only expose a "port" in memory or I/O space. You then need to write a register number to the address, and then the data you want to actually write to another address. The write then occurs. The old 8563 VDC in the Commodore 128 worked like this. The CMOS RAM and some PCI registers also work like this.
CPU hardware registers are of course not memory mapped (not on x86 or any common CPU anyway), that is another example of a hardware register.
Modern CPU's have "model specific registers" (MSRs) and these are read/written using their own instructions (RDMSR
, WRMSR
). Other CPU registers have their own instruction (LGDT
, MOV xx, CR2
, the basic EAX/RAX, etc.)
Best Answer
Processor registers - generally, something to do with any operation that the CPU does must be in one of its registers.
For example, look at this. It's the various forms of the Intel x86
ADD
instruction. You'll notice that you can add two registers together, or add a register together with the contents of a memory location ("accumulator" is just another register, "immediate" just means the data is in the memory location directly, or "immediately" after the actual ADD opcode). There is noADD mem,mem
.RISC CPU's such as ARM are even less flexible. Data from memory must always be copied to a register as a separate operation before the CPU can do anything like
ADD
,SUB
, etc. to it. They have many more registers to make up for this.I/O registers - generally, something to do with any operation that an I/O chipset or device does must be in one of its registers.
For example, look at this. It's detail about the standard VGA "CRTC registers." Of particular interest is the "Start Address High" and "Start Address Low" registers. The values in these registers tell the VGA where to begin reading memory to render a display.
There's many ways to make I/O registers accessible from a CPU. Usually it is not like processor registers above. Various methods include:
IN
andOUT
instructions for I/O. These specify addresses but not ones that RAM can be connected to. I/O devices may connect to these addresses (usually called "ports", not to be confused with TCP ports) and make their registers accessible this way.Continuing with the example of the VGA CRTC registers above, with how I explained "I/O ports" above you are now armed with the knowledge to understand this and understand that by issuing specific
OUT
instructions the CPU then modifies the value in the VGA's I/O register, which is retained and used by the VGA chipset.Not all I/O devices have registers. Some are really simple and just need some sort of signal to do their thing, and also "reading" the device just reports a current state. The old PC "game port" is an example. There's really no storage of data going on so it might not be technically correct to call it a register. Most technical documentation won't make this distinction, though.