LC3 TRAP的说明

时间:2015-04-25 06:07:49

标签: lc3 lc3-trap

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

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

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

2 个答案:

答案 0 :(得分:0)

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

copyright Mc Graw Hill

  

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

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

在尝试了什么" Bob"试图做我得到以下错误" 1024不能表示为8位陷阱向量"当我尝试手动填写我自己的陷阱呼叫时(例如TRAP400 .FILL xF400;这是1111 0100 0000 0000)它不会运行它的子程序。

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

我希望有所帮助。

答案 1 :(得分: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命令来返回调用例程的命令。

相关问题