「ASMtips」の編集履歴(バックアップ)一覧に戻る
ASMtips」を以下のとおり復元します。
#contents

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

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

XYレジスタが16bitから8bitに変化した時、上位8bitは&tt(){0x00}になりますが、
Aレジスタは上位8bitも保持され、&tt(){XBA}命令で下位8bitと値を交換できます。
レジスタ間コピー系命令(&tt(){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早い

復元してよろしいですか?