【问题标题】:What is the expected result when pushing onto a full (virtual) CPU stack?推送到完整(虚拟)CPU 堆栈时的预期结果是什么?
【发布时间】: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 堆栈时的预期结果是什么?

【问题讨论】:

    标签: stack cpu


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多