我是汇编编程的新手。我写了你看到的代码,这意味着在汇编中是冒泡排序的。但是当我用山药编译它时,我得到了错误“分段错误(核心转储)”。顺便说一句,我正在运行我的程序
yams -f elf -p gas bubble sort.asm
在 ubuntu 系统上。首先感谢您的帮助,我确实重写了我的程序。但我仍然遇到同样的错误。多亏了 gdb,我现在知道这是数组的堆栈溢出。但我不知道如何解决它。如果我注释掉下面的 2 行,它工作正常:
movl (,%edi,4),%eax
movl 4(%edi,%esi,4),%ebx
现在这里是其余的一起。
.data
a: .long 16,5,18,12,11,66,62,1,9,33
ausgabe: .string "Wert %d\n"
.text
.globl main
main :
leal a, %edi
movl $0, %edx # j= 0
movl $10, %ecx # n =10
decl %ecx # i = n-1
movl $0, %eax
.L1:
cmpl %ecx, %edx # j < i
jge .L3
movl (,%edi,4),%eax
movl 4(%edi,%esi,4),%ebx
movl %eax, %edi
#incl %edi
cmpl %ebx, %eax #a[j] > a[j+1]
jge .L2
#movl %eax, %esp #temp = a[j]
#movl %ebx, %eax #a[j] = a[j+1]
#movl %esp, %ebx #a[j+1] = temp
xchg %ebx, %eax
.L2:
.L3:
incl %edx #j++
loop .L1
pushl a(,%eax,4)
pushl $ausgabe
call printf
.done:
#exit
movl $1, %eax
int $0x80