0

我在 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.

我很困惑,我还没有弄清楚为什么会这样。你能告诉我我犯了什么错误吗?

4

0 回答 0