1

我有一个 long 数组(大小 4),我想将这 4 个值中的每一个存储到它自己的单独寄存器中。但我不确定如何做到这一点,因为我从未在汇编中使用过数组。例如,我想存储array[0]into r9array[1]intor10等。有人可以帮我这样做吗?到目前为止,这是我的代码。lhs是指向数组的指针。

define(lhs,%rdi)
define(rhs_d,%esi)
define(rhs,%rsi)
define(result,%rdx)

.text


.globl addBignumInt
    .type   addBignumInt, @function
addBignumInt:
.LFB18:
    .cfi_startproc
    # code goes here
    movslq  rhs_d, rhs

    .cfi_endproc
.LFE18:
    .size   addBignumInt, .-addBignumInt

所以,基本上我想做的是, movq lhs[0], %r9 但显然这是不正确的

4

1 回答 1

0

您需要将指向数组(它的开头)的指针偏移它所持有的 n 倍 sizeof(type) 。

所以你会做这样的事情:

mov rax, arrBegin ; rax points to the array of longs

那么以下将在rbx中存储第二个元素:

mov rbx, [rax + 4]

或者,如果您想访问第 n 个元素(可能在循环中,即使您需要手动扩展,如果您总是想更改目标寄存器),那么:

伪代码(您可以随意执行此操作,使用乘加寻址模式或辅助寄存器):

mov dest, [rax + n * 4]  

其中 n 是帮助器或标度{2, 4, 8}(寻址模式的一部分)。

于 2013-11-10T17:28:20.880 回答