「ASMtips」の編集履歴(バックアップ)一覧はこちら

ASMtips」(2016/03/07 (月) 16:49:43) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#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早い
#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早い **逆アセンブル [[どなたが作ったサイト>https://floating.muncher.se/cgi-bin/alcarobot?cmd=dis+A5+D0+8D+55+AD+6B]]があります。 disのあとに逆アセンブルしたいデータをコピペして、Submitしましょう。 逆アセンブルしたデータを改変し、アセンブルするときはラベル名に気をつけましょう。 データサイズが違うとき、上手くラベル移動できないかもしれません。

表示オプション

横に並べて表示:
変化行の前後のみ表示: