1

Intel の Instruction Set Referenceを見ていると、16 ビット、32 ビット、および 64 ビットのレジスタをプッシュするためのオペコードが同じであることに気付きました (それぞれ50+rw50+rd、および50+rd)。

すべてのオペコードが同じ場合、プロセッサはどのレジスタをスタックにプッシュする必要があるかをどのように認識しますか? 現在の動作モードに依存する場合ax、保護モードでプッシュすると、上位 16 ビットeaxもスタックにプッシュされますか?

4

1 に答える 1

3

あなたの仮定は少しずれています (私はあなたを責めません。Intel のマニュアルは非常に不可解な場合があります)、はい、同じ基本オペコードを持っている可能性がありますが、サイズが 32 と異なる場合は、サイズのオーバーライド プレフィックスが必要です。

66:50 PUSH AX
50    PUSH EAX

ここでは、16 の bix サイズのオーバーライド プレフィックスが'ing の0x66ときに使用されていることがわかります。PUSHAX

これは、バイト レジスタをプッシュできない理由の 1 つです。これを行うために使用できるサイズ オーバーライド プレフィックスがないためです。

于 2012-07-21T05:52:32.680 に答える