【问题标题】:x86 64 AT&T , moving part of register into another registerx86 64 AT&T,将寄存器的一部分移动到另一个寄存器中
【发布时间】:2015-04-25 11:20:41
【问题描述】:

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

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

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

我在很多方面都尝试过使用这种方法,总是以 SIGSEGV 错误结束。 最后,我将创建一个 rbx 寄存器,其中将包含一个包含下一个 rdx 值的数组

【问题讨论】:

  • 您不是移动到寄存器中,而是移动到由 rbx 和 r15 引用的内存位置。这就是段错误的原因。
  • "rbx register which will contain a array of next rdx values" - 这没有任何意义,你是什么意思?

标签: indexing x86 cpu-registers mov


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2016-10-28
    • 2011-01-14
    • 2019-08-05
    相关资源
    最近更新 更多