「オペレーティングシステム」の版間の差分
削除された内容 追加された内容
タグ: 取り消し |
→キーボードサービス: in命令で動くコード例を追加 |
||
1,339 行
たとえば、下記のようなコードで、キーボードの文字「E」または前後のWかRを押すと、1行ぶん下の位置に文字「G」が表示される。
;コード例
<source lang="asm">
mov al, 'p' ; 「push e」と表示の予定
int 0x10
mov al, 'u'
int 0x10
mov al, 's'
int 0x10
mov al, 'h'
int 0x10
mov al, ' '
int 0x10
mov al, 'E'
int 0x10
mov al, 0x0a ;改行の指示
int 0x10
.LOOP:
in al, 0x60 ; in al, 0x0060 でもよい
cmp al, 18 ; 値が文字 'E' かどうか判定のつもり
jne .LOOP ; 偽なら LOOP 冒頭にジャンプ
mov ah, 0x0e ; 1文字出力
mov al, 'G'
int 0x10
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</source>
1,345 ⟶ 1,384行目:
このスキャンコードは、アスキーコードとは異なります。
上記コード例にある
cmp al, 18
の数値「18」とは、スキャンコードでの番号です。だいたいスキャンコードで18番のあたりが文字 W,E,R のどれかのあたりです。
1,400 ⟶ 1,443行目:
[https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf 『IA-32 インテル®アーキテクチャソフトウェア・デベロッパーズ・マニュアル』『中巻A:命令セット・リファレンスA-M』3-411]
== 参考文献 ==
|