0

私はアセンブリプログラミングで新しいことを始めています。下に表示されているコードを書きました。これは、アセンブリでバブルソートすることを目的としています。しかし、ヤムでコンパイルすると、「セグメンテーション違反 (コアダンプ)」というエラーが発生しました。ところで、私は自分のプログラムを実行しています

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
4

0 に答える 0