1

なんらかの理由でこれを理解するのに少し問題があります。小さな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を続けます。実際の変数の代わりにアドレス。

残りの部分は大丈夫ですが、なんらかの理由でこの問題を理解することはできません。

4

0 に答える 0