OSを作れたらいいねぇPart2

3:続いてキー判定部
hideyosi 10/24 10:07
前回のコード。
私は、キーボードスイッチと文字コードとの対応を、CMP、JEで、だーーーっと書いた。まあ、あれでも動くから問題ないっちゃぁないんだけど、なんかカコワルイし、書くのも大変。
そんなのを晒していたら、Kタンがこんな参考コードをくれた。

---------------------------------------------------------
; ALには0x1eなどのコードが既に入っているとする。

  MOV BH,0
  MOV BL,AL
  MOV AL,[BX+table]

; これでもうALには文字コードが入っている。たくさんのCMP+JEにさようなら。

; 以下はプログラムではなくデータなので間違って実行しないような位置におく

table:
  DB 0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^', 8, 9
  DB 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[', 10, 0, 'A', 'S'
  DB 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0, 0, ']', 'Z', 'X', 'C', 'V'
  DB 'B', 'N', 'M', ',', '.', '/', 0, '*'
     (以下略)
---------------------------------------------------------

・・・ふーむ・・・
これをそのまんまパクるのも、まあありだけど、ちょっとオベンキョしてみよう。

;この時点で、例えばAボタンが押されている。つまり、
;ALには0x1eが入っているとする。
  MOV BH,0 ;BHに0を代入
  MOV BL,AL ;BLに、ALの内容をコピー。
         ;?すると、BXは、0x001e となるのか?

  MOV AL,[BX+table]
;ふむむ・・・ここら辺りがよくわからないなぁ・・・

まあいいや。とりあえず、一旦これを動かしてみよう。

・・・・・あれえぇぇぇぇぇ!?

なんか、メチャクチャな文字が表示されるぞ!? 


1-

BluesBB ©Sting_Band