相关疑难解决方法(0)

在x86汇编中将寄存器设置为零的最佳方法是什么:xor,mov或?

以下所有说明都做同样的事情:设置%eax为零.哪种方式最佳(需要最少的机器周期)?

xorl   %eax, %eax
mov    $0, %eax
andl   $0, %eax
Run Code Online (Sandbox Code Playgroud)

optimization performance x86 assembly micro-optimization

109
推荐指数
1
解决办法
4万
查看次数

How to read and write x86 flags registers directly?

From what I've read, seems like there are 9 different flags. Is it possible to read/change them directly? I know I can know for example if the zero flag is set after doing a cmp/jmp instruction, but I'm asking if it's possible to do something like

mov eax, flags
Run Code Online (Sandbox Code Playgroud)

or something.

Also, for writing, is it possible to set them by hand?

x86 assembly eflags

19
推荐指数
3
解决办法
3万
查看次数

使用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
查看次数

一条指令清除 PF(奇偶校验标志)——获取结果寄存器中的奇数位

在 x86 汇编中,是否可以在任何初始寄存器配置下使用一条且仅一条指令清除奇偶校验标志?

这相当于使用任何设置标志的操作(明确排除)创建一个具有奇数位mov的结果寄存器。

相比之下,设置奇偶校验标志可以在一条指令中完成:

cmp bl, bl
Run Code Online (Sandbox Code Playgroud)

清除奇偶校验标志的方法有很多种,有两条指令:

and bl, 0 
or  bl, 1
Run Code Online (Sandbox Code Playgroud)

然而,单指令方法仍然难以实现。

x86 assembly micro-optimization parity

5
推荐指数
2
解决办法
2329
查看次数

如何在 x86 程序集中设置或清除溢出标志?

我想编写一个简单的代码(或算法)来设置/清除溢出标志。对于设置 OF,我知道我可以使用有符号值。但我怎么能清除呢?

x86 assembly eflags

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