およびレジスタで使用するSS:
場合、接頭辞は必要ありません。これらのレジスターはベースとして、すでにデフォルトのセグメントになっています。ESP
EBP
ss
これが、スペースを節約するためにアセンブラが単純にそれを省略する理由かもしれません。
マシンコードに実際の SS プレフィックスを必要としないか、必要としません (配置/パディングの理由で命令を長くしたい場合を除きます)。Intel 構文逆アセンブリのSS:
は、アドレッシング モードによって暗示されるデフォルト セグメントを思い出させるためのものです。
なんらかの奇妙な理由でマシンコードに冗長な SS プレフィックスが必要な場合は、ディレクティブを使用して手動でプレフィックスをSS:
発行できます。.byte 0x36
アセンブラは raw バイトを変更しません。
主流の 32 ビット OS は、すべてのセグメント ベースが 0 であるフラット メモリ モデルを使用するため、とにかく問題になりません。そのため、ESP を EAX などの別のレジスタにコピーして、スタック var のアドレスを取得し、(%eax)
akaで逆参照して、%ds:(%eax)
同じスタック メモリをアドレス指定することができます。そのため、コンパイラはポインターがどこから来たのかを知る必要がなく、 を使用する必要もありません%ss:(%eax)
。
非フラット メモリ モードで独自の OS を作成していない場合、通常のコードでは FS または GS セグメント オーバーライド (スレッド ローカル ストレージ用) のみが役立ちます。