У меня есть массив 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
, но очевидно, что это не правильно
так что если lhs является указателем на массив arr1, и я делаю movq [arr1], rbx он сохранит первое значение массива arr1 в rbx? и movq [arr1 + 4], rax сохранит второе значение в rax? – user2976670
@ user2976670 lhs - это назначение в моем случае (синтаксис intel), в основном, вы сохраняете начальный адрес массива в регистре, а затем разыменовываете смещение для доступа к n-му элементу. – ScarletAmaranth
хорошо, поэтому, если бы я хотел переместить значение (например, 8) обратно во второе пятно в массиве, я бы сделал mov [rax + 4], $ 8? – user2976670