Search code examples
x86-16microprocessors8085

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.


Solution

  • There are 3 reasons I can think of that a particular value could be used for the powerup IP:

    1. convention - other processors in the same family/brand use the same location, and they want to give their customers a sense of familiarity
    2. compatibility
    3. certain areas are restricted or enhanced for certain purposes. The 6502 for example has special faster instructions for accessing the first 256 bytes of memory from 0x00 to 0xff. On that CPU it makes sense to have the CPU start somewhere else. (I don't think the 8086 treats any area of memory specially however.)

    compatibility and convention issues aside, the value that the instruction pointer gets when the processor powers up is largely arbitrary. For most models, the IP is intially either very close to the top of its address space (with enough room for a far JMP call to get it to where the real init code is) or at the very bottom (ie 0).

    The wikipedia articles state that the 8086 was designed so that assembly source code from previous processors was easily converted to work with the 8086, but that's all. Apart from that there was no attempt to make it compatible with previous models.