Assembly 是否可以使用一个附加insn将x86标志设置为进位=符号=溢出=1?

Assembly 是否可以使用一个附加insn将x86标志设置为进位=符号=溢出=1?,assembly,x86,flags,Assembly,X86,Flags,我在i386体系结构上使用AT&T符号编程 是否可以使用单个add指令添加两个8位数字,以设置要设置的进位、溢出和符号标志 我认为这是不可能的旗帜组合。为了将S标志与O标志一起设置,两个数字的最高有效位必须为0,结果的最高有效位必须为1。这使得我们无法通过添加最高有效位来生成进位 这是我第一次在这个网站上提问,所以如果我做错了什么,我道歉。提前谢谢 编辑:我只能使用以下三个说明: movb $_, %ah movb $_,%al addb %ah,%al 我必须用十进制值修改两个下划线 编辑

我在i386体系结构上使用AT&T符号编程

是否可以使用单个
add
指令添加两个8位数字,以设置要设置的进位、溢出和符号标志

我认为这是不可能的旗帜组合。为了将S标志与O标志一起设置,两个数字的最高有效位必须为0,结果的最高有效位必须为1。这使得我们无法通过添加最高有效位来生成进位

这是我第一次在这个网站上提问,所以如果我做错了什么,我道歉。提前谢谢

编辑:我只能使用以下三个说明:

movb $_, %ah
movb $_,%al 
addb %ah,%al
我必须用十进制值修改两个下划线

编辑:在CF、of、SF和ZF之外,我只能设置CF、of和SF。我不能设置进位标志


(编者按:最后一句没有任何意义。这是奇偶校验或零标志的输入错误,或者他可能是指不能在
addb
之前设置CF?这是
add
,而不是
adc
,因此它不依赖于标志的先前状态。将其保留为编辑,而不是在注释中请求澄清,因为它是旧的可能得不到回答的问题。如果/当您修复关于“无法设置进位标志”的句子时,请编辑此注释。

编辑:仅使用
add al,ah
或任何其他
add
是不可能的

您可以通过将
标志
/
eflags
弹出到某个寄存器中,然后使用
设置所需的标志,按下寄存器并将其弹出到标志中

对于16位代码(NASM语法):

对于32位代码:

pushfd
pop eax
or eax,0x881
push eax
popfd

编辑:仅使用
add al,ah
或任何其他
add
是不可能的

您可以通过将
标志
/
eflags
弹出到某个寄存器中,然后使用
设置所需的标志,按下寄存器并将其弹出到标志中

对于16位代码(NASM语法):

对于32位代码:

pushfd
pop eax
or eax,0x881
push eax
popfd

add ah,al
设置CF=SF=OF=1是不可能的。
add ah,al
的正式证明会有点冗长,但一个简单的穷举测试证实了在
add
指令后不可能出现这样的组合


您可以使用
POPF(D)
设置算术标志的任意组合。此指令将从堆栈中弹出一个(D)字,并将其写入
(E)标志中


请注意,在标志寄存器中还有其他与算术无关的标志。通常不应修改它们。因此,您通常首先读取寄存器的值(使用
PUSHF(d)
),根据需要进行修改,然后如上所述进行回复。

不可能用
add ah,al
将CF=SF=OF=1设置为
add ah,al
。一个正式的证明会有点冗长,但一个简单的详尽测试证实了在
add
指令之后不可能出现这样的组合


您可以使用
POPF(D)
设置算术标志的任意组合。此指令将从堆栈中弹出一个(D)字,并将其写入
(E)标志中



请注意,在标志寄存器中还有其他与算术无关的标志。通常不应修改它们。因此,您通常首先读取寄存器的值(使用
PUSHF(d)
),根据需要修改它,然后按上面所述写回。

我确信它可以不加任何内容就被破解。它是为了一个家庭作业,这样就不起作用了?哈哈!我明白了。我会考虑一下。CF=SF=of=1的组合不可能通过添加任何两个字节来实现。我确信它可以不加任何内容就被破解。它是为了一个家庭作业这样不行?哈哈!我明白了。我会考虑一下。添加任何两个字节都不可能实现CF=SF=of=1的组合。
sahf
不会修改
of
,所以需要单独设置。感谢您的快速响应。我刚刚更新了问题,以明确我可以使用哪些指令。谢谢我只是想确认这是不可能的。这是我在原始问题中写的:我认为不可能得到这个标志组合。为了将S标志与O标志一起设置,两个数字的最高有效位必须是0,结果的最高有效位必须是w必须是1。这使得我们无法通过添加最重要的位来生成进位。这是不可能的正确推理吗?你比我先说。正式的证明可能很长,但“蛮力”搜索既快又简单。我做了暴力搜索,证明了这是不可能的。不需要正式的证明。我只需要在我的家庭作业中解释这个案例是否不可能,我想我有一个很好的解释。再次感谢所有为答案做出贡献的人。我刚刚注册了这个网站,你们真是太棒了e> sahf
不修改
,因此需要单独设置。感谢您的快速响应。我刚刚更新了问题,以明确允许我使用哪些说明。非常感谢Alexey。我只是想确认这种情况是不可能的。这是我在原始问题中写的:我在思考不可能获得此标志组合。为了将S标志与O标志一起设置,两个数字的最高有效位必须为0,结果的最高有效位必须为1。这使得我们无法通过添加最高有效位生成进位。这是正确的r吗伊索