Assembly x86汇编中的movl,英特尔语法

Assembly x86汇编中的movl,英特尔语法,assembly,x86,att,Assembly,X86,Att,只是一个简短的问题。 有人知道我是否有办法在汇编中这样做吗 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

只是一个简短的问题。 有人知道我是否有办法在汇编中这样做吗

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 (%esp,%ebx),%eax
被我的编译器接受

语法是

mov'suffix' (offset,base[,scale]),target
在括号中使用刻度,因为它是可选的

被我的编译器接受

语法是

mov'suffix' (offset,base[,scale]),target
因为它是可选的,所以将比例放在括号中

movl $1, %ebx
movl (%esp,%ebx,$4), $eax
每次递增%ebx一次,以进入下一个参数。

是否要这样

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

每次将%ebx增加一个以进入下一个参数。

您所说的
(%ebx)(%esp)
是什么意思?
movl$4,%ebx
在我看来不象英特尔。看看&T。你的编译器是什么?@m0skit0也许,
($esp,$ebx)
,或者相反?你所说的
(%ebx)(%esp)
是什么意思?
movl$4,%ebx
在我看来不像英特尔。看看&T。你的编译器是什么?@m0skit0也许,
($esp,$ebx)
或者反过来?