BR可以在一定程度上替代JSR吗?(LC-3)

时间:2019-07-02 14:02:48

标签: lc3

我认为如果将BR之后的指令的地址放到R7中,然后跳转到该子例程的地址,在某种程度上只是JSR吗?我想问一下BR和JSR有什么区别使其与众不同。

1 个答案:

答案 0 :(得分:0)

  

我想问一下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则没有。)