x86 64 AT&T,将寄存器的一部分移动到另一个寄存器

x86 64 AT&T , moving part of register into another register

我想将一个字节从寄存器 rdx 移动到寄存器 rbx,如下所示:

mov %rdx , (%rbx,%r15,1)

在哪里 rdx 包含 0x33 ,r15 是索引,rbx 在开始时包含 0。

我尝试过以多种方式使用此方法,但总是以 SIGSEGV 错误结束。 最后,我将创建一个 rbx 寄存器,它将包含下一个 rdx 值的数组

您可以一次移动一个字节,如下所示:

; Calculate first dl
...
mov  %dl,%bl
; Calculate next dl
...
shlq ,%rbx
mov  %dl,%bl
; Calculate next dl
...
shlq ,%rbx
mov  %dl,%bl

等这假定您想要 msb 中的第一个字节和 lsb 中的最后一个字节。 revesre的顺序稍微复杂一点,但不多。