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