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

削除された内容 追加された内容
編集の要約なし
M source
807 行
 
なので、このために
<sourcesyntaxhighlight lang="asm">
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
をどこかに書き込む必要があります。
 
839 行
;コード例
:(※ 実際に動く。 windows7 上の qemu で動作を確認。)
<sourcesyntaxhighlight lang="asm">
mov ah, 0x0e ; 1文字出力
mov al, 'H'
845 行
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
 
成功すれば、
882 行
;コード例 『基本』
:(※ 実際に動きます。 windows7 上の qemu で動作を確認。)
<sourcesyntaxhighlight lang="asm">
mov ah, 0x0e ; 1文字出力
mov al, 'H'
901 行
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
 
でブート後に「Hello」と表示できます。
914 行
;コード例 『発展』
:(※ 実際に動きます。 windows7 上の qemu で動作を確認。)
<sourcesyntaxhighlight lang="asm">
org 0x7c00
 
941 行
 
owari:
</syntaxhighlight>
</source>
 
;org 0x7c00
1,019 行
 
;コード例1
<sourcesyntaxhighlight lang="asm">
org 0x7c00
mov ah, 0x0e ; 1文字出力を設定
1,043 行
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
 
解説
 
lodsb の内容は
<sourcesyntaxhighlight lang="asm">
mov al, [ai]
inc si
</syntaxhighlight>
</source>
と同じである。
 
1,070 行
 
;コード例2
<sourcesyntaxhighlight lang="asm">
org 0x7c00
mov ah, 0x0e ; 1文字出力を設定
1,094 行
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
 
 
1,103 行
まず、設定として、
 
<sourcesyntaxhighlight lang="asm">
mov al, 0x13
mov ah,0x00
int 0x10
</syntaxhighlight>
</source>
 
というコードが必要です。
1,181 行
 
;コード例 1
<sourcesyntaxhighlight lang="asm">
mov AL, 0x13 ; ビデオモード0x13
mov AH, 0x00
1,227 行
times 510 - ($-$$) db 0
dw 0xAA55
</syntaxhighlight>
</source>
 
 
1,273 行
 
なお、上記コード例1で
<sourcesyntaxhighlight lang="asm">
mov AX, 0xa000
mov DS, AX
</syntaxhighlight>
</source>
とあるが、
 
 
これを、(下記はエラーになる)
<sourcesyntaxhighlight lang="asm">
mov DS, 0xa000
</syntaxhighlight>
</source>
とまとめても、なぜかエラーになる。
 
1,305 行
 
なので、まず
<sourcesyntaxhighlight lang="asm">
mov ax, 0xb800
</syntaxhighlight>
</source>
と指定します。
 
1,419 行
 
;コード例
<sourcesyntaxhighlight lang="asm">
mov ah, 0x0e ; 1文字出力
mov al, 'p' ; 「pushしろ」・・・のつもり
1,452 行
db 0x55 , 0xaa
 
</syntaxhighlight>
</source>
 
 
1,480 行
 
;コード例
<sourcesyntaxhighlight lang="asm">
mov al, 'p' ; 「push e」と表示の予定
int 0x10
1,516 行
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</syntaxhighlight>
</source>
 
 
1,576 行
次のようなコードを使えばledが点滅するらしいのだが、しかしエミュレータでの実験では分からなかった(Windows起動により、すでにLEDが点灯しているので、区別しづらい)。
 
<sourcesyntaxhighlight lang="asm">
mov al, 0xED
out 0x60, al
</syntaxhighlight>
</source>
 
0xED というのは、LED点灯に関する命令の番号。
1,622 行
 
;コード例
<sourcesyntaxhighlight lang="asm">
mov eax, cr0 ;
or ax, 1 ;
1,635 行
mov gs, ax
 
</syntaxhighlight>
</source>
 
;解説
cr0レジスタの最下位ビット(PEビットという)が1だとプロテクトモードである、という仕様である。
<sourcesyntaxhighlight lang="asm">
mov eax, cr0
or ax, 1
mov cr0, eax
</syntaxhighlight>
</source>
の3行の処理で、cr0レジスタの最下位ビットを1に設定している。なお、このcr0の最下位ビットのことをプロテクト・エネーブルド pr0tect enebled という意味でPEビットという。