循环堆栈上的函数参数,使用寄存器作为 ESP 的索引



只是一个简短的问题。有谁知道我是否有任何方法可以在组装中做到这一点?

movl $4, %ebx
movl (%ebx)(%esp), %eax

我正在尝试做的基本上是创建一个循环,从堆栈中额外增加下一个参数(固定大小)。

例:

int foo( int x, int y, int z, int a){
    if(x == y){
         x = z;
       if(y == z){
            printf("%d", a);
      }
    }
}

而不是立即将 x、y、z 和 a 加载到寄存器中,只有当我确定前 2 个条件为真时,我才能将 a 加载到寄存器中。

P/S:即时编写代码,并没有真正做任何有用的事情。

你想要这个

movl $1, %ebx
movl (%esp,%ebx,$4), $eax

每次将 %ebx 递增 1 以获得下一个参数。

movl (%esp,%ebx),%eax

被我的编译器接受。

语法是

mov'suffix' (offset,base[,scale]),target

比例在括号中,因为它是可选的