我生成了一个介于 0 到 256 之间的随机整数数组,我尝试使用插入排序对它们进行排序,但是在沿线的某个时刻我搞砸了,并得到一个错误“分段错误(核心转储)
我不知道我为什么会得到这个,但我相信这个问题与代表循环计数器的宏 j 有关。我已经为此工作了几个小时,并且已经坚持了一段时间。
编辑:使用调试器后,我将问题隔离为:
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
数组应该以它初始化的随机顺序打印,然后它应该打印数组顶部的值,然后它意味着以升序打印排序的数组。
我得到的确切错误信息是:
分段错误(核心转储)
这出现在它打印排序数组的第一个值之后