5かいプログラムのスニペット

ニックネームでプログラムを書くときのスニペット。 アイテムを使って書く場合よりも数値的に大きい値が使いやすいのが魅力ですが、中間付近に使えない命令がいっぱいあるのが曲者。 通常書けない命令を言い換えてうまくかけるようにしました。 0x50に関してはうまく処理してください。

ロード系

ld a, 00

お馴染みのxorです。x86ではむしろこっちがデフォルト感すらある。

AF; xor a ョ 

ld a, FF

0x00-0x01は0xFFです。

AF; xor a ョ
3D; dec a べ キャリー立たないらしい

ld [bcd], 00

decする方法

0x05を入れてから5回decする以上に良い方法が見つかりません。濁点多くてちょっと面倒。

06 05; ld b, 05 ギガ
05; dec b ガ
05; dec b ガ
05; dec b ガ
05; dec b ガ
05; dec b ガ

ローテートする方法

ローテート使うともっと簡単にかけそうだった。コード長は若干短くなった。

06 80; ld b, 80 ギア
BF; cp a そ (cpでキャリーを0に。ccfは使えません。)
CB 10; sla b ひヂ

リセットする方法

これたぶん最短。

06 80; ld b, 80 ギア
CB B8; res 7,b; ひく

ld a, b


AF; xor a
80; add b 同様にc,d,e,h,l,(hl)からもld可能

ジャンプ系

フラグ破壊注意、負数の場合オフセットずれ注意

jr xx

zフラグを立ててからjr zします。cp aでaレジスタとaレジスタを比較すれば当然zフラグが立ちます。

BF; cp a そ
28 xx; jr z xx ぐ[xx]

jr nz, xx

jr nzの代わりに強制のjrを置き、zの場合はそれをjr zで飛び越えるようにします。が、jr z, 02は書けないのでいくつかnopを挟むことになります。

28 05; jr z, 05 ぐガ
BF; cp a そ このcpはzを立てるためです
BF; cp a そ ここと次はnopがわりです
BF; cp a そ このへんどっかでうまく0x50をはさんでください
28 xx; jr z xx ぐ[xx]

jr c, xx

原理はjr nzと同様。

30 05; jr nc, 05 だガ
BF; cp a そ このcpはzを立てるためです
BF; cp a そ ここと次はnopがわりです
BF; cp a そ このへんどっかでうまく0x50をはさんでください
28 xx; jr z xx ぐ[xx]

tips

0x50の処分の仕方


戻る
connecting: riko.2rnd.msmrrneda.net