使用以下代码是否存在任何执行速度差异:
cmp al, 0
je done
Run Code Online (Sandbox Code Playgroud)
以下内容:
or al, al
jz done
Run Code Online (Sandbox Code Playgroud)
我知道JE和JZ指令是相同的,并且使用OR可以提供一个字节的大小改进.但是,我也关心代码速度.逻辑运算符似乎比SUB或CMP更快,但我只是想确定.这可能是规模和速度之间的权衡,或双赢(当然代码将更加不透明).
我想知道如何cmp
在对寄存器进行零检查时保存一个字节之外如何使用,例如:
cmp $0, %eax
Run Code Online (Sandbox Code Playgroud)
对比
test %eax, %eax
Run Code Online (Sandbox Code Playgroud)
我正在做一些反复试验,这似乎是它的主要用途(除非我遗漏了一些东西——如果任何进一步的用法可以使用该and
指令)。
该test
指令还有其他用途吗?
有点相关:在 x86 中, "test eax,eax" 和 "cmp eax,0" 之间有什么区别。
以下是我做的一些示例:
mov $1, %eax
mov $2, %ebx
test %eax, %ebx
jg _start # <-- doesn't jump
jl _start # <-- doesn't jump
mov $1, %eax
mov $1, %ebx
test %eax, %ebx
je _start # <-- doesn't jump
mov $0, %eax
mov $1, %ebx
test %eax, %ebx
je _start # <-- why is this …
Run Code Online (Sandbox Code Playgroud)