1樓:匿名使用者
圖1圖2
既然你都沒學過彙編,由何必糾結與這些記憶體裡的內容?
高階語言看到的東西(語句)是無法詳細說明記憶體內容的,
其中根本原因是,在函式呼叫與引數傳遞過程中,編譯器會自行進行優化,即使是同一個呼叫語句,如果編譯選項中優化等級不同,其傳送的彙編指令就不同,操作記憶體就不同。
對於函式max棧幀的產生過程也即函式max的呼叫過程如下:
一、引數入棧,如圖2中的x,y值,入棧順序c編譯器預設是從右至左,其為值傳遞,做事是a、b值的拷貝;
二、返回地址入棧,
三、ebp入棧,即儲存主函式的棧幀指標,
四、ebp棧幀暫存器值改為指向儲存「三」中ebp記憶體其中,以此為界,低地址為max的區域性變數等記憶體區域,高地址部份除了
一、二步的內容為當前棧幀也屬於max的棧幀內容外,其他為main函式的棧幀內容。
可見max區域性變數只有z一個,x、y為何不是區域性變數(高階語言而言,其是,但嚴格而言其不是,其只是函式接收的引數,各種緣由要解釋也一大堆理論,編譯器不同也會不同)
至於返回時為何有兩個z值的拷貝,一個值z區域性變數,另一份值拷貝,要看編譯器傳送**的規則而定,也即有些是通過暫存器返回值的也就不必那麼麻煩,有些是通過堆疊返回結果的等等,可通過彙編指令視窗分析其返回結果的機制。
vc有反彙編視窗,可以一目瞭然。
若不學彙編就不必糾結與底層與細節,即使你學了彙編還是得有相關理論才知道是怎麼一回事,
可以刨根問題,但要有多大鍋,放多少米,多涉略,阿門。。。
2樓:匿名使用者
發你的**,這個圖看不清
請日語高手幫忙翻譯一下圖中的日文,謝謝
前一半後一半都是客套話,總之就是說只能用官方發行承認的 傳送鍵 pass key 功能,除此之外一旦發現使用立即凍結賬號。請日語高手幫忙翻譯下日文標籤的意思!謝謝了!薬漬 患者 過度 薬 服用 醫療 從以上單詞解釋來理解 此標籤應該只是一種強力加藥的噴霧劑。使用時與銷售方進行確認。具體你說的是不是春...
幫忙翻譯一下圖中的日語,急用謝謝
圖中文字的中文意思 因為洗劑 的功效 是把非洗淨物的汙濁溶解或分解在洗劑中,液體 洗劑 會逐漸變的汙濁,如果繼續使用就會起相反的作用 效果 為了保持安定的洗淨度,用比重計測定油的含量,進行液體的管理。標準值 常溫 1,400以下請更換洗劑 洗潔劑的管理 洗潔劑是將非潔淨物中的髒物從洗潔劑中溶解和分化...
彙編相關。請幫我分析一下這是個什麼行為
eax裡面當前放的是一個按位的flag,類似0x1 0x10 0x1000這樣得出的結果,每個二進位制位代表一個flag,這段程式再用test和需要做測試的位做與運算,如果那個位是0,就跳轉到相應的後續語句,否則作相應的處理,然後跳轉到最後的0x00517da6 具體反匯編出來是 從圖裡第一個jmp...