如果在8085,SP = 0000H,如果执行PUSH B指令,该寄存器将存储哪些存储单元?
寄存器B的内容是存储在FFFF,C存储在FFFE吗?
答案 0 :(得分:1)
(编辑)的
啊,我现在看到了这个问题。这当然不是真实世界代码中出现的情况。代码通常从此体系结构中的低内存开始加载,上面有数据和堆栈,因此在引发此情况之前,程序将被覆盖。
官方英特尔数据表或我发现的任何其他文档中都没有迹象表明在堆栈指针下溢时会触发中断。
所以我确实希望指令递增/递减SP寄存器而不试图检查溢出,因此内存寻址确实会从0000变为FFFF。由于行为 未指定,因此制造商没有理由为此案例浪费门测试并以任何其他方式处理它。
但是,官方答案可能是这是未指定的行为。为了解决这个问题,你必须找到最初设计这种架构的英特尔的声明。我已经做了一些搜索(如上所述),但我根本没有看到任何绝对的东西。
由于我无法看到任何理由在正常情况下会出现这种情况,或者任何使用它的行为......我很想将上述所有内容减少到“Mu”的禅宗总和。
答案 1 :(得分:0)
因此,为了回答这个问题,我们需要真正理解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