8ビットまたは16ビットのオフセットを使用するジャンプの場合、IA-32アーキテクチャでは、EIPレジスタにそのオフセットを追加すると、オフセットにも一致するビットを持たないEIPのビットに影響する可能性がありますそれともオフセットのビット数のオフセットにマッチするEIPレジスタの一部の追加に似ていますか?ジャンプ命令での8ビットまたは16ビットオフセットの加算はどのように行われますか?
答えて
add eip,xxx
のような操作について言えば、それは32ビットの追加であり、1つのオペランドがより狭くなることを心配する必要はありません。
更新 - これは実際には相対JMP命令に関する事実を見逃していました。これに対する答えは、相対ジャンプオフセットオペランドのサイズについて心配する必要はなく、ジャンプが適切に機能するということです。ここで
は、現在のIntelのドキュメントです:
ショートジャンプはEIPと8ビットまたは16ビット(または32ibt)との間にのみ追加されている即値を締結しました。新しいEIPが正しいコードアドレスで開始されない場合、例外が発生します。命令セット・リファレンス*
近くとショートジャンプ:インテルから
。 がジャンプすると、プロセッサは ターゲットオペランドで指定された アドレス(現在のコード セグメント内)にジャンプします。ターゲット・オペランド は、絶対オフセットを指定 (その コードセグメントのベースからのオフセットである)または相対(EIPレジスタ内の命令 ポインタの現在の値に署名された変位相対) オフセット。 A付近の は、8ビットの相対オフセットにジャンプします。 (rel8)は、ショートジャンプと呼ばれます。 およびショートジャンプでCSレジスタが変更されません。絶対オフセットは、 汎用レジスタまたはメモリ ロケーション(r/m16またはr/m32)に間接的に指定された です。オペランドサイズの属性 は、対象オペランドのサイズ( ビット)を決定します。絶対オフセットは をEIPレジスタに直接ロードします。 オペランドサイズ属性が16の場合、 EIPレジスタの上位2バイト がクリアされ、最大 命令ポインタサイズは16ビットになります。 A 相対オフセット(rel8、rel16、または rel32)は、アセンブリコードの ラベルとして一般的に指定されますが、 マシンコードレベルでは、 符号付き8,16,32ビット即値としてエンコードされます 値。この値は、EIPレジスタの の値に加算されます。 (ここで EIPレジスタには、 命令の次の命令のアドレス が含まれています)。相対的な のオフセットを使用する場合、 のオペランドと、オペランドサイズの アトリビュート(近接相対ジャンプの場合) は、対象のオペランド(8,16、または32ビット)のサイズを決定します。
- 1. Tensorflowではどのように8ビット演算が行われますか?
- 2. x86アセンブリの乗算命令と除算命令のオペランド、16ビット以上
- 3. TileraとSSEの "Missing"算術命令。操作はどのように行われますか?
- 4. ARMアセンブリTBB命令 - ジャンプはどのように機能しますか?
- 5. スマートカードの読み取り(8ビットまたは16ビットですか?)
- 6. atmega32は8ビットまたは16ビットですか?
- 7. SSE命令はどのように使用できますか?
- 8. j(ジャンプ)命令は、どのくらい離れてメモリにジャンプできますか? (MIPS)
- 9. アセンブリ命令には計算がありますが、これはどのように機能しますか?
- 10. `test`命令はどのように機能しますか?
- 11. MOVSXアセンブリ命令はどのように機能しますか?
- 12. x86 ROR命令はどのように機能しますか?
- 13. x87 FPOP命令とFCOM命令 - どのように動作しますか?
- 14. ジャンプ命令のMIPS範囲
- 15. どのように32ビットIRホールドロード命令ですか?(RISCスタイルの32ビットアーキテクチャ)
- 16. mipsには32ビットのアドレスと32ビットの命令がありますか?
- 17. la命令はどのようにMIPSで翻訳されていますか?
- 18. 16進値はビット単位でどのように操作されますか?
- 19. ディープラーニングのベンチマークは、16ビットと8ビットの固定小数点精度でどのように実行されましたか?
- 20. 1つの命令と1つの命令を結合するにはどうすればよいですか?
- 21. MIPS命令を32ビット16進数に変換する方法
- 22. NoOperation命令によるジャンプの理由は?
- 23. x86のINC命令はどのようにアトミックではありませんか?
- 24. アセンブリ内の配列の8ビット値の16ビットの合計を計算するにはどうすればよいですか?
- 25. ByteCode命令:わかりましたか?
- 26. 8ビットから16ビットへの変換
- 27. C# - 8ビットまたは16ビットのグレースケール生のピクセルデータを変換する
- 28. MIPSでは、なぜジャンプ命令がプログラムカウンタを28ビットのターゲットアドレスに設定できるのですか
- 29. イメージが8ビットか16ビットかどうかをチェックする方法は?
- 30. ディレクティブ/命令は、実行時またはアセンブリ時に実行されますか?
私はJMP命令についてはADDではありません。 – Pooria
なので、0x8888のような16ビットのオフセットでジャンプしてEIPレジスタに追加するのは、32ビットの0x00008888オフセットでジャンプしてEIPに追加するのとまったく同じですか? – Pooria
さて、0x8888は負の数なので、0xffff8888の32ビットの相対ジャンプを行うようになりますが、それはあなたが作成しようとしているポイントではないと思います。 0x44の相対ジャンプは、0x0044と0x00000044のいずれかと同じです。あなたが大きなジャンプとプロテクトモードの操作に入ると、他にも多くの問題がありますが、ここではそれらについて心配する必要はありません。 –