有人可以帮助我理解x64 asm行为吗?我找不到任何类型的文件。
所以,基本上,我们有:
RAX
。EAX
。AX
。AL
。现在代码:
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add al, 1
结果将是0xFFFFFFFFFFFFFF00(正确,al
寄存器溢出,但我们只更改AL
1个字节)
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add ax, 1
结果将是0xFFFFFFFFFFFF0000(正确,ax
寄存器溢出,但我们只更改AX
2个字节)
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add eax, 1
结果将是0x0000000000000000(wtf?,eax
寄存器溢出,但结果改变所有8个字节而不是4.为什么它是0x0000000000000000而不是0xFFFFFFFF00000000)
答案 0 :(得分:1)
32位操作数生成32位结果,零扩展为64位 导致目的地通用寄存器。
多数民众赞成。谢谢!
def permute(seq):
if not seq:
yield seq
else:
for i in range(len(seq)):
rest = seq[:i]+seq[i+1:]
for x in permute(rest):
yield seq[i:i+1]+x
print(list(permute('stack')))
结果确认了这一点,并将为0x0000000066666667