我无法理解8085-86中CS:IP
生成的物理地址的不同起始地址。这是因为Stack吗?我认为Stack的概念出现在8085之前。请帮忙。感谢。
答案 0 :(得分:4)
我认为答案在于中断向量表(IVT)。 IVT是在8086处理器中引入的。 8085(其设计基于8080处理器)使用不同的方法来处理中断。在8086/8088上,IVT占用了前1024个字节的内存(256个中断向量,每个包含4个字节)。因此,该区域中不能有任何可执行代码。从80286开始,x86 / x64处理器具有中断描述符表寄存器(IDTR),可以对其进行更改,以便软件可以将中断向量表重新定位到处理器地址空间的任何位置,方便使用。
技术上如此: - 8085没有CS寄存器,其地址空间限制为64KiB - 上电后,8085上的执行从地址0x0000开始 - x86和x64系列处理器的执行从可寻址内存的最后16个字节开始。因此,在具有20个地址线的16位处理器上,这将是线性地址0xFFFF0。在32位处理器上,它的地址是0xFFFFFFF0,而在64位处理器上,它是0xFFFFFFFFFFFFFFF0。系统ROM必须连接到存储器总线,以便响应这些地址。
查看Intel processor manuals以获取官方解释。
答案 1 :(得分:3)
我可以想到有三个原因可以将特定值用于加电IP:
wikipedia articles指出8086的设计使得以前处理器的汇编源代码很容易转换以与8086一起工作,但就是这样。除此之外,没有尝试使其与以前的型号兼容。
答案 2 :(得分:0)
1)在8085中,复位后pc的值为0000h。因此,唤醒程序应写在0000h位置,不能保持为空。
2)在8086中,重置CS& lP是FFFFH& 0000h和所以20位物理地址将是FFFF0 + 0000 = FFFF0H。它不应该是空的。唤醒程序(代码)总是在ROM中,ROM应该最后接口以覆盖FFFF0H。