0

我正在测试以下代码:

.intel_syntax noprefix

.data
.Ltest_data:
    .byte 0xEF, 0xBE, 0xAD, 0xDE, 0xBE, 0xBA, 0xED, 0xFE

.text
...
    movzx rax, BYTE PTR[.Ltest_data]  # 0xEF
    movzx rax, WORD PTR[.Ltest_data]  # 0xBEEF
    movsx rax, DWORD PTR[.Ltest_data] # 0xFFFFDEADBEEF (sign-extension)
    mov   rax, QWORD PTR[.Ltest_data] # 0xFEEDBABEDEADBEEF

    # These don't work:
    # mov rax, DWORD PTR[.Ltest_data]
    # movzx rax, DWORD PTR[.Ltest_data]
...

查看英特尔手册,似乎没有办法使用mov/movzx将 dword 移动到 qword;我看到的唯一方法是使用movsx和屏蔽前 32 位。这是令人惊讶的,提供了可用于 x86_64 的大量指令。

这是正确的,还是我错过了什么?

4

0 回答 0