[解決済み】テスト %eax %eax のポイント【重複あり
質問内容
重複の可能性があります。
x86アセンブリ - 'testl' eaxとeaxの比較?
私はアセンブリ言語プログラミングの超初心者で、現在バイナリから生成されたアセンブリ言語を読もうとしているところです。 私は、以下のものに遭遇しました。
test %eax,%eax
または
test %rdi, %rdi
などなど。これが何をするものなのか、私はとても混乱しています。 の値は
%eax, %eax
は同じですか? 何をテストしているのでしょうか? どこかで読んだのですが、それは
AND
という演算が行われますが、同じ値なので
%eax
?
以下は、この使い方を発見した一例です。
400e6e: 85 c0 test %eax,%eax
400e70: 74 05 je 400e77 <phase_1+0x23>
と思ったら
je
は、比較される2つの値が等しい場合にジャンプします......さて、なぜなら
%eax
では、どのような状況であればジャンプしないのでしょうか?
プログラミング全般が初心者なので、どなたか解説していただけると大変ありがたいです。 ありがとうございました。
どのように解決するのですか?
CMP
はオペランドを引き算し、フラグを設定します。すなわち、差分がゼロ(オペランドが等しい)であればゼロフラグを立てます。
TEST
はゼロフラグを設定します。
ZF
AND演算の結果が0であるとき。2つのオペランドが等しい場合、そのビット単位のANDは、両方がゼロのときにゼロとなります。
TEST
は符号フラグも設定します。
SF
最上位ビットが設定されている場合は,パリティフラグが設定されます。
PF
セットされたビットの数が偶数であるとき。
JE
[ジャンプ・イフ・イコールズ] ゼロフラグをテストし、フラグがセットされていればジャンプします。
JE
のエイリアスです。
JZ
[ゼロならジャンプ]なので、ディスアセンブラはオペコードに基づいてどちらかを選択することができません。
JE
の引数がゼロの場合、ゼロフラグが設定されるため、このような名前になっています。
CMP
は等しい。
だから
TEST %eax, %eax
JE 400e77 <phase_1+0x23>
は
%eax
がゼロの場合。
関連
-
[解決済み] MIPS: スタックポインタ($sp)とスタックの関連した使用法
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] アセンブリ言語 新規ライン
-
[解決済み] MIPSプログラムにおける`lw`と`sw`の実際の働きを理解する。
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
-
[解決済み] ESPレジスタとEBPレジスタとは何ですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] 32ビットレジスタに対するx86-64命令は、なぜフル64ビットレジスタの上部をゼロにするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Nasmエラー:オペコードとオペランドの無効な組み合わせ
-
[解決済み】lc3 LDR命令と格納される値について
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み】アセンブリJLEのjmp命令例
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] WAWハザードとは?
-
[解決済み] x86-64におけるmovqとmovabsqの違いについて
-
[解決済み] MIPSアセンブリ言語では、なぜ.globl mainを使うのですか?
-
[解決済み] インテルアセンブリの%ripレジスタを理解する
-
[解決済み] eax に対して `testl` eax?