gpt4 book ai didi

assembly - 为什么我不能直接将一个字节移动到 64 位寄存器?

转载 作者:行者123 更新时间:2023-12-04 23:01:31 26 4
gpt4 key购买 nike

为什么我不能在 Intel x86-64 程序集中直接将一个字节从内存移动到 64 位寄存器?

例如,这段代码:

extern printf

global main

segment .text

main:
enter 2, 0

mov byte [rbp - 1], 'A'
mov byte [rbp - 2], 'B'

mov r12, [rbp - 1]
mov r13, [rbp - 2]

xor rax, rax
mov rdi, Format
mov rsi, r12
mov rdx, r13
call printf

leave
ret

segment .data
Format: db "%d %d", 10, 0

打印:
65 16706

我需要将寄存器 r12 和 r13 的移动字节更改为此,以使代码正常工作:
xor     rax, rax
mov al, byte [rbp - 1]
mov r12, rax
xor rax, rax
mov al, byte [rbp - 2]
mov r13, rax

现在,它打印了预期的内容:
65 66

为什么我们需要这样做?

有没有更简单的方法来做到这一点?

谢谢。

最佳答案

根据需要使用带零或符号扩展的移动。

例如: movzx eax, byte [rbp - 1] 零扩展 into RAX .

movsx rax, byte [rbp - 1] 符号扩展到 RAX。

关于assembly - 为什么我不能直接将一个字节移动到 64 位寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22621340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com