[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 6. BSR (分支到子过程) 指令

注意:本文经过原作者授权转译,转载请标明出处

原文地址:http://mrjester.hapisan.com/04_MC68/Sect05Part06/Index.html

条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正

译文:

"有的父母说是玩具枪让他们的孩子变得好斗。但是事实上如果你给他一个橡胶做的鸭子玩具,他也会像拿着手枪一样握着鸭子的脖子,然后对着你大叫一声:嘭!" ---- 乔治 威尔 (George Will)

简介

BSR (Branch to SubRoutine) - 分支到子过程

这条指令会把目的操作数的内容加到PC里,然后把返回地址放到里,然后 m68k 会从PC里的地址处继续执行

例子

这个例子跟JSR指令的例子很像,只有一点点的区别 (和BRAJMP的区别差不多),比如:

    bsr.s      Subroutine
    jmp        Continue

  Subroutine:
    rts

  Continue:
    ...etc

很明显:

  • bsr.s Subroutine会让 m68k 分支到Subroutine:处然后保存返回地址到
  • rts会从中读取返回地址然后让程序返回到bsr.s Subroutine的下一条指令

这部分你在读了 第五章第五节 (JSR & RTS) 之后应当很清楚了已经

同样的,BSRJSR最大的区别在于指令在内存的存储方式和处理器执行指令需要的时间。BSR指令比较类似于BRA,你可以指定两种指令所使用的长度:.s表示短整型.w表示一个

对于bsr.s来说,附加的偏移值只有一个字节大小,而且是个有符号数,也就是说向前可以分支的最大字节数是7E,向后分支的最大字节数是80,所以显然BSR没有JSR跳转的距离远

对于bsr.w来说,附加的偏移值只有一个大小,而且是个有符号数,也就是说向前可以分支的最大字节数是7FFE,向后分支的最大字节数是8000

如你所见,bsr.w的分支范围比bsr.s要大,但仍然原小于JSR的跳转能力

用法

就像BRAJMP一样,在BSRJSR之间的选择上,你可能希望使用又快又小的那个,下面是一张他们跳转能力的表格:

指令 内存形式/长度 范围
bsr.s 61 ?? 向前或向后7E字节
bsr.w 61 00 ?? ?? 向前或向后7FFE字节
jsr 4E B9 00 ?? ?? ?? 000000 - FFFFFF (无限制)

当然,你的优先级是:
优先级是:

    bsr.s -> bsr.w -> jsr

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 5. JSR & RTS (子过程调用/返回) 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 1. CCR (状态字寄存器)

[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 6. BSR (分支到子过程) 指令

上一篇:appium-滑动解释 0.9 0.5 0.1 啥意思?


下一篇:关于如何在Vue项目中使用vw实现移动端适配