为什么我们push ebp作为Assembly函数的被调用者中的第一个动作? 据我所知,我们用mov edi, [ebp+8]来得到传入的变量,但我们的esp已经指向了调用函数的返回地址。我们可以通过mov edi, [esp+4]或者如果我们推动了被调用的寄存器,然后mov edi, [esp+16],轻松地访问传入的变量。 那么,为什么你需要在函数中管理那些额外的寄存器在cpu中(ebp)?即
我想获得一些帮助这个表达式转换成4种方法的命令: z=3*(x+2)-2*y
这里是我的尝试的方法: 通过堆栈: push 2
push -1
mult
push y
mult
push x
push 2
add
push 3
mult
add
pop z
由累加器: load y
mult -2
store temp
load x
add 2
mult 3
这里是一个C源代码示例: register int a asm("r8");
register int b asm("r9");
int main() {
int c;
a=2;
b=3;
c=a+b;
return c;
}
而这是使用一个臂gcc交叉编译器生成的汇编代码: $ arm-linux-gnueabi-gcc -c glo