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しましょう。
逆アセンブルしたデータを改変し、アセンブルするときはラベル名に気をつけましょう。
データサイズが違うとき、上手くラベル移動できないかもしれません。
最終更新:2016年03月07日 16:49