0

我编写了一个子程序,通过 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。

有人可以帮我解释一下吗?调用陷阱时到底发生了什么?我认为它只是转到了内存中的另一个地址,该指令的实际代码所在的位置并执行了该地址,但我所看到的并没有反映出这一点。非常感谢任何帮助,因为这会阻止我现在完成学校项目。

谢谢!

4

1 回答 1

0

“所以从 x0000 - X00FF 是陷阱向量表。例如,如果您调用 TRAP x20,那么 PC 会转到 x20 并继续执行 x20 处的指令。(如果这不正确,请告诉我!)”

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

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

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

于 2014-10-20T08:27:57.193 回答