test eax,eax 如何解释?

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:03:25
mov eax,0a
text eax,eax
je xxxx,这个跳会跳吗?能详细解释下test eax,eax这是什么意思嘛?这样检测下来的结果不是永远相等的嘛!

test eax,eax 基本上和 And eax,eax 是一样的,不同的是test 不改变eax的结果,只是改变FLAG寄存器的状态,也就是改变进位标志,零标志,溢出标志等 等。举一个例子,如果eax=01h,test eax,eax 就是两个01h 作与操作,所以结果还是01h,不是0的话,就不会跳转 je xxxx。所以要跳转je xxxx,只有一种可能就是eax=0h.所以现在eax=0a 则不会跳转 je xxxx

这样的结果相当于CMP EAX,0
但是立即数操作比寄存器直接操作慢多了,
其实你给的程序就是当eax为0时跳转xxx
而你已经说了EAX=0ah
所以不会跳啦

test eax,eax是位的与运算,不改变eax的值,但会改变标志位的值~

1楼 lauey 正解。

这都是汇编指令 32位汇编指令