问题描述
我无法理解8085-86中CS:IP
生成的物理地址的不同起始地址.这是因为堆栈吗?我认为Stack的概念是在8085之前出现的.请帮忙.谢谢.
我可以想到3个原因,可以将特定值用于启动IP:
- 惯例-同一家族/品牌的其他加工商使用相同的位置,他们希望给客户一种熟悉感
- 兼容性 出于某些目的,某些区域受到限制或扩大.例如, 6502 具有特殊的更快指令,用于访问从0x00到0xff的前256个字节的内存.在该CPU上,让CPU在其他地方启动是很有意义的. (不过,我认为8086不会特别对待任何内存区域.)
除了兼容性和约定问题外,处理器上电时指令指针获得的值在很大程度上是任意的.对于大多数模型而言,IP最初位于其地址空间的顶部(足够远的JMP调用空间以使其到达真正的初始代码所在的位置)或位于其底部(即0). >
维基百科 文章指出,8086的设计是为了容易地转换来转换与8086一起使用的以前处理器的汇编源代码,仅此而已.除此之外,没有尝试使其与以前的模型兼容.
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.
There are 3 reasons I can think of that a particular value could be used for the powerup IP:
- convention - other processors in the same family/brand use the same location, and they want to give their customers a sense of familiarity
- compatibility
- 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.
这篇关于为什么8085从00000开始而8086从FFFF0开始?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!