gdbを使用してxv6(教育用OS)での起動を理解しようとしています。
初期ブート中の命令の 1 つ (AT&T 構文) は次のとおりです。
cmpl 0x0,%cs:0x65a4
その後、
jne 0xfd2b9
今、私が理解していることから、cmpl は 2 つの値を比較してフラグを設定し、jne はフラグを見て、比較したばかりの値が等しくない場合はジャンプします。
しかし、オペランドとしての %cs:0x65a4 の意味がわかりません。これはアドレスの値 (cs*16 + 65a4) を参照していますか、それともそのメモリ位置の実際の内容を参照していますか?
システムが jne 命令の後にジャンプしないためです。つまり、2 番目のオペランド (%cs:0x65a4) がゼロに評価されます。しかし、アドレスもその内容もゼロではないため、そうすべきではありません。