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 循环的限制来获取数组中的变量,但它一直在我身上出现段错误,这是由于它使用地址而不是实际变量。

其余的我都很好,我只是出于某种原因无法解决这个问题。

4

0 回答 0