2015-04-16 78 views
0

彙編語言(AVR)堆棧看起來像是什麼樣的,下面的代碼給出了C代碼。給定C代碼的堆棧圖

我試圖瞭解如何將代碼翻譯成AVR彙編語言,並且我需要能夠做好以下準備工作以應對我的考試中可能出現的編程問題。

int x; 

int foo(char a, int b) { 
    int z; 
} 

int main() { 
    int q = foo('a',0x93); 
} 

上面的C代碼在AVR中的堆棧表示是什麼?

+2

這取決於所使用的編譯器,和什麼[ABI](http://en.wikipedia.org/wiki/Application_binary_interface)被使用。 –

+0

@JoachimPileborg我只需要一個粗略的一般方法。不需要特定的細節。 – Vimzy

回答

0

foo函數的堆棧框架類似於以下內容:先來參數,然後保存幀指針,然後返回地址,然後是局部變量。 Int是4個字節,所以程序集自然會從esp中減去4以爲本地變量騰出空間。

這在視覺上是:

int b  < bottom of stack, highest memory address 
char a 
ret address 
fp 
local variables < top of stack, lowest memory address 
+1

我很驚訝地看到AVR上的ESP寄存器 – mfro