Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux pushf在nasm中的应用_Linux_Assembly_X86_Nasm - Fatal编程技术网

Linux pushf在nasm中的应用

Linux pushf在nasm中的应用,linux,assembly,x86,nasm,Linux,Assembly,X86,Nasm,我发现pushf在我的代码中遵循aaa指令。 这个指令实际上是做什么的?在互联网上搜索后,它说它会推标志,但我不知道它会推哪个标志到堆栈上,以及我们如何访问它们 代码片段如下所示: mov al,[num1+esi] mov bl,[num2+esi] adc al,bl aaa pushf pushf将的内容推送到堆栈上。此寄存器包含您可能关心的所有标志。关于如何访问它,在它被推到堆栈上之后,它就在堆栈上了,所以你可以使用你通常使用的任何东西来访问堆栈上的东西 这个答案似乎没有告诉你多少新的

我发现
pushf
在我的代码中遵循
aaa
指令。 这个指令实际上是做什么的?在互联网上搜索后,它说它会推标志,但我不知道它会推哪个标志到堆栈上,以及我们如何访问它们

代码片段如下所示:

mov al,[num1+esi]
mov bl,[num2+esi]
adc al,bl
aaa
pushf

pushf
将的内容推送到堆栈上。此寄存器包含您可能关心的所有标志。关于如何访问它,在它被推到堆栈上之后,它就在堆栈上了,所以你可以使用你通常使用的任何东西来访问堆栈上的东西


这个答案似乎没有告诉你多少新的东西,但这就是它的全部。没有魔法或任何奇怪的东西。

pushf
将内容推送到堆栈上。此寄存器包含您可能关心的所有标志。关于如何访问它,在它被推到堆栈上之后,它就在堆栈上了,所以你可以使用你通常使用的任何东西来访问堆栈上的东西


这个答案似乎没有告诉你多少新的东西,但这就是它的全部。没有魔法或任何奇怪的东西。

它有效地推动标志,将其保存在堆栈上。我怀疑在
pushf
之后,会有一些指令,如
(甚至可能是
或al,0x30
,用于将数字转换为ASCII),它会删除标志,然后使用
popf
来恢复它们。如果需要执行可能改变进位标志的指令,则这类代码通常用于将进位标志传播到下一个循环迭代。您是否有可能添加两个包含数字的ASCII字符串?如果此代码使用的是
pushf
或al,则0x30
popf
,然后将其更改为
lea eax[eax+0x30]
甚至可以工作,因为它与将AL中的值转换为ASCII字符具有相同的效果,而无需实际修改标志(因此无需保存或还原标志),如果您不需要
bl
的值来代替
adc
,您应该能够替换
mov bl[num2+esi]
adc-al,bl
使用
adc-al,[num2+esi]
它推动标志有效地将它们保存在堆栈上。我怀疑在
pushf
之后,会有一些指令,如
(甚至可能是
或al,0x30
,用于将数字转换为ASCII),它会删除标志,然后使用
popf
来恢复它们。如果需要执行可能改变进位标志的指令,则这类代码通常用于将进位标志传播到下一个循环迭代。您是否有可能添加两个包含数字的ASCII字符串?如果此代码使用的是
pushf
或al,则0x30
popf
,然后将其更改为
lea eax[eax+0x30]
甚至可以工作,因为它与将AL中的值转换为ASCII字符具有相同的效果,而无需实际修改标志(因此无需保存或还原标志),如果您不需要
bl
的值来代替
adc
,您应该能够替换
mov bl[num2+esi]
adc-al,bl
adc-al,[num2+esi]