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變數
- jmeter全域性變數和區域性變數JMeter變數
- Python中的全域性變數和區域性變數Python變數
- 成員變數和區域性變數變數
- JVM-棧幀之區域性變數表JVM變數
- js-js的全域性變數和區域性變數JS變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- 全域性變數與區域性變數變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- Java區域性變數與全域性變數Java變數
- 【c】全域性變數與區域性變數變數
- JavaScript全域性作用域下,變數加var和不加var的區別。JavaScript變數
- go區域性變數的儲存空間是堆還是棧?Go變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- 讀《我和Labview》7控制元件的區域性變數和屬性View控制元件變數
- javap -c 運算元棧 區域性變數表執行過程Java變數
- test函式中的區域性變數函式變數
- win32下彙編程式碼結構學習Win32
- 【Java貓說】例項變數與區域性變數Java變數
- C#7.0--引用返回值和引用區域性變數C#變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- Python閉包區域性變數問題Python變數
- C語言--靜態區域性變數C語言變數
- 強大的CSS:var變數的區域性作用域(繼承)特性CSS變數繼承
- 記憶體分配策略中,堆和棧的區別記憶體
- 區域性靜態變數的初始化觀測變數
- 為什麼要將區域性變數的作用域最小化?變數
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- Jack整理的Win32彙編基礎知識Win32
- 多執行緒中,區域性變數與全域性變數哪個比較安全?執行緒變數
- Java 中將lambda 表示式體中的變數賦值給lambda體之外的一個區域性變數時,要求那個區域性變數是final 修飾的Java變數賦值
- private,public,protected,static不可以修飾區域性變數,方法裡的變數變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數