8086 Reset vector above 20 bits with buses of 20 bitsWhat are some resources for getting started in operating system development?Do normal x86 or AMD PCs run startup/BIOS code directly from ROM, or do they copy it first to RAM?How does the segment:offset addressing scheme work?What is the value of segment registers in 8086?Intel Reset VectorReset vector in 386+ processorsDeoptimizing a program for the pipeline in Intel Sandybridge-family CPUsLoading program from RAM in 8086intel reset vector and documentation pedantics. Bits vs bytesHow do instructions fit in the instruction register on x86?
Print the phrase "And she said, 'But that's his.'" using only the alphabet
Someone who is granted access to information but not expected to read it
ISP is not hashing the password I log in with online. Should I take any action?
Does every chapter have to "blow the reader away" so to speak?
How can religions without a hell discourage evil-doing?
Should I worry about having my credit pulled multiple times while car shopping?
How to represent jealousy in a cute way?
Would a bit of grease on overhead door cables or bearings cause the springs to break?
Do Veracrypt encrypted volumes have any kind of brute force protection?
How can this shape perfectly cover a cube?
Has JSON.serialize suppressApexObjectNulls ever worked?
Past vs. present tense when referring to a fictional character
What are the advantages of using TLRs to rangefinders?
Why does this Apple //e drops into system monitor when booting?
Is all-caps blackletter no longer taboo?
Certain list transform
Placement of positioning lights on A320 winglets
A flower's head or heart?
What does the "titan" monster tag mean?
Does WiFi affect the quality of images downloaded from the internet?
Background for black and white chart
Why is it bad to use your whole foot in rock climbing
How can I find out about the game world without meta-influencing it?
Am I being scammed by a sugar daddy?
8086 Reset vector above 20 bits with buses of 20 bits
What are some resources for getting started in operating system development?Do normal x86 or AMD PCs run startup/BIOS code directly from ROM, or do they copy it first to RAM?How does the segment:offset addressing scheme work?What is the value of segment registers in 8086?Intel Reset VectorReset vector in 386+ processorsDeoptimizing a program for the pipeline in Intel Sandybridge-family CPUsLoading program from RAM in 8086intel reset vector and documentation pedantics. Bits vs bytesHow do instructions fit in the instruction register on x86?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
How can the cpu fetch instructions from the address 0xfffffff0
( CS_base : 0xffff0000 + IP : 0xfff0
) if it's above the 1mb limit of the 20 bit bus?
- I understand that the cs register start with a base address of
0xffff0000
- But i don't understand how can the bus communicate this address with only 20 bit bus
I have read the other posts; they only talk about the fact the the cs register is hardwired to get the 0xffff0000
base address, not about the bus limit
x86 cpu-architecture boot bios osdev
add a comment |
How can the cpu fetch instructions from the address 0xfffffff0
( CS_base : 0xffff0000 + IP : 0xfff0
) if it's above the 1mb limit of the 20 bit bus?
- I understand that the cs register start with a base address of
0xffff0000
- But i don't understand how can the bus communicate this address with only 20 bit bus
I have read the other posts; they only talk about the fact the the cs register is hardwired to get the 0xffff0000
base address, not about the bus limit
x86 cpu-architecture boot bios osdev
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19
add a comment |
How can the cpu fetch instructions from the address 0xfffffff0
( CS_base : 0xffff0000 + IP : 0xfff0
) if it's above the 1mb limit of the 20 bit bus?
- I understand that the cs register start with a base address of
0xffff0000
- But i don't understand how can the bus communicate this address with only 20 bit bus
I have read the other posts; they only talk about the fact the the cs register is hardwired to get the 0xffff0000
base address, not about the bus limit
x86 cpu-architecture boot bios osdev
How can the cpu fetch instructions from the address 0xfffffff0
( CS_base : 0xffff0000 + IP : 0xfff0
) if it's above the 1mb limit of the 20 bit bus?
- I understand that the cs register start with a base address of
0xffff0000
- But i don't understand how can the bus communicate this address with only 20 bit bus
I have read the other posts; they only talk about the fact the the cs register is hardwired to get the 0xffff0000
base address, not about the bus limit
x86 cpu-architecture boot bios osdev
x86 cpu-architecture boot bios osdev
edited Mar 25 at 8:18
Peter Cordes
144k21221367
144k21221367
asked Mar 25 at 1:41
mohamed azaiezmohamed azaiez
457
457
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19
add a comment |
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19
add a comment |
2 Answers
2
active
oldest
votes
Originally (e.g. for 8088, 8086, 80186), physical addresses were 20-bits (giving 1 MiB of physical address space). At power-on and reset, CS:IP was set to "0xF000:0xFFF0 = 0xFFFF0", and the firmware's ROM was at the end of the physical address space (e.g. ending at physical address 0xFFFFF).
Note that this value is not "above 20 bits" because of the way "segment:offset" was converted into a physical address (specifically, "physical = segment * 16 + offset").
Also note that for physical addresses that didn't fit in 20 bits, the highest bit was discarded to make it fit in 20 bits (e.g. "0xFFFF:0xFFFE = 0xFFFF*16 + 0xFFFE = 0x10FFEE = 0x0FFEE"). This led to special hackery ("A20 gate") to preserve backward compatibility by disabling the 21st address line (A20) when 80286 was released (and the physical address size was increased to 24 bits giving 16 MiB of physical address space).
The other change that happened for 80286 is that (to support protected mode) segment registers (which were originally just a 16 bit integer) gained some hidden pieces - primarily a hidden "segment base" value was added to segment registers, so that the (in protected mode) you have the visible value that was loaded into the segment register and the details of the segment (base address, limit) were loaded from a table (global descriptor table or local descriptor table) and not directly implied by the value loaded into the segment register, the physical address calculation was changed to use the hidden value (e.g. "physical = segment.base + offset"), and in real mode the segment base was set on segment loads (e.g. "segment.base = value * 16") so that it all worked the same when in real mode.
Later (starting with 80386) the physical address space size was increased (first to 32-bit, then to 36-bit, then to "architectural maximum of 52 bits"). When this happened they changed the value loaded into hidden part of CS at power-on/reset. Specifically, the visible part remained the same (0xF000) but the hidden "segment base" part was set to 0xFFFF0000 so that it effectively becomes "0xFFFF0000+0xFFF0 = 0xFFFFFFF0". In addition, the firmware's ROM was shifted to the end of the 32-bit address space (e.g. ending at physical address 0xFFFFFFFF); and (for compatibility) a piece of the ROM was copied (possibly decompressed) and put in RAM at the old address (ending at physical address 0x000FFFFF), and the memory controller was configured such that writes to the "legacy ROM area" were ignored (so that it still behaved like ROM, but was faster because RAM was faster than ROM).
Of course now (for UEFI, in theory and/or once "hybrid BIOS+UEFI" permanently ceases to exist next year) this can disappear - there's no need to copy a part of the ROM into the "legacy ROM area" and no need to configure the memory controller to ignore writes to that area; and we could just have large (3 GiB?) area of normal usable RAM from 0x00000000 to 0xBFFFFFFFF.
add a comment |
The 8086 has a 20-bit bus and on reset the CS register is set to 0xffff and the IP set to 0x0000, making the physical address 0xffff0, or 20-bits. 20-bit addressable space CPUs have 16-bit CS and IP registers, and thus the register values you have in your question (CS : 0xffff0000 + EP : 0xfff0) are incorrect for 8086 CPU.
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55330308%2f8086-reset-vector-above-20-bits-with-buses-of-20-bits%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Originally (e.g. for 8088, 8086, 80186), physical addresses were 20-bits (giving 1 MiB of physical address space). At power-on and reset, CS:IP was set to "0xF000:0xFFF0 = 0xFFFF0", and the firmware's ROM was at the end of the physical address space (e.g. ending at physical address 0xFFFFF).
Note that this value is not "above 20 bits" because of the way "segment:offset" was converted into a physical address (specifically, "physical = segment * 16 + offset").
Also note that for physical addresses that didn't fit in 20 bits, the highest bit was discarded to make it fit in 20 bits (e.g. "0xFFFF:0xFFFE = 0xFFFF*16 + 0xFFFE = 0x10FFEE = 0x0FFEE"). This led to special hackery ("A20 gate") to preserve backward compatibility by disabling the 21st address line (A20) when 80286 was released (and the physical address size was increased to 24 bits giving 16 MiB of physical address space).
The other change that happened for 80286 is that (to support protected mode) segment registers (which were originally just a 16 bit integer) gained some hidden pieces - primarily a hidden "segment base" value was added to segment registers, so that the (in protected mode) you have the visible value that was loaded into the segment register and the details of the segment (base address, limit) were loaded from a table (global descriptor table or local descriptor table) and not directly implied by the value loaded into the segment register, the physical address calculation was changed to use the hidden value (e.g. "physical = segment.base + offset"), and in real mode the segment base was set on segment loads (e.g. "segment.base = value * 16") so that it all worked the same when in real mode.
Later (starting with 80386) the physical address space size was increased (first to 32-bit, then to 36-bit, then to "architectural maximum of 52 bits"). When this happened they changed the value loaded into hidden part of CS at power-on/reset. Specifically, the visible part remained the same (0xF000) but the hidden "segment base" part was set to 0xFFFF0000 so that it effectively becomes "0xFFFF0000+0xFFF0 = 0xFFFFFFF0". In addition, the firmware's ROM was shifted to the end of the 32-bit address space (e.g. ending at physical address 0xFFFFFFFF); and (for compatibility) a piece of the ROM was copied (possibly decompressed) and put in RAM at the old address (ending at physical address 0x000FFFFF), and the memory controller was configured such that writes to the "legacy ROM area" were ignored (so that it still behaved like ROM, but was faster because RAM was faster than ROM).
Of course now (for UEFI, in theory and/or once "hybrid BIOS+UEFI" permanently ceases to exist next year) this can disappear - there's no need to copy a part of the ROM into the "legacy ROM area" and no need to configure the memory controller to ignore writes to that area; and we could just have large (3 GiB?) area of normal usable RAM from 0x00000000 to 0xBFFFFFFFF.
add a comment |
Originally (e.g. for 8088, 8086, 80186), physical addresses were 20-bits (giving 1 MiB of physical address space). At power-on and reset, CS:IP was set to "0xF000:0xFFF0 = 0xFFFF0", and the firmware's ROM was at the end of the physical address space (e.g. ending at physical address 0xFFFFF).
Note that this value is not "above 20 bits" because of the way "segment:offset" was converted into a physical address (specifically, "physical = segment * 16 + offset").
Also note that for physical addresses that didn't fit in 20 bits, the highest bit was discarded to make it fit in 20 bits (e.g. "0xFFFF:0xFFFE = 0xFFFF*16 + 0xFFFE = 0x10FFEE = 0x0FFEE"). This led to special hackery ("A20 gate") to preserve backward compatibility by disabling the 21st address line (A20) when 80286 was released (and the physical address size was increased to 24 bits giving 16 MiB of physical address space).
The other change that happened for 80286 is that (to support protected mode) segment registers (which were originally just a 16 bit integer) gained some hidden pieces - primarily a hidden "segment base" value was added to segment registers, so that the (in protected mode) you have the visible value that was loaded into the segment register and the details of the segment (base address, limit) were loaded from a table (global descriptor table or local descriptor table) and not directly implied by the value loaded into the segment register, the physical address calculation was changed to use the hidden value (e.g. "physical = segment.base + offset"), and in real mode the segment base was set on segment loads (e.g. "segment.base = value * 16") so that it all worked the same when in real mode.
Later (starting with 80386) the physical address space size was increased (first to 32-bit, then to 36-bit, then to "architectural maximum of 52 bits"). When this happened they changed the value loaded into hidden part of CS at power-on/reset. Specifically, the visible part remained the same (0xF000) but the hidden "segment base" part was set to 0xFFFF0000 so that it effectively becomes "0xFFFF0000+0xFFF0 = 0xFFFFFFF0". In addition, the firmware's ROM was shifted to the end of the 32-bit address space (e.g. ending at physical address 0xFFFFFFFF); and (for compatibility) a piece of the ROM was copied (possibly decompressed) and put in RAM at the old address (ending at physical address 0x000FFFFF), and the memory controller was configured such that writes to the "legacy ROM area" were ignored (so that it still behaved like ROM, but was faster because RAM was faster than ROM).
Of course now (for UEFI, in theory and/or once "hybrid BIOS+UEFI" permanently ceases to exist next year) this can disappear - there's no need to copy a part of the ROM into the "legacy ROM area" and no need to configure the memory controller to ignore writes to that area; and we could just have large (3 GiB?) area of normal usable RAM from 0x00000000 to 0xBFFFFFFFF.
add a comment |
Originally (e.g. for 8088, 8086, 80186), physical addresses were 20-bits (giving 1 MiB of physical address space). At power-on and reset, CS:IP was set to "0xF000:0xFFF0 = 0xFFFF0", and the firmware's ROM was at the end of the physical address space (e.g. ending at physical address 0xFFFFF).
Note that this value is not "above 20 bits" because of the way "segment:offset" was converted into a physical address (specifically, "physical = segment * 16 + offset").
Also note that for physical addresses that didn't fit in 20 bits, the highest bit was discarded to make it fit in 20 bits (e.g. "0xFFFF:0xFFFE = 0xFFFF*16 + 0xFFFE = 0x10FFEE = 0x0FFEE"). This led to special hackery ("A20 gate") to preserve backward compatibility by disabling the 21st address line (A20) when 80286 was released (and the physical address size was increased to 24 bits giving 16 MiB of physical address space).
The other change that happened for 80286 is that (to support protected mode) segment registers (which were originally just a 16 bit integer) gained some hidden pieces - primarily a hidden "segment base" value was added to segment registers, so that the (in protected mode) you have the visible value that was loaded into the segment register and the details of the segment (base address, limit) were loaded from a table (global descriptor table or local descriptor table) and not directly implied by the value loaded into the segment register, the physical address calculation was changed to use the hidden value (e.g. "physical = segment.base + offset"), and in real mode the segment base was set on segment loads (e.g. "segment.base = value * 16") so that it all worked the same when in real mode.
Later (starting with 80386) the physical address space size was increased (first to 32-bit, then to 36-bit, then to "architectural maximum of 52 bits"). When this happened they changed the value loaded into hidden part of CS at power-on/reset. Specifically, the visible part remained the same (0xF000) but the hidden "segment base" part was set to 0xFFFF0000 so that it effectively becomes "0xFFFF0000+0xFFF0 = 0xFFFFFFF0". In addition, the firmware's ROM was shifted to the end of the 32-bit address space (e.g. ending at physical address 0xFFFFFFFF); and (for compatibility) a piece of the ROM was copied (possibly decompressed) and put in RAM at the old address (ending at physical address 0x000FFFFF), and the memory controller was configured such that writes to the "legacy ROM area" were ignored (so that it still behaved like ROM, but was faster because RAM was faster than ROM).
Of course now (for UEFI, in theory and/or once "hybrid BIOS+UEFI" permanently ceases to exist next year) this can disappear - there's no need to copy a part of the ROM into the "legacy ROM area" and no need to configure the memory controller to ignore writes to that area; and we could just have large (3 GiB?) area of normal usable RAM from 0x00000000 to 0xBFFFFFFFF.
Originally (e.g. for 8088, 8086, 80186), physical addresses were 20-bits (giving 1 MiB of physical address space). At power-on and reset, CS:IP was set to "0xF000:0xFFF0 = 0xFFFF0", and the firmware's ROM was at the end of the physical address space (e.g. ending at physical address 0xFFFFF).
Note that this value is not "above 20 bits" because of the way "segment:offset" was converted into a physical address (specifically, "physical = segment * 16 + offset").
Also note that for physical addresses that didn't fit in 20 bits, the highest bit was discarded to make it fit in 20 bits (e.g. "0xFFFF:0xFFFE = 0xFFFF*16 + 0xFFFE = 0x10FFEE = 0x0FFEE"). This led to special hackery ("A20 gate") to preserve backward compatibility by disabling the 21st address line (A20) when 80286 was released (and the physical address size was increased to 24 bits giving 16 MiB of physical address space).
The other change that happened for 80286 is that (to support protected mode) segment registers (which were originally just a 16 bit integer) gained some hidden pieces - primarily a hidden "segment base" value was added to segment registers, so that the (in protected mode) you have the visible value that was loaded into the segment register and the details of the segment (base address, limit) were loaded from a table (global descriptor table or local descriptor table) and not directly implied by the value loaded into the segment register, the physical address calculation was changed to use the hidden value (e.g. "physical = segment.base + offset"), and in real mode the segment base was set on segment loads (e.g. "segment.base = value * 16") so that it all worked the same when in real mode.
Later (starting with 80386) the physical address space size was increased (first to 32-bit, then to 36-bit, then to "architectural maximum of 52 bits"). When this happened they changed the value loaded into hidden part of CS at power-on/reset. Specifically, the visible part remained the same (0xF000) but the hidden "segment base" part was set to 0xFFFF0000 so that it effectively becomes "0xFFFF0000+0xFFF0 = 0xFFFFFFF0". In addition, the firmware's ROM was shifted to the end of the 32-bit address space (e.g. ending at physical address 0xFFFFFFFF); and (for compatibility) a piece of the ROM was copied (possibly decompressed) and put in RAM at the old address (ending at physical address 0x000FFFFF), and the memory controller was configured such that writes to the "legacy ROM area" were ignored (so that it still behaved like ROM, but was faster because RAM was faster than ROM).
Of course now (for UEFI, in theory and/or once "hybrid BIOS+UEFI" permanently ceases to exist next year) this can disappear - there's no need to copy a part of the ROM into the "legacy ROM area" and no need to configure the memory controller to ignore writes to that area; and we could just have large (3 GiB?) area of normal usable RAM from 0x00000000 to 0xBFFFFFFFF.
edited Mar 25 at 3:37
answered Mar 25 at 3:09
BrendanBrendan
14.7k1534
14.7k1534
add a comment |
add a comment |
The 8086 has a 20-bit bus and on reset the CS register is set to 0xffff and the IP set to 0x0000, making the physical address 0xffff0, or 20-bits. 20-bit addressable space CPUs have 16-bit CS and IP registers, and thus the register values you have in your question (CS : 0xffff0000 + EP : 0xfff0) are incorrect for 8086 CPU.
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
add a comment |
The 8086 has a 20-bit bus and on reset the CS register is set to 0xffff and the IP set to 0x0000, making the physical address 0xffff0, or 20-bits. 20-bit addressable space CPUs have 16-bit CS and IP registers, and thus the register values you have in your question (CS : 0xffff0000 + EP : 0xfff0) are incorrect for 8086 CPU.
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
add a comment |
The 8086 has a 20-bit bus and on reset the CS register is set to 0xffff and the IP set to 0x0000, making the physical address 0xffff0, or 20-bits. 20-bit addressable space CPUs have 16-bit CS and IP registers, and thus the register values you have in your question (CS : 0xffff0000 + EP : 0xfff0) are incorrect for 8086 CPU.
The 8086 has a 20-bit bus and on reset the CS register is set to 0xffff and the IP set to 0x0000, making the physical address 0xffff0, or 20-bits. 20-bit addressable space CPUs have 16-bit CS and IP registers, and thus the register values you have in your question (CS : 0xffff0000 + EP : 0xfff0) are incorrect for 8086 CPU.
edited Mar 25 at 6:44
prl
5,9782319
5,9782319
answered Mar 25 at 2:34
XsummusXXsummusX
2814
2814
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
add a comment |
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
Note that modern x86 CPUs also have a 16-bit CS register. The base address, 0xffff0000, is stored in the hidden part; the CS register value on reset is 0xf000.
– prl
Mar 25 at 6:49
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
@pri, You are correct, but the poster asked specifically about the 8086 CPU where the CS register is 16-bit and is used with the 16-bit IP to form the physical 20-bit address.
– XsummusX
Mar 26 at 4:40
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55330308%2f8086-reset-vector-above-20-bits-with-buses-of-20-bits%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Possible duplicate of Software initialization code at 0xFFFFFFF0H, but I haven't read them carefully enough to be sure. Brendan posted a similar answer to that old question only a few weeks before this was asked, no wonder his answer here looks similar :P
– Peter Cordes
Apr 6 at 3:19