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 没有。)
我觉得把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 没有。)