2013-11-10 5 views
0

У меня есть массив longs (размер 4), и я хочу сохранить каждое из этих 4 значений в отдельный отдельный регистр. Но я не уверен, как это сделать, потому что я никогда не работал с массивами в сборке. Например, я хочу хранить array[0] в r9, array[1] в r10 и т. Д. Может ли кто-нибудь помочь мне в этом? Вот мой код до сих пор. lhs - указатель на массив.Сохранение значений из массива в регистр (Assembly)

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 , но очевидно, что это не правильно

ответ

0

Вы должны компенсировать указатель, указывающий на массив (его начало) по п раз SizeOf (тип) оно выполняется.

Так что вы могли бы сделать что-то вроде этого:

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

то следующий будет хранить 2-го элемента в RBX:

mov rbx, [rax + 4] 

или, если вы хотите получить доступ к п-й элемент (возможно, в цикле даже хотя вам нужно развернуть вручную, если вы всегда хотите изменить регистр назначения), то:

psuedo-code (вы можете сделать это, как вам нравится, либо используйте умножьте add add Режим ressing или вспомогательный регистр):

mov dest, [rax + n * 4] 

где п является либо помощником или масштаб {2, 4, 8} (часть режима адресации).

+0

так что если lhs является указателем на массив arr1, и я делаю movq [arr1], rbx он сохранит первое значение массива arr1 в rbx? и movq [arr1 + 4], rax сохранит второе значение в rax? – user2976670

+0

@ user2976670 lhs - это назначение в моем случае (синтаксис intel), в основном, вы сохраняете начальный адрес массива в регистре, а затем разыменовываете смещение для доступа к n-му элементу. – ScarletAmaranth

+0

хорошо, поэтому, если бы я хотел переместить значение (например, 8) обратно во второе пятно в массиве, я бы сделал mov [rax + 4], $ 8? – user2976670

Смежные вопросы