「オペレーティングシステム」の版間の差分

削除された内容 追加された内容
すじにくシチュー (トーク) による版 152187 を取り消し
タグ: 取り消し
→‎キーボードサービス: 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]
 
 
 
 
== 参考文献 ==