我试图在Linux中将1增加到IA32程序集中的一个变量
section .data
num: dd 0x1
section .text
global _start
_start:
add dword [num], 1
mov edx, 1
mov ecx, [num]
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
不确定是否有可能。
在另一篇文献中,我看到了以下代码:
mov eax, num
inc eax
mov num, eax
是否可以在不移到寄存器的情况下将值增量为var?
如果是,那么将值移动到寄存器中有什么好处吗?
发布于 2021-02-22 20:44:47
是否可以在不移到寄存器的情况下将值增量为var?
当然可以:inc dword [num]
。
与几乎所有的x86指令一样,inc可以使用寄存器或内存操作数。参见http://felixcloutier.com/x86/inc;中的指令描述表单inc r/m32
表示您可以提供一个操作数,即32位register或32位memory操作数(有效地址)。
如果您对微优化感兴趣,那么在某些CPU上,add dword [num], 1
可能仍然会更快一些,尽管要大一个字节。细节非常复杂,您可以在INC instruction vs ADD 1: Does it matter?上找到一个非常广泛的讨论。这在一定程度上与两者之间的细微差别有关,即add
将根据是否发生进位设置或清除进位标志,而inc
总是保持进位标志不变。
如果是的话,将值移动到寄存器中有什么好处吗?
不是的。这将使您的代码更大,而且可能更慢。
https://stackoverflow.com/questions/66327020
复制相似问题