推入完整(虚拟)CPU 堆栈时的预期结果是什么?

What is the expected result when pushing onto a full (virtual) CPU stack?

将问题发布到名为 Whosebug 的网站时有些讽刺 - 但这里是。

我有以下要在软件中实现的虚拟 CPU 的规范(我选择 Java)。

Each CPU of this virtual computer contains two address registers, two numeric registers, a flags register to indicate error conditions, a stack pointer, a ten word stack, and an instruction pointer

对于我的ten word stack,我需要定义当它已满时推送到它时会发生什么。规范的作者将此保留为假定知识。

CPU 的结构(如果假设在 C 中定义) - 定义如下:

struct cpu {  /* structure for registers of virtual cpu */
int   ax;  /* address register */
int   bx;  /* address register */
int   cx;  /* numerical register */
int   dx;  /* numerical register */
char  fl;  /* flag */
char  sp;  /* stack pointer */
int   st[10];  /* stack */
int ip; /* instruction pointer */ }

我对堆栈的CPU操作是:

case 0x0c: push_ax(ci);  break; /* push ax on stack */
case 0x0d: push_bx(ci);  break; /* push bx on stack */
case 0x0e: push_cx(ci);  break; /* push cx on stack */
case 0x0f: push_dx(ci);  break; /* push dx on stack */
case 0x10: pop_ax(ci);   break; /* pop to of stack into ax */
case 0x11: pop_bx(ci);   break; /* pop to of stack into bx */
case 0x12: pop_cx(ci);   break; /* pop to of stack into cx */
case 0x13: pop_dx(ci);   break; /* pop to of stack into dx */

在这种情况下出现堆栈溢出是否正常? (推到一个完整的堆栈)。

另一种假设的可能性是简单地从堆栈底部开始。 (堆叠为具有大小限制的 FIFO 队列)。

我的问题是:推入完整(虚拟)CPU 堆栈时的预期结果是什么?

您可以将其视为程序中的软件错误 运行 并引发某种形式的硬件异常。与遇到被零除时的处理方式相同。