11

私は、アセンブリ セグメントがオペコードで使用されていることに気付きました。

例:

MOV DWORD PTR SS:[EBP-30],30

「PTR SS:」は、EBP-30 がスタックから来ることを指定するために使用されていると思いますか? (SS: スタック セグメント) 私は正しいですか、それとも完全に間違っていますか? :) そして、上の例との違いを教えてください。

MOV DWORD PTR[EBP-30],30

また、オペコードで使用される DS (データ セグメント) はどうですか?

4

2 に答える 2

23
MOV DWORD PTR SS:[EBP-30],30

ここにはDWORD PTRと の 2 つの個別の修飾子がありSS:ます。

最初のものは、指定されたアドレスに単語を保存したいことを示しています。これは、アセンブラが命令のオペランドからそれを判断できない場合に必要です。ここ30に格納するバイトも同様です。

SS:セグメント プレフィックスであり、スタック セグメントに関連するアドレスを使用することを示します。ESPこの場合、またはEBPレジスタを使用するときのデフォルトであるため、厳密には必要ありません。したがって、命令の 2 番目のバージョンは最初のバージョンと同じです。

EBX代わりに使用しEBPていたら、違いがあったでしょう!

于 2012-05-31T17:04:19.517 に答える
15
  • SS はスタック セグメント
  • DS はデータ セグメントです
  • PTR - ポインター。住所です。

あなたがするとき

mov ax, some_variable

mov ax, ds:[pointer_to_variable]あなたは本当にこのフォーム " "を代入しています

SSの場合、DSからではなくスタックから値にアクセスしています:)。セグメント レジスタをバンクと考えてください。データは DS から、スタック データは SS から、コード データは CS から、エクストラ セグメントは ES から取得されます。

于 2012-05-30T19:01:48.183 に答える