【问题标题】:LC3 TRAP's InstructionsLC3 TRAP 的说明
【发布时间】:2015-04-25 06:07:49
【问题描述】:

这是一个给我带来很多麻烦的问题,但我需要在 2 周后的期末考试中理解它。我不知道这是否是措辞,但我不知道如何得出具体答案。问题来了:

“Bob 计划对 LC-3 TRAP 指令的机制进行更改。他有两个想法: 利用 TRAP 指令的位 [8:11]。 陷阱例程的第一条指令存储在 TRAP 指令中指定的地址,而不是陷阱例程的起始地址。 在他的新设计中,他仍然希望实现与原始 LC-3 TRAP 一样多的 TRAP 例程。计算每个 TRAP 例程在他的新设计中平均有多少行指令。”

我知道 TRAP 有 3 个基本的 TRAP 向量,x20、x25 和 x23? “多少行指令”甚至是什么意思?

【问题讨论】:

    标签: lc3 lc3-trap


    【解决方案1】:

    您的班级是否使用 Mc Graw Hill LC-3 Simulator?因为通过 TRAP 命令读取它们的文本,位 [8:11] 甚至没有发送到 MAR 以从内存中加载,它们只是被丢弃了。仅使用位 [7:0],因为它们指向陷阱向量表中的位置。


    内存位置 x0000 到 x00FF,总共 256 个,可用于 包含由它们指定的系统调用的起始地址 对应的陷阱向量。这个内存区域称为陷阱 向量表。

    向量表仅使用了 256 个可用陷阱向量中的 6 个,因此您可以进行 250 个自己的陷阱调用。


    在尝试“Bob”尝试执行的操作后,我收到以下错误“1024 无法表示为 8 位陷阱向量”,当我尝试手动填写自己的陷阱调用(例如 TRAP400 .FILL xF400 ;即 1111 0100 0000 0000) 它不会运行它的子程序。


    话虽如此,您的问题只能说明 Bob 正在制作他自己的版本的 LC-3,并希望增加他可以使用的陷阱向量的数量。如果是这种情况,那么使用位 [11:0] 他可能有 4,095 个陷阱命令,如果不包括原来的 6 个,他可能有 4,089 个。

    我希望这会有所帮助。

    【讨论】:

    • 我也是这么想的,但我还是不确定。问题的最后一行仍然让我感到困惑,因为它询问每个 TRAP 例程将有多少行。这可能是他们对问题的措辞,但在这种情况下,它不应该是“可能有多少种不同的 TRAP 例程?”总之非常感谢。我会咨询一些助教并确认解决方案,然后尽快回复。
    【解决方案2】:

    这很模糊。 Trap 子例程与执行特定功能所需的一样大。但是,如果您只计算子例程中所需的 required 行,那么您至少需要 7 行(如果您只想让例程返回调用它的命令,则需要 1 行)。

    查看 TRAP x21 的例程,我们得到:

    .ORIG x0430 ; syscall address
        ST R7, SaveR7
        ST R1, SaveR1
    TryWrite
        LDI R1, CRTSR
        BRzp TryWrite
    WriteIt
        STI R0, CRTDR
    Return
        LD R1, SaveR1
        LD R7, SaveR7
        RET
    CRTSR   .FILL xFE04
    CRTDR   .FILL xFE06
    SaveR1  .FILL 0
    SaveR7  .FILL 0
    .END
    

    我们必须在使用它们之前保存寄存器,并在运行我们的例程后加载它们。我们需要变量来存储这些寄存器,最后我们需要一个 RET 命令来返回调用例程的命令。

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 2018-01-01
      • 2011-01-04
      • 2015-04-03
      • 2013-10-19
      相关资源
      最近更新 更多