Я сгенерировал массив случайных целых чисел от 0 до 256, и я попытался отсортировать их, используя сортировку вставкой, однако в какой-то момент я испортил строку и получил ошибку "Ошибка сегментации (сброшено ядро)
Я не знаю точно, почему я получаю это, но я думаю, что проблема как-то связана с макросом j, представляющим счетчик циклов. Я работал над этим несколько часов, и я застрял на этомwhile.
EDIT: после использования отладчика я выделил проблему в виде строки:
bl printf
прямо в самом конце, когда он пытается напечатать второйотсортированное значение.
Я попытался выделить больше оперативной памяти до 416 байт, я попытался переместить метку цикла top2 (это цикл, который использует j в качестве счетчика), и самое дальнее, что я получил, предназначено дляпрограмма для печати первого элемента отсортированного массива и выдачи затем ошибки
ALLOC =-(16+400*1)&-16
.equ DEALLOC, -ALLOC
size = 50
define(arraybase, x19)
i .req x20
define(j, x21)
define(temp, w22)
define(sort1, w23)
print1: .asciz "Array[%d]: %d\n"
print2: .string "\nSorted Array: \n"
print3: .asciz "top value equals %d \n"
...
mov i, 0
top1: add i, i, 1
ldrb temp, [arraybase, i ]
mov j, i
top2: mov x25, j
sub x25, x25, 1
ldrb sort1, [arraybase, x25 ]
cmp temp, sort1
b.ge skip1
strb sort1, [arraybase, j]
skip1: sub j, j, 1
cmp j, 0
b.gt top2
strb temp, [arraybase, j]
cmp i, size-1
b.lt top1
printing:
ldr x0, =print2
bl printf
mov i, 0
ldr x0, =print1
tprint: mov x1, i
ldrb w2, [arraybase, i]
bl printf
add i, i, 1
cmp i, size-1
b.le tprint
mov x0, 0
ldp x29, x30, [sp], DEALLOC
ret
Массив должен быть напечатанв случайном порядке, в котором он был инициализирован, затем он должен напечатать значение в верхней части массива, затем он должен распечатать отсортированный массив в порядке возрастания.
Точное сообщение об ошибке, которое я получил, было:
Ошибка сегментации (ядро сброшено)
Появляется после того, как печатается первое значение отсортированного массива