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