1

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

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

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

4

2 回答 2

0

这很模糊。Trap 子例程与执行特定功能所需的一样大。但是,如果您只计算子例程中所需的行数,那么您至少需要 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 命令来返回调用例程的命令。

于 2015-04-25T16:40:52.030 回答
0

您的班级是否使用 Mc Graw Hill LC-3 模拟器?因为通过 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 个。

我希望这会有所帮助。

于 2015-04-25T08:19:56.293 回答