※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


ASMtips

ASMを書く時知ってると使え無さそうなテクニックとか書きません。
誰か書いてください

8bitモードと16bitモード

AレジスタはPレジスタbit5のメモリモードフラグ(m)
XYレジスタはPレジスタbit4のインデックスモードフラグ(x)でレジスタ長が変化します。
レジスタ長の変更は基本的にREP命令とSEP命令で行います。

XYレジスタが16bitから8bitに変化した時、上位8bitは0x00になりますが、
Aレジスタは上位8bitも保持され、XBA命令で下位8bitと値を交換できます。
レジスタ間コピー系命令(Txx)を実行した時
転送されるデータ量は転送先のレジスタ長に依存します。
※:ただしTDC命令はメモリモードフラグに問わず16bit転送されます。

仕様を活用した?例
; 使ってないYレジスタを使ってちょっと高速化 使わない
REP #$20    ; A:16bit
SEP #$10    ; XY:8bit
LDY $0F     ;\ LDA $0F
TYA         ;/ AND.w #$00FFより2clock早い

; Dレジスタを使ってゼロクリア Dレジスタが0x0000であることが前提。
TDC         ; 上位8bitをゼロクリア
LDA $0F     ;\  LDA $0F
REP #$20    ; | REP #$20
            ;/  AND.w #$00FFより3clock早い

; Aレジスタ上位8bitに退避させる
LDA $00     ;
XBA         ; PHAの代わり
LDA $02     ;
STA $00     ;
XBA         ;\ PLAの代わり
STA $02     ;/ XBAはPLAより1clock早い

逆アセンブル

どなたが作ったサイトがあります。
disのあとに逆アセンブルしたいデータをコピペして、Submitしましょう。
逆アセンブルしたデータを改変し、アセンブルするときはラベル名に気をつけましょう。
データサイズが違うとき、上手くラベル移動できないかもしれません。