推入完整(虚拟)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 堆栈时的预期结果是什么?
您可以将其视为程序中的软件错误 运行 并引发某种形式的硬件异常。与遇到被零除时的处理方式相同。
将问题发布到名为 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 堆栈时的预期结果是什么?
您可以将其视为程序中的软件错误 运行 并引发某种形式的硬件异常。与遇到被零除时的处理方式相同。