【问题标题】:Program execution of a 64 bit hypothetical machine64位假想机的程序执行
【发布时间】:2018-08-10 10:48:41
【问题描述】:
  1. 我被要求设计一个 64 位的假想机器,我决定 将 4 位作为操作码,其余 60 位作为地址,因为 问题只希望我执行 2 个操作,这些操作是 3 的加法 整数和 2 个整数的乘法,因此 4 位指令将 就足够了。事情就是这样,我必须设计程序 执行。如果我使用 60 位地址,这意味着我会 有一个 15 位十六进制地址,这是唯一的方法吗?有人可以展示吗 我如何在没有这么多地址的情况下设计它,因为我的 设计会很乱。第一张图是问题,第二张图 是我尝试做的,这些是我给出的一些指示 第三个是16位机的镜像。是不是应该变成 这边走?因为它真的很乱。我想画机器 像第二张图片一样,只是不同的指令和 算术方程。

【问题讨论】:

  • 请先编写您的代码并向人们展示您的方法。
  • 欢迎来到 Stack Overflow! Stack Overflow 不是一个讨论论坛,它是一个问答网站,您可以在其中提出可以回答而不是讨论的特定编程问题。请阅读How do I ask a good question?What topics can I ask about here?,然后编辑您的问题以符合站点指南。诸如此类的离题问题通常会关闭,但如果经过编辑以提出可回答问题,则可以再次重新打开。谢谢。
  • 大多数 64 位 RISC CPU 使用 32 位指令字。例如,看看 DEC Alpha AXP,它从头开始设计为 64 位(与 MIPS64 或其他扩展现有 32 位架构的其他架构不同)。除非您想在每条指令中包含很多内容,否则在拥有巨大的指令字上花费两倍的 I-cache 是没有意义的。 (例如 ARM 有谓词执行,MIPS 有大的立即数和 32 个寄存器,PowerPC 有很多操作码,而且这些仍然是 32 位指令宽度。)无论如何,我不知道你对其余部分的意思指令是一个巨大的地址。

标签: computer-science cpu-architecture cpu-registers


【解决方案1】:

假设的“16 位机器”(如第三张图所示)具有 12 位地址、16 位寄存器和 16 位指令。由于它只有一个寄存器 (AC) 来保存指令的操作数,因此它被描述为 accumulator machine。让我们从它开始设计一个假设的“64位机”。

我决定将 4 位作为操作码,其余 60 位作为地址 因为这个问题只希望我执行 2 个操作,它们是 3个整数的加法和2个整数的乘法所以4位 指导就足够了。

该问题要求列出至少 8 条指令,因此操作码字段的大小必须至少为 3 位。

事情就是这样,我必须设计程序执行。如果我要 使用 60 位地址,这意味着我将有一个 15 位的十六进制 地址,这是唯一的方法吗?

对于操作码的最大大小或指令的大小实际上没有限制。例如,让我们使用 64 位大小的固定大小指令,为操作码分配最低有效 8 位,剩下的 56 位用于保存地址。尽管您可以定义多达 2^8 = 256 个操作码,但您只需要定义 8 个。其余的可以保留为“保留”以供将来使用以添加新指令。你不必对他们说任何话。

谁能告诉我如何在没有这么多数字的情况下设计它 地址,因为我的设计会很乱

您不必使用这么大的地址。您可以使用较小的地址,例如 0x300,并隐含不重要的零(或仅将它们显式写入第一个地址)。

第二个是我尝试做的,那些是一些 我给的指示

请记住,您有两个位置可以用作指令目的地的来源; 64位AC寄存器和56位地址寻址的64位内存位置。

首先,从技术上讲,您不需要可以进行加法或乘法运算的指令,因为这些指令可以使用其他指令来实现。同时,无需使设计变得不必要地复杂,因此您可以继续定义加法指令和乘法指令。您还需要两条指令来向/从 AC 寄存器加载和存储内存。到目前为止,总共有 4 条指令。你还需要至少4个。

“程序执行终止”指令是必要的,但您可以将其称为“暂停”或“暂停执行”。在该指令中,可以忽略 AC 和地址字段中的值。必须更精确地定义将 AC 内容显示到屏幕上的指令。例如,您可以将其定义为“将存储在 AC 的最低有效字节中的 ASCII 字符显示到屏幕上”。或“将存储在内存中的以零结尾的 ASCII 字符串显示在屏幕上,该地址指定了 AC 的最低 56 位。”

您提出的 I/O 指令应该被接受,但您可以定义更有趣的指令。第 7 条指令可以定义为“从键盘读取一个 ASCII 字符并将其存储为 AC 的最低有效字节”。或“从键盘读取一个 ASCII 字符并将其存储在内存中 AC 指定的地址,然后将 AC 加一”。

第 8 条指令可以定义为“如果 AC 为零,则跳转到地址在内存中由地址操作数指定的地址指定的指令。”因此,如果 AC 为零,则新的下一条指令的地址存储在 PC 中,并将指令加载到 IR 中。这称为控制流指令,非常有用。其他指令可以很容易地定义,例如移位或逻辑指令。

如果您摆脱了 I/O 加载和存储指令,则可以省略插图中的 I/O 设备状态。

我将留给你编写一个将三个整数相加的程序和另一个将两个整数相乘的程序。如果您愿意,请在 cmets 中告诉我您的想法。

【讨论】:

  • 您好,感谢您提供的所有精彩建议。我想问一下,如果我要删除加载和存储 I/O 指令,我是否应该删除我在屏幕上显示内容的指令,因为我没有插图中的 I/O 设备?
  • 我是否需要第 8 条指令,因为如果 AC 为零,它会自动转到特定地址中的指令
  • 如果我删除了 I/O 设备,我怎样才能证明用户键入了你所说的 ASCII 字符?
  • @Jane 您应该选择加载和存储 I/O 指令或专用 I/O 指令(显示在屏幕上并从键盘读取),但不能同时选择两者。加载和存储 I/O 指令可用于任何 I/O 设备,因此它们更强大,但更难定义。那是因为您需要定义 I/O 地址空间以及 I/O 设备如何映射到它,包括屏幕和键盘。您可以通过在插图中的某个合适位置写入类似“假设键 'a' 被按下”之类的内容来显示用户键入的内容。
  • @Jane 如果AC为零,为什么控制会自动转移到指定地址的指令?默认情况下,无论 AC 中的值是什么,总是执行下一条连续指令。跳转指令使您能够修改此行为,以便支持循环等结构。
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2012-02-24
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多