我在 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
.
我很困惑,我还没有弄清楚为什么会这样。你能告诉我我犯了什么错误吗?