【发布时间】:2019-07-02 14:02:48
【问题描述】:
我想如果我把BR后面的指令地址放到R7中,然后跳转到子程序的地址。在某种程度上只是JSR吗?我想问一下BR和JSR有什么区别这使它们与众不同。
【问题讨论】:
-
有没有办法在R7中存储PC+1?
标签: lc3
我想如果我把BR后面的指令地址放到R7中,然后跳转到子程序的地址。在某种程度上只是JSR吗?我想问一下BR和JSR有什么区别这使它们与众不同。
【问题讨论】:
标签: lc3
我想问一下 BR 和 JSR 之间的区别是什么让它们与众不同。
JSR 设置 R7 指向 JSR 之后的指令。这就是 BR 与 JSR 的不同之处。
(还有一个小区别。JSR 的范围要长得多,因为它使用 11 位偏移量而不是 9 位偏移量,这让它可以到达更远 4 倍的标签。)
BR能在一定程度上替代JSR吗?
是的。如果由于某种原因您不能使用 JSR,您可以改用 BR 来解决它。
以下是使用 JSR 调用子例程的方法:
main JSR subroutine
; back from subroutine
subroutine ; do something
; ...
RET
这是使用 BR/LEA 的等效代码:
main LEA R7, return
BR subroutine
return ; back from subroutine
subroutine ; do something
; ...
RET
(注意:这并不完全等价,因为 LEA 设置 CC 寄存器,而 JSR 没有。)
【讨论】: