局部变量IA32使用scanf进行汇编

时间:2012-11-05 04:04:53

标签: assembly

由于某种原因,我有一个小问题。必须将小型C程序转换为汇编程序。基本上是输入的一个小主体,它从用户获取数组大小的值,来自用户的数组元素,然后调用quicksort ..

我的问题是以下代码:

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,这是因为它使用了地址而不是实际变量。

剩下的我很好,我不能出于任何原因,把这个问题搞清楚。

0 个答案:

没有答案