こんにちは、DTOS!(中)

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を

おすすめ

転載: www.cnblogs.com/-glb/p/11701114.html
おすすめ