如何在64位进程中将两个DWORD正确组合成QWORD?

时间:2018-02-10 17:49:41

标签: assembly memory x86-64

所以我有以下内容。

0000024E9689000A | 68 FF 7F 00 00           | push 7FFF                               |
0000024E9689000F | 68 45 B2 8C DF           | push FFFFFFFFDF8CB245                   |
0000024E96890014 | 58                       | pop rax                                 |
0000024E96890015 | 50                       | push rax                                |
0000024E96890016 | C3                       | ret                

我想要合并两个DWORDs,首先推高一个,然后低一个并弹出rax如果我理解正确,它应该将这两个堆栈组合成QWORD。< / p>

这个过程是64位,我做错了什么?

2 个答案:

答案 0 :(得分:1)

你想要这个:

mov rax, upperHalf
mov rdx, lowerHalf
shl rax, 32
or rax, rdx?

答案 1 :(得分:0)

对于常量,请像普通人一样使用10字节的mov r64, imm64。 (与任何其他指令不同,T的形式为64位立即数。)

[U;N]可以很好地组装。