【问题标题】:In MARIE assembly, why does MAR sometimes contain PC-1 (as in contents of PC minus 1), but not all the time?在 MARIE 汇编中,为什么 MAR 有时会包含 PC-1(如 PC 减 1 的内容),但并非总是如此?
【发布时间】:2020-12-18 08:54:35
【问题描述】:

我在这里有点新,所以我想先弄清楚基础知识,所以我正在研究 MARIE 组装,我注意到 MAR 有时只是 PC 的值,但负 1,是否有背后的原因还是只是巧合?

现在查看它,我还注意到 IR 和 MBR 有时具有相同的值;为什么会这样?

【问题讨论】:

    标签: assembly cpu-architecture marie


    【解决方案1】:

    这不是巧合。您所看到的是(a)不同指令类型和(b)模拟器暂停显示这些寄存器的值的组合,可能在指令之间。

    MAR(内存地址寄存器)是该处理器与内存就读取/加载或写入/存储位置进行通信的唯一方式。

    MBR — 内存缓冲寄存器 — 用于保存在内存传输操作期间正在读取或写入的数据。

    MAR 用于指令获取和任何数据加载或数据存储操作。

    取指令序列涉及

    • MAR := PC
    • MBR := 内存[MAR]
    • IR := MBR

    处理器通过将 PC 值复制到 MAR 并发出读取信号来获取指令——存储器通过读取该内存位置并将其内容放入 MBR 来响应。然后处理器将MBR中的指令复制到IR中进行指令解码。

    在指令执行过程中,PC前进,通常指向下一条指令。

    如果一条指令不执行数据加载或数据存储操作(例如 SkipCond、Input、Output 的情况),那么在指令完成后,您将看到 MAR 保留了该指令的 PC,并且 PC 已经提前了,通常是 1。此外,IR 和 MBR 将保持相同的值 - 这是机器代码指令。 MAR 和 MBR 反映指令的取指。

    但是,如果指令确实执行了数据加载或数据存储操作,那么在指令完成后,您将看到 MAR 保存数据存储器的地址,而 MBR 保存传输的数据值。这些指令仍然执行指令获取——如果您在执行这些指令期间在正确的时间点观察寄存器,您将看到 IR=MBR 和 MAR=PC,但作为完成这些指令的一部分,MAR 和 MBR被重用于数据内存访问。


    所有指令都是从内存中提取的,但有些指令还会加载/存储数据。

    底线是 MAR 和 MBR 保存在最近的内存操作(无论是指令提取还是数据加载/存储)中使用的值,即使在该内存操作完成之后(直到它们被重新用于下一个指令提取)。


    在其他一些处理器上,有一个单独的指令存储器和单独的数据存储器,因此实际上有两个 MAR 和两个 MBR,而 PC 指令存储器的 MAR。这些可能是缓存,然后统一到共享主内存。

    (单独的内存称为Harvard architecture;像MARIE这样没有指令预取缓冲区或指令缓存的简单内存可以直接将PC用作MAR。如果PC在获取后更新到下一条指令,则可以获取使用 PC 作为 MAR 执行当前指令时的下一条指令。)

    【讨论】:

    • @PeterCordes,MIPS 的指令存储器与数据存储器分开。结果在 CPU 内部就好像有两个 MAR 和两个 MBR。当然,它们是统一到主存的缓存,因此它们可以同时声明哈佛和存储程序。
    • @PeterCordes,MARIE 不使用 PC 作为 MAR,因为 MAR 和 MBR 共享用于指令获取和数据读取/写入。
    • 术语:哈佛存储程序;与冯诺依曼不同的是,程序本身不能用普通的存储指令修改代码。但是操作员可以通过加载新指令对机器进行重新编程,如果计算机是以这种方式构建的,程序可以要求磁盘控制器或读卡器将数据 DMA 到程序内存中。是的,像 MIPS(和大多数现代设计)这样的统一内存前的拆分缓存是相关的,但被称为修改后的哈佛,因为程序和数据仍然为指针共享相同的地址空间,这与真正的哈佛不同。
    • 一种根本不是存储程序的计算机是 FPGA 或 ASIC。 (或者是一台较旧的机器,您可以通过手动重新布线来对其进行编程)。或者更深奥的例子,康威的“生命游戏”是图灵完备的,但“程序”和数据作为系统状态的一部分混合在一起。而且执行模型本身也不是串行的。没有“冯诺依曼瓶颈”。顺便说一句,我没有说 MARIE 确实或可以将 PC 用作 / 一个 MAR。当我说“像 MARIE”时,我只是指没有预取缓冲区,如果这就是你所指的。
    猜你喜欢
    • 2015-10-25
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多