1、傳參無論是用暫存器還是棧,最終都要壓入棧中。
2、第一個引數的位置是ebp+8,少於4byte的資料型別按照4Byte壓棧,第n個引數的地址是[ebp+4+4n],ebp+4是返回地址。
8byte的資料型別,會先開闢8位元組的棧空間esp-8,再把資料放入棧中。下一個引數的地址相應的要加8。
3、區域性變數用函式自己的開闢棧幀。區域性變數之間間隔2個棧幀。n個區域性變數,除了double棧幀開闢的大小為0C0h+n*0Ch,double額外增加4byte。也是為了保持變數間間隔2個棧幀。
若第一個變數是char,那麼第一個區域性變數的位置是ebp-5,第二個變數ebp-11h,佔用一個棧幀,間隔2個棧幀,第三個變數仍然間隔2個棧幀。
若第一個變數是short或int,第一個變數的位置是ebp-8,後面間隔0Ch,double變數本身佔2個棧幀,但同下一個變數仍然間隔2個棧幀。
若第一個變數是double,位置是ebp-0C0h。後面間隔也是2個棧幀。
win32下vs2013彙編傳參和區域性變數棧的分配
相關文章
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- 區域性變數和全域性變數變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- java 全域性變數和區域性變數Java變數
- JavaScript —— 區域性變數和全域性變數JavaScript變數
- jmeter全域性變數和區域性變數JMeter變數
- 成員變數和區域性變數的區別變數
- 成員變數和區域性變數變數
- JVM-棧幀之區域性變數表JVM變數
- Python中的全域性變數和區域性變數Python變數
- js-js的全域性變數和區域性變數JS變數
- python全域性變數和區域性變數, globalPython變數
- Python的全域性和區域性變數Python變數
- 區域性變數申請棧空間時的入棧順序變數
- Python的區域性變數和全域性變數使用解惑Python變數
- 記憶體分配知識(全域性,區域性,靜態變數)記憶體變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- 全域性變數與區域性變數變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- Java基礎-成員變數和區域性變數的區別Java變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- Java區域性變數與全域性變數Java變數
- 【c】全域性變數與區域性變數變數
- 酒店房間和 C++ 區域性變數的作用域C++變數
- python全域性變數與區域性變數Python變數
- JavaScript全域性作用域下,變數加var和不加var的區別。JavaScript變數
- go區域性變數的儲存空間是堆還是棧?Go變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- Win32彙編教程二 Win32彙編程式的結構和語法 (轉)Win32
- iOS 靜變數static、全域性變數extern、區域性變數、例項變數iOS變數
- Python全域性變數與區域性變數詳解Python變數
- 詳解python 區域性變數與全域性變數Python變數
- 記一個全域性變數"冒充"區域性變數引起的bug變數
- javap -c 運算元棧 區域性變數表執行過程Java變數
- test函式中的區域性變數函式變數
- 讀《我和Labview》7控制元件的區域性變數和屬性View控制元件變數