Я пишу пузырьковую сортировку в сборке x86.Я использовал DDD, чтобы выяснить состояние регистров и информацию о стеке.
Я прошел программу и наткнулся на ошибку 0x00000000004000e7 in ?? ()
.Я хочу выяснить, почему это произошло.
Это мой bubble_sort.s
.section .text
.global _start
_start:
movq $0, %rsi #i = 0;
movq $0, %rdi #j = 0;
movq $4, %rbx #N = 4;
subq $40,%rsp
movq $4, (%rsp) #a[0] = 4;
movq $3, 4(%rsp) #a[1] = 3;
movq $2, 8(%rsp) #a[2] = 2;
movq $1, 12(%rsp) #a[3] = 1;
subq $1, %rbx #N = N - 1
cmpq %rsi, %rbx #i - (N-1)
jge .DONE1
.LOOP1:
movq %rbx, %r15 #%rdx: N - 1
subq %rsi, %r15 #%rbx: N-1-i
cmpq %rdi, %r15 #if(j < N-1-i)
jge .DONE2
.LOOP2:
movq (%rsp, %rdi, 4), %r8
xchg %r8, 1(%rsp, %rdi, 4)
movq %r8, (%rsp, %rdi, 4)
addq $1, %rdi #j = j+1
cmpq %rdi, %r15 #compare j with N-1-i
jl .LOOP2
.DONE2:
addq $1, %rsi
cmpq %rsi, %rbx #i - (N-1)
jl .LOOP1
.DONE1:
Я прошел.Когда я запускаю movq %rbx, %r15 #%rdx: N - 1
, DDD показал мне 0x00000000004000e7 in ?? ()
.
Затем я запускаю следующую строку, DDD показал мне Cannot find bounds of current function
.
Я озадачен, и я не понимаюпочему это произошлоНе могли бы вы сказать, какую ошибку я допустил?