这是我正在寻找的代码片段
#include <cstdint>
int main() {
unsigned int i = 0x11111111;
unsigned int j = 0xFFFFFFFF;
uint64_t k = 0xFFFFFFFF11111111;
}
0000000140001000 sub rsp,18h
0000000140001004 mov dword ptr [rsp],11111111h
000000014000100B mov dword ptr [rsp+4],0FFFFFFFFh
0000000140001013 mov rax,0FFFFFFFF11111111h
000000014000101D mov qword ptr [rsp+8],rax
0000000140001022 xor eax,eax
0000000140001024 add rsp,18h
0000000140001028 ret
我们使用rax
寄存器来携带uint64_t
的值。
为什么我们不使用eax
或其他32位寄存器的int
?
由于您没有使用优化编译,因此它不使用寄存器来保存任何变量—它们都在堆栈帧中(在rsp, rsp+4和rsp+8)
这里的rax只是用于暂时保存常量0xFFFFFFFF11111111,因为没有单个指令将64位值写入内存。有一条指令将32位值写入内存,用于unsigned int初始化