BR能否在一定程度上替代JSR?(LC-3)

Can BR replace JSR to a certain extent?(LC-3)

我觉得把BR后面那条指令的地址放到R7然后跳转到subroutine.Is的地址在某种程度上就是JSR了?请问有什么区别BR 和 JSR 之间的区别使它们与众不同。

I'd like to ask what's the difference between BR and JSR that makes them distinct.

JSR设置R7指向JSR之后的指令。这就是 BR 与 JSR 的不同之处。

(还有一个小区别。JSR 的范围要长得多,因为它使用 11 位偏移量而不是 9 位偏移量,这让它可以到达 4 倍远的标签。)

Can BR replace JSR to a certain extent?

是的。如果由于某种原因您不能使用 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 没有。)