[FM]FULLMSX for BLOG

詳しいMSXパソコンなどの情報はホームページで!
https://fullmsx.web.fc2.com/

MSXマシン語適当講座 BIT命令 チートなビット操作 BASICで試してみる

2011-11-23 20:08:13 | MSXマシン語適当講座

 またまた問題になってきました。
今回は本格的にビット操作命令を解説します。
ビットは0,1をリセット、セットする命令、
 何ビット目を読むかという命令です。
実はパソコンはビット演算から生まれて計算ができました。
 でも、チートなビット演算はどのように使うのかがわかりません。
今回はビットを見てみましょう。
□□□■■■■■
これは1Fhです。
4ビットを境にして上位下位ビットという所に注目します。
上位は□□□■で1hです。下位は■■■■です。Fhです。
これに7ビットをセットします。

SET 7,A

そうすると■□□■で1hが9hになりましたね。
では確認してみましょう。

BIT  7,A

これを実行するとZフラグが変化します。

RES  7,A

これで元に戻ります。
さて、今回はこの命令を活用してみます。

CレジスタFh、Bレジスタの3Ehを
FEHに変える場合はAレジスタは0、
3Fhに変える場合はAレジスタは1になります。
前回からつなげるとプログラムは3番目になります。
ビット演算とは一言で言えば…
「そんなのズルいぞ!ちゃんと計算しろ!」と、
言いたくなりそうな感じがします。
2番目はBASICにしたものを書いてからマシン語にします。

;A:  0-HI 1-LOW
             LD    A,0
             LD    B,3Eh
             LD    C,Fh
             CP    1
             JP     Z,BIT1              
             LD    A,C

BIT0     :CALL BIT00
             CALL BIT01
             CALL BIT02
             CALL BIT03 
             RET
BIT1     :LD    A,C
             CALL BIT10
             CALL BIT11
             CALL BIT12
             CALL BIT13
             RET

;4BIT_MOVE_HI
BIT00:   BIT    0,A
             JR      Z,ZERO00
             SET   4,B
             RET
ZERO00:RES   4,B
             RET
BIT01:   BIT    1,A
             JR      Z,ZERO01
             SET   5,B
             RET
ZERO01:RES   5,B
             RET
BIT02:   BIT    2,A
             JR      Z,ZERO02
             SET   6,B
             RET
ZERO02:RES   6,B
             RET
BIT03:   BIT    3,A
             JR      Z,ZERO03
             SET   7,B
             RET
ZERO03:RES   7,B
             RET
;4BIT_MOVE_LOW
BIT10:    BIT 0,A
              JR Z,ZERO10
              SET 0,B
              RET
ZERO10: RES 0,B
              RET
BIT11:    BIT 1,A
              JR Z,ZERO11
              SET 1,B
              RET
ZERO11: RES 1,B
              RET
BIT12:    BIT 2,A
              JR Z,ZERO12
              SET 2,B
              RET
ZERO12: RES 2,B
              RET
BIT013:  BIT 3,A
              JR Z,ZERO13
              SET 3,B
              RET
 ZERO13:RES 3,B
              RET

 かなり適当ですがフラグを調べるとzフラグが変化するだけなので、
サブルーチンでやってみました。
最初にAレジスタに0か1かを入れて分岐させるようにしました。
プログラムをする時はzフラグにしますがプログラムの途中ですから

Aレジスタに代入することにしています。
 4ビットを1ビットごとに調べてコピーしています。
さて、プログラム2に戻ります。
まぁ、プログラムは今までと同じ命令の繰り返しです。

100 X=1:Y=100
110 A=x:B=0:H=0
120 REM
130 'MOD1
140 IF A=1 GOTO 240
150 'z \ & div/0
160 IF A=0 GOTO 240
170 A=A-2
180 B=B+1
190 'C MOD
200 IF A<2 GOTO 230
210 '
220 GOTO 160
230 PRINT B,A

という感じです。
140行は座標が1で割れない場合の分岐です。
160行は数が割り切れて0、または数値が0の分岐です。
200行は割り切れない場合の分岐です。
と、このようなプログラムをマシン語化して次回はやります、
MSXBASICはマシン語作成の補助として使うことができますね。

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« MSXマシン語適当講座 「なが... | トップ | MSXマシン語適当講座 フラグ... »
最新の画像もっと見る

コメントを投稿

MSXマシン語適当講座」カテゴリの最新記事