最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
遠くの関数に飛ぶときには、blhマクロを利用すると便利です。
.macro blh to, reg=r3 ldr \reg, =\to mov lr, \reg .short 0xf800 .endm ;利用方法 blh 0x08AABBCC
b、bl、blh(macro)、は、自転車と車と飛行機のようなものです。
近くのコンビニに、飛行機で行くのは無駄です。
だから、近くのコンビニには、自転車で行きます。
1000km向こうの遠くの都市にいくときに、自転車で行くのは無謀です。
車でも辛いでしょう。
だから、飛行機を使います。
これと同じように、道具を使い分けます。
bは、近場だけに飛べます。
たいていは、同一関数内で利用されます。
近所のコンビニに自転車で行くようなものです。
blは、近郊に飛べます。
たいていは、同一のソフトウェアの関数郡の中で利用されます。
郊外の量販店に行く時に、車を使うようなものです。
多少遠くには飛べますが、とても遠くには飛べません。
また、lr(r14)レジスタに呼び出し元を記録するので、呼び出し元に簡単に戻ることが出来ます。
blh(macro)は、どこにでも呼べます。
1000km向こうの遠くの都市に行く時に飛行機を利用するようなものです。
どこに配置されるかわからないパッチでは、これを利用します。
blhの実装方法は複数あります。
呼び出すときに、レジスタを一つ使用します。
ディフォルトではr3が利用されます。
EAでのJumpToHackもr3を利用します。
r3である理由は特にないので、r0-r7の、別のレジスタを使用してもいいでしょう。
また、アドレスを格納するので、8バイト利用します。
また、4の倍数でない場所では利用できません。
その場合、余白をnopを埋めるので、合計10バイト利用します。
b | 2バイト | 近場のみ(自転車) |
bl | 4バイト | 近郊のみ(車) |
blh | 8バイトor10バイト | どこでも(飛行機) |