这是一个给我带来很多麻烦的问题,但我需要在两周后的期末考试中理解这个问题。我不知道这是否是用词,但我不知道如何得出具体的答案。以下是一个问题:
“鲍勃计划改变LC-3陷阱指令的机制。他有两个想法:利用陷阱指令的8:11位。陷阱例程的第一条指令存储在陷阱指令中指定的地址,而不是陷阱例程的起始地址。在他的新设计中,他仍然希望实现与原来的LC-3陷阱相同的陷阱例程。计算一下每个陷阱例程在新设计中平均会有多少行指令。”
我知道陷阱有三个基本的陷阱矢量,x20,x25和x23?“多少行指令”到底是什么意思?
发布于 2015-04-25 08:19:56
您的班是否使用Mc Graw Hill LC-3模拟器?因为阅读他们的文本的陷阱命令,比特8:11甚至没有发送到MAR从内存,他们只是删除。只使用位7:0,因为它们指向陷阱向量表中的位置。

通过x0000到x00FF的内存位置(总共256个)可用于包含由相应的陷阱向量指定的系统调用的起始地址。这个内存区域被称为陷阱向量表。
向量表只使用它的256个可用陷阱向量中的6个,因此您可以进行250次自己的陷阱调用。
在尝试了"Bob“试图做的事情之后,我得到了以下错误:"1024不能表示为8位陷阱向量”,并且当我尝试手动填写我自己的陷阱调用(ex )时。TRAP400 .FILL xF400;是1111010万),它不会运行它的子例程。
话虽如此,你的问题只能意味着鲍勃正在制作他自己版本的LC-3,并希望增加他可以使用的陷阱向量的数量。如果是这样,那么使用位11:0,他可以有4,095个陷阱命令,或者4,089,如果你不包括原始的6。
我希望这能帮上忙。
发布于 2015-04-25 16:40:52
这很模糊。Trap子例程的大小与执行特定函数所需的大小相同。但是,如果只计算子例程中所需的行数,则至少需要7行(如果只希望例程返回到调用它的命令,则至少需要1行)。
看看陷阱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命令来返回到调用例程的命令。
https://stackoverflow.com/questions/29861666
复制相似问题