4

次のコードが表示されます-

add    $0x14,%esp
mov    %eax,%ebx
test   %ebx,%ebx
jl     80590d7 <XXXX+0xbc7>

上記のコードを理解するのに混乱しています。test %ebx のような命令がある場合、%ebx は常に等しい必要がありますか?

また、私はGDBで実行し、以下は情報レジスタからの出力です-

(gdb) info registers
eax            0x0      0
ecx            0x189f   6303
edx            0x6      6
ebx            0x442ff4 4468724
esp            0xffbde13c       0xffbde13c
ebp            0xffbde4c8       0xffbde4c8
esi            0x1d5c4d50       492588368
edi            0x444140 4473152
eip            0x80590dd        0x80590dd
eflags         0x296    [ PF AF SF IF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x63     99

誰かがこれがどのように機能するか説明できますか?

4

1 に答える 1

2

Sign フラグをテストする奇妙な方法です。JL 命令は、CMP 命令 (の減算) が負の値になったかどうかをテストするように設計されています。

ただし、結果に符号ビットが設定されている場合、TEST 命令は SF フラグも設定するようです。

http://en.wikipedia.org/wiki/TEST_(x86_instruction)

于 2012-06-01T18:23:50.920 に答える