-->

为什么00000,而8086从FFFF0 8085开始?(Why does 8085 start f

2019-09-16 21:29发布

我无法理解所产生的物理地址的不同的起始地址CS:IP在8085-86。 这是因为堆栈的? 我认为堆栈的概念存在之前8085.请大家帮帮忙。 谢谢。

Answer 1:

有3个原因,我能想到的一个特定的值可以用于通电IP:

  1. 惯例 - 在同一个家庭/品牌的其他处理器使用相同的位置,以及他们想给他们的客户熟悉感
  2. 兼容性
  3. 某些地区受到限制或增强的某些目的。 在6502例如具有用于访问第一256个字节的存储器从0x00到0xff特殊更快的指令。 在那个CPU是有意义的有CPU开始在别处。 (我不认为8086个款待的存储器中任何区域专门不过。)

兼容性和会议问题放在一边,当处理器加电在很大程度上是任意的指令指针得到值。 对于大多数车型,IP是intially要么非常接近其地址空间的顶部(有足够的空间远JMP调用它得到的地方,真正的初始化代码是),或在最底层(即0)。

在维基百科 的文章指出,8086的目的是使从以前的处理器是汇编源代码很容易转化与8086的工作,但仅此而已。 从除了没有试图使其与以往的机型兼容。



Answer 2:

我认为,答案就在中断向量表(IVT)。 所述IVT在8086处理器引入。 8085(其是设计是基于8080处理器)使用用于处理中断的不同方法。 对8086/8088所述IVT占用前1024个字节的存储器(256中断由每4个字节矢量)。 由于这个原因,不能在该区域中任何可执行代码。 与80286,86 / x64处理器有一个中断描述符表,其可被改变,使得软件可在处理器的地址空间中的任何地方重定位中断矢量表,其中它的方便寄存器(ID​​TR)开始。

因此从技术上讲: - 8085没有一个CS寄存器,其地址空间限制为64KiB - 执行上的地址为0x0000 8085点开始通电后 - 执行在x86和x64系列处理器开始在最后的16个字节可寻址内存。 因此,与20根地址线16位处理器,这将是线性地址0xFFFF0。 在32位处理器,它的地址0xFFFFFFF0,在64位处理器是0xFFFFFFFFFFFFFFF0。 该系统ROM必须以这样一种方式,它会向这些地址进行响应连接到内存总线。

退房的英特尔处理器手册的官方解释。



Answer 3:

1)在8085中,在复位PC的值是0000H。 因此唤醒程序应为0000h位置写入并不能保持空白。

CS&LP的2)在8086,复位值是FFFFH&0000H RESP。 因此,20位物理地址将FFFF0 + 0000 = FFFF0H。 它不应该被保持为空。 醒来后的程序(代码)总是在ROM和那里的ROM应在最后一个接口到覆盖FFFF0H。



文章来源: Why does 8085 start from 00000 while 8086 from FFFF0?