なんらかの理由でこれを理解するのに少し問題があります。小さなCプログラムをアセンブリに変換する必要があります。基本的に、入力用の小さなメインは、ユーザーから配列のサイズの値を取得し、ユーザーから配列の要素を取得して、クイックソートを呼び出します。
私の問題は次のコードにあります:
pushl %ebp
movl %esp, %ebp
pushl %esi
pushl %edi
/*allocate i, n to stack */
subl $8, %esp
/* n is at -12(%ebp), i is at -16(%ebp) */
pushl $string1
call printf #printf("enter size of array: ")
addl $4, %esp
leal -12(%ebp),%esi
pushl %esi
pushl $format
call scanf #scanf("%d", n)
addl $8, %esp
pushl %esi
pushl $string2
call printf
addl $8, %esp
scanfには保存先のアドレスが必要であることを理解しています。問題は、printfを再度呼び出すときに発生することです。
printf("enter %d variables" ,n)
%esiのアドレスを出力します。(明らかに)実際の変数を表示するために必要であり、配列内の変数を取得するためのforループの制限として変数を使用できる必要がありますが、それは私にsegfaultingを続けます。実際の変数の代わりにアドレス。
残りの部分は大丈夫ですが、なんらかの理由でこの問題を理解することはできません。