【发布时间】:2020-08-13 06:10:48
【问题描述】:
我存储了一个单字节值8,我想将它移到rax 寄存器中。我目前正在使用movzx 对字节进行零扩展:
.globl main
main:
push %rbp
mov %rsp, %rbp
movb $8, -1(%rbp)
movzx -1(%rbp), %rax <-- here
...
movzx 指令如何“知道”-1(%rbp) 处的值只有一个字节长?从这里说,如果我正确阅读它,它可以在byte 和word 上工作,但它怎么知道呢?例如,如果我在-2(%rbp) 处添加了一个两字节值,它如何知道获取该两字节值?是否有另一条指令可以让我在某个地址处获取 one 或 two 或 four 字节值并将其插入 64 位寄存器?
我想另一种方法是先将寄存器清零,然后将其添加到 8 位(或许多位)组件中,例如:
mov $0, %rax
mov -1(%rbp), %al
有没有一种方式比另一种方式更受欢迎?
【问题讨论】:
标签: assembly x86-64 att zero-extension