Why does 8085 start from 00000 while 8086 from FFFF0


I am unable to understand the different starting addresses of Physical Address generated by CS:IP in 8085-86. Is this because of Stack? I think the concept of Stack was present before 8085. Please help out. Thanks.

Best Solution

I think the answer lies in the Interrupt Vector Table (IVT). The IVT was introduced in the 8086 processor. The 8085 (which's design is based on the 8080 processor) uses a different method for handling interrupts. On the 8086/8088 the IVT takes up the first 1024 bytes of memory (256 interrupt vectors consisting of 4 bytes each). For this reason there cannot be any executable code in that region. Starting with the 80286, x86/x64 processors have an Interrupt Descriptor Table register (IDTR) which can be changed so that software can relocate the interrupt vector table anywhere in the processor's address space where it's convenient.

So technically: - The 8085 does not have a CS register and its address space is limited to 64KiB - Execution on the 8085 starts at address 0x0000 after power-on - Execution on the x86 and x64 family of processors starts at the last 16 bytes of addressable memory. So on 16-bit processors with 20 address lines this would be linear address 0xFFFF0. On 32-bit processors it's address 0xFFFFFFF0, and on 64-bit processors it's 0xFFFFFFFFFFFFFFF0. The system ROM must be wired to the memory bus in such a way that it will respond to these addresses.

Check out the Intel processor manuals for the official explanation.

Related Question