【发布时间】:2017-03-30 11:47:13
【问题描述】:
将问题发布到名为 stackoverflow 的网站时有点讽刺 - 但这里就是这样。
对于要在软件中实现的虚拟 CPU,我有以下规范(我选择 Java)。
此虚拟计算机的每个 CPU 包含两个地址寄存器、两个数字寄存器、一个指示错误条件的标志寄存器、一个堆栈指针、一个十字堆栈和一个指令指针
对于我的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 堆栈时的预期结果是什么?
【问题讨论】: