问题
Possible duplicate: Software initialization code at 0xFFFFFFF0H
When the system boots up (Intel), reset vector is at address 0xFFFFFFF0
(16 bytes less than 4G) (as mentioned in above link). That address contains FAR JUMP to where the BIOS is. I read the answer, comments and referenced link, also did some searching, but still cannot understand how 32-bit address can be map to 16-bit (Real Mode)?
My confusion is that in this link: http://www.starman.vertcomp.com/asm/bios/index.html, author mentioned that address F000:FFF0
(16 bytes less than 1MB) contains JUMP to where the BIOS is.
- How
0xFFFFFFF0
gets mapped toF000:FFF0
? Does it even gets mapped? - If the computer doesn't have physical 4G of memory, let say it has only 1G, where is the
0xFFFFFFF0
address?
Thanks in advance for help.
回答1:
When I have a chance I will edit this with references.
The 386 manual states that the address lines 31-20 are high on reset until a JMP is encountered, then they are low again. The mapping isn't really there its more of a hack.
The top if the address space where there is no RAM (in a system with say 1GB of RAM) the chipset will map ROM code rather than RAM to that address. It doesn't make sense to have RAM there since on first power on there would be no code there to execute, so it must be non volatile.
来源:https://stackoverflow.com/questions/22190042/intel-reset-vector