0x7C00 ORG //一次ブートストラップエントリ0x7C00アドレス(物理アドレス)、またはcのC ++プログラムを使用してのような主要機能を。
開始://ラベルの意味を定義し、ラベルがあるのmov斧、CS、この命令アドレス。
AXのMOV、CS
MOV SS、AX
MOV DS、AX
MOV ES、AXの
MOVのSI、MSG // msgがタグはレジスタSIにアドレスを表して示しています。アドレスは、0x0Aの命令アドレス、MSGのDBには0x0Aに表される
:印刷
MOVら、[SI] // [SI]アドレスレジスタSIに格納されていることを示すデータを取得するために、データフェッチアドレスは、[]を使用し、 C言語のアスタリスクに似ています。
//のMOVら、[SI]このステートメントが実行された後、最初のデータバイトのメモリによって指されるSIらは保存。
SIの追加、1つの // SI = SI + 1、SIは、保存されたアドレス値の具体的な意味プラス1.
CMPアル、0x00のは //データの終わりに到達していないかを判断し、最後のデータがそれを識別するために、どのようにすべきですか?
// らは0x00内に格納されるデータを決定するかどうか。もしそうであれば、オーバーです。
最終JE // JEこのディレクティブは、これはJE(ジャンプ等しい場合)の意味です。0x00の比較が等しくない、と等しい場合、ジャンプ、CMPアルを見ることです。
//それは最後のラベルが表すアドレスにジャンプ場所にジャンプ。
アルのレジスタの値が0x00ではない場合、//、それは我々がデータを印刷する必要があることを意味
0x0Eのは、のMOV AHを //パラメータを設定
MOV BX、0x0Fには //パラメータの設定
INT 0x10の 割り込みをトリガする//使用int命令を、割り込みがどのような結果にトリガされますそれは?これは、上記の画面上の文字を印刷することです。
JMPの印刷
最終: ここへ//ジャンプは、データがオーバー印刷することを意味します。
HLT //シールデータが終わって、我々は、CPUが停止させてください。そのため、使用してHLT命令
JMP最終 //無条件ジャンプ、無限ループの同等
//画面上の印刷にデータを定義
MSG:
デシベルは0x0A、0x0Aを ラップすることです0x0Aを//デシベル= DEFINEバイトはこの場所を定義する二つの連続したデータは0x0A、
DBの「ハローDIOS」 //デシベルを継続して使用する文字列を定義
0x0AのDB、0x0Aの //は、2バイトのデータを定義していき、改行
DBは0x00 // 0x00にはターミネータデータが表す
上記のコードを見て、マスターブートプログラムは、それを終え?答えは明白です、ない
マスターブートプログラムは、MBRブートマスターに配置する必要がありますので、マスターブートロゴは、それが何であるべきか?0x55をあり、0xAAを
// //このデシベルは0x55、0xAAを離れてそれで得ますか?まだです。なぜ?上記のコードは、ゼロ充填操作を使用する必要があり、明確ではない512バイトです。どのようにそれを埋めるゼロに取得するには?
510タイムズ- ($ - $$)デシベルは0x00 // $アドレスは、このコンパイル$$開始アドレスコードの代わりに、銀行は、言って、その$ - $$占有の私たちの総数を表現するためにアセンブリコードで書かれていますバイト。コードのバイト数はゼロの数を埋めるために必要に代わって、510-共有に書き込まれています。
// ノートは、この場所は510、よりもむしろ減算512から減算されます。次のdb 0x55,0xaaは、2バイトの占有するので
デシベルの0x55,0xaaを