我无法理解8085-86中CS:IP生成的物理地址的不同起始地址。这是因为堆栈吗?我认为Stack的概念是在8085之前出现的。请帮忙。谢谢。

最佳答案

我可以想到3个原因,可以将特定值用于启动IP:


约定-同一家族/品牌的其他处理器使用相同的位置,并且他们希望给客户一种熟悉感
兼容性
出于某些目的限制或增强某些区域。例如,6502具有特殊的更快指令,用于从0x00到0xff访问存储器的前256个字节。在该CPU上,让CPU在其他地方启动是有意义的。 (不过,我认为8086并不特别对待任何内存区域。)


除了兼容性和约定问题之外,处理器上电时指令指针获得的值在很大程度上是任意的。对于大多数模型,IP最初位于其地址空间的顶部(具有足够的空间用于远距离的JMP调用以使其到达真正的初始化代码所在的位置)或位于底部(即0)。

wikipedia articles状态说明8086的设计是为了使以前处理器的程序集源代码易于转换为可与8086一起使用,仅此而已。除此之外,没有尝试使其与以前的模型兼容。

关于x86-16 - 为什么8085从00000开始而8086从FFFF0开始?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10380388/

10-10 10:32