爲什麼我們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