使用自定义LC-3陷阱程序

时间:2014-10-19 04:44:51

标签: lc3 lc3-trap

我写了一个子程序,用作Trap x26的Trap调用。我的子程序代码位于地址x3300。我无法弄清楚如何从x26跳到x3300子程序的实际指令,因为间隙大于JSR的PC偏移参数允许。我知道我可以在x26附近添加一些代码,以便可以一直跳到x3300,但我不认为这是我应该怎么做的。我想我一般都缺少理解陷阱的东西。

这里是我对陷阱的理解/困惑:所以从x0000到X00FF是陷阱向量表。例如,如果您调用TRAP x20,则PC将转到x20并继续执行x20处的指令。 (如果这不正确,请告诉我!)此时我很困惑,因为在LC-3的地址x20是一个BRZ x0021命令,它将PC带到x21。在x21,有一个BRZ x52命令。执行此分支以转到x52加上PC时,命令为TRAP x00。大多数Trap 20的命令似乎都是这些(看起来像)无意义的陷阱命令。执行陷阱x00后,程序进入xFD79。这真让我感到困惑,因为在内存中的x00处,只有另一个TRAP x00。对我来说,似乎程序应该转到x00而不是xFD79。

有人可以帮我解释一下吗?调用陷阱时究竟发生了什么?我以为它只是去了内存中的另一个地址,其中指令的实际代码是执行的,但我所看到的并没有反映出来。非常感谢任何帮助,因为这使我无法立即完成学校项目。

谢谢!

1 个答案:

答案 0 :(得分:0)

"因此,从x0000 - X00FF是陷阱向量表。例如,如果调用TRAP x20,则PC转到x20并继续执行x20处的指令。 (如果这不正确,请告诉我!)"

这是正确的,但下一句......

"此时我很困惑,因为在LC-3的地址x20是BRZ x0021命令,它将PC带到x21"

你看到的看起来像BRz的命令实际上并不是一条指令。这是一个地址! x0400将是一个相当无用的命令 - 它的PC偏移为零,所以它只是进入下一行。如果您将其解释为地址,并在陷阱调用中转到该地址,您将找到其余的陷阱指令。