Simon Bridge said:
I think post #1 is highlighting an apparent difference in the label for the instruction to read a rom vs reading ram. Usually a different name indicates a different machine language instruction - but I don't see why it has to.
It depends whether you are talking about machine code or assembly language mnemonics. Most assemblers have gone in the direction of "overloading" the mnemonics to make it easier for humans to program - i.e. "mov" in assembler will move data from anywhere to anywhere, depending on the type of its operands, but the machine code to perform different types of move may be very different.
The biggest machine code differences are between accessing the data registers on the chip and external memory, and there may be different instructions for accessing memory via special CPU registers like the stack pointer.
IIRC, the basic architecture of an x86 didn't care whether you have RAM or ROM, or even nothing at all, connected to any particular address. If you try to write to ROM the operation fails, but the CPU doesn't care. The memory map diagram shows the standard configuration for an IBM-compatible PC, not for an x86 CPU chip.
There are a few "essentials" in the hardware configuration - e.g. when the CPU powers up, it instruction pointer has to be pointing at some valid code to execute, and there must be some RAM somewhere for the call stack, if the hardware uses interrupts. (Conceptually, you don't actually need the stack just to run code, so long as you never use subroutines!). but apart from those few essentials, you can build the hardware almost any way you want, if you don't care about it being PC compatible.