Я работаю над проектом сборки ARM, где мне нужно сгенерировать массив, затем передать массив в функцию, которая будет генерировать случайные числа для заполнения массива, а затем в другой функции распечатать массив. Но когда он доходит до конца первой функции, он вызывает ошибку сегментации.
Я также предполагаю, что, если он дойдет до второй функции, это вызовет аналогичную ошибку, но первая функция сначала Угадай. Я проверил указатель sp и переключился на операцию pu sh, чтобы попытаться вывести число как str r2, [sp, r1 (смещение)], поскольку оно также вызывало ошибку сегментации.
Это где находится main
.cpu cortex-a53
.fpu neon-fp-armv8
.data
.text
.align 2
.global main
.type main, %function
main:
push {fp, lr}
add fp, sp, #4
sub sp, sp, #80
mov r0, #0
bl time
bl srand
mov r0, sp
bl roll_dice
mov r0, #0
sub sp, fp, #4
pop {fp, pc}
Это функция, в которую я пытаюсь передать массив, а затем заполнить массив, который позже я буду использовать в другой функции, чтобы распечатать все это
.cpu cortex-a53
.fpu neon-fp-armv8
.data
.text
.align 2
.global roll_dice
.type roll_dice, %function
roll_dice:
push {fp, lr}
add fp, sp, #4
mov sp, r0
add sp, sp, #80
mov r5, #0 @counter
mov r6, #6 @number of modulus
mov r3, #0
not_yet:
bl rand
mov r1, r0
udiv r2, r1, r6
mul r2, r2, r6
sub r2, r1, r2
add r2, r2, #1
push {r2}
add r5, r5, #1
cmp r5, #20
bne not_yet
mov r0, #0
sub sp, fp, #4
pop {fp, pc}
Я даже не буду беспокоиться о своей последней функции, потому что я думаю, что если я пойму, что с ними не так, я смогу выяснить последнюю.