相关疑难解决方法(0)

使用CMP reg测试寄存器是否为零,0与OR reg,reg?

使用以下代码是否存在任何执行速度差异:

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更快,但我只是想确定.这可能是规模和速度之间的权衡,或双赢(当然代码将更加不透明).

optimization x86 assembly micro-optimization

13
推荐指数
2
解决办法
3755
查看次数

除了在 cmp $0 上保存大小之外的测试用途

我想知道如何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)

x86 assembly

1
推荐指数
1
解决办法
104
查看次数

标签 统计

assembly ×2

x86 ×2

micro-optimization ×1

optimization ×1