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

igsr9ssn  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(107)

一个简短的问题,有人知道我有什么方法可以在装配中做这个吗?

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加载到寄存器中,而是仅在确定前两个条件为真时才将a加载到寄存器中。
p/s:在运行中编写代码,实际上没有做任何有用的事情。

8hhllhi2

8hhllhi21#

你想要这个

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

每次将%ebx递增1以到达下一个参数。

0yg35tkg

0yg35tkg2#

movl (%esp,%ebx),%eax

被我的编译器接受。
语法为

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

因为它是可选的

相关问题