由于某种原因,我在弄清楚这一点时遇到了一个小问题。必须将小型 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 循环的限制来获取数组中的变量,但它一直在我身上出现段错误,这是由于它使用地址而不是实际变量。
其余的我都很好,我只是出于某种原因无法解决这个问题。