[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 6. BSR (分支到子过程) 指令
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect05Part06/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"有的父母说是玩具枪让他们的孩子变得好斗。但是事实上如果你给他一个橡胶做的鸭子玩具,他也会像拿着手枪一样握着鸭子的脖子,然后对着你大叫一声:嘭!" ---- 乔治 威尔 (George Will)
简介
BSR (Branch to SubRoutine) - 分支到子过程
这条指令会把目的操作数
的内容加到PC
里,然后把返回地址放到栈
里,然后 m68k 会从PC
里的地址处继续执行
例子
这个例子跟JSR
指令的例子很像,只有一点点的区别 (和BRA
与JMP
的区别差不多),比如:
bsr.s Subroutine
jmp Continue
Subroutine:
rts
Continue:
...etc
很明显:
bsr.s Subroutine
会让 m68k 分支到Subroutine:
处然后保存返回地址到栈
rts
会从栈
中读取返回地址然后让程序返回到bsr.s Subroutine
的下一条指令
这部分你在读了 第五章第五节 (JSR & RTS) 之后应当很清楚了已经
同样的,BSR
和JSR
最大的区别在于指令在内存的存储方式和处理器执行指令需要的时间。BSR
指令比较类似于BRA
,你可以指定两种指令所使用的长度:.s
表示短整型
而.w
表示一个字
对于bsr.s
来说,附加的偏移值只有一个字节
大小,而且是个有符号数,也就是说向前可以分支的最大字节数是7E
,向后分支的最大字节数是80
,所以显然BSR
没有JSR
跳转的距离远
对于bsr.w
来说,附加的偏移值只有一个字
大小,而且是个有符号数,也就是说向前可以分支的最大字节数是7FFE
,向后分支的最大字节数是8000
如你所见,bsr.w
的分支范围比bsr.s
要大,但仍然原小于JSR
的跳转能力
用法
就像BRA
和JMP
一样,在BSR
与JSR
之间的选择上,你可能希望使用又快又小的那个,下面是一张他们跳转能力的表格:
指令 |
内存形式/长度 |
范围 |
---|---|---|
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 (状态字寄存器)