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