3

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

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

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

cmp bl, bl

并且有很多方法可以用两条指令清除奇偶校验标志:

and bl, 0 
or  bl, 1

然而,单一指令的方法仍然难以捉摸。

4

3 回答 3

3

试试这个:

foo:  cmp byte [foo],0x7F

注意:该cmp指令的第一个字节为 0x80,且 0x80-0x7F = 0x01。

于 2017-11-21T14:31:29.960 回答
2

不可能。

当应用于两个副本或一个寄存器(如or al, al)时,任何 PF 更改命令都不能无条件地产生奇校验结果。同样,当应用于寄存器和完全定义结果的常数(如and al, 0 or or al, ffh)时,没有任何算术命令产生奇校验结果。至于第二个操作数是任何其他常数的命令,结果将取决于寄存器的初始值,我们无法控制。

如果我们知道执行环境的一些细节,就有可能使用已知地址的内存内容。在实模式下的 PC 兼容机上,您可以依赖 BIOS 数据结构。在 MS-DOS 中,可执行文件头同上。

于 2010-07-16T19:21:01.097 回答
0

我认为除了mov(我闻到面试问题)之外的唯一方法是找到(奇迹般地,诚然)一个满足的寄存器或寄存器对TEST src, dst。见这里,操作。

目前,没有想到这样的 x86 寄存器/寄存器对可以满足该条件。

于 2010-07-16T19:57:50.803 回答