如果在 8085 中,SP=0000H,执行 PUSH B 指令时,将存储哪些寄存器在哪些内存位置?
会不会是寄存器B的内容会存放在FFFF,C存放在FFFE?
如果在 8085 中,SP=0000H,执行 PUSH B 指令时,将存储哪些寄存器在哪些内存位置?
会不会是寄存器B的内容会存放在FFFF,C存放在FFFE?
(已编辑)
啊,我现在看到问题了。
当然,这通常不会出现在实际代码中。在这种架构中,代码通常从低内存开始加载,上面有数据和堆栈,因此在引发这种情况之前程序会被覆盖。
英特尔官方数据表或我发现的任何其他文档中没有任何迹象表明堆栈指针下溢会触发中断。
所以我确实希望指令增加/减少 SP 寄存器而不尝试检查溢出,因此内存寻址确实会从 0000 变为 FFFF。由于行为未指定,制造商没有理由为此案例浪费门测试并以任何其他方式处理它。
但是,官方的回答可能是,这是未指定的行为。要确定这一点,您必须找到最初设计此架构的英特尔的声明。我做了一些搜索(如上所述),但我根本看不到任何绝对的东西。
由于我看不出在正常情况下会出现这种情况的任何原因,或任何挑起它的用处……我很想将以上所有内容简化为“无”的禅宗总和。
所以为了回答这个问题,我们需要真正了解 PUSH 指令在 8085 中是如何工作的。考虑以下情况:
Register B has contents 0xAA
Register C has contents 0xBB
SP = 0x0000
现在,让我们假设遇到的指令是 PUSH。PUSH指令先将堆栈指针SP减
B -> 0xAA
C -> 0xBB
SP -> 0xFFFF
然后存储高位寄存器,再次递减,然后也存储低位寄存器。
B -> 0xAA
C -> 0xBB
0xFFFF -> 0xAA
0xFFFE -> 0xBB
SP -> 0xFFFE