|
90:キーコード変換 -- K 10/18 14:04 >おぉぉ!!! 文字がいろいろと表示できる!けっこうたのしいぞ!! おめでとうございます。 >いろいろと考えてみたんだけど、やっぱほかにいい方法がみつからないや。もういいや!絨毯爆撃で! ちょっとだけヒントを書くことにしようかな。 アセンブラでもCでも同じことですが、この手のコードをifのかたまりやswitchのかたまりで書くのは良くないことです。C言語であれば、 static char table[] = { 0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^', '\b', '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[', '\n', 0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0, 0, ']', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 0, '*' (以下略) }; とやっておいて、 j = table[i]; とでもすれば、一発でキーコードから文字コードにできます。 おなじことをnaskですることもちろんできて、 ; 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, '*' (以下略) 僕の書いた意味が理解できたら使ってみてください。 理解できなければ今のままCMP+JEで書くほうがいいと思います。 MOVしか使ってないので、努力すれば理解できるのではないかと思って書いてみました。 ちなみに、'A'などの表現が見慣れないかもしれませんが、これは0x41のことです。 MOV AL,'A' とかもできます。 |