回覆列表
  • 1 # 使用者5812528539520

    這真是一個挺好的問題,手機先佔坑。

    返回的是 eax 暫存器裡的內容。

    eax 暫存器有兩個作用:

    計算時的臨時儲存變數 在函式返回時,作為傳遞返回值的暫存器

    想要看到高階語言的更底層實現,需要去看它的彙編結果,題主程式碼的彙編結果手機上不方便寫出來,整體邏輯是:函式 swap 內的 return 對應著將結果放到了eax 暫存器,主函式 main 中如果有 x = swap(a, b) 對應的彙編為:

    更進一步:

    一個更簡單的程式:

    你可以想象 add 函式中會有一條彙編語句:

    如果修改一下程式:

    你猜會怎麼樣?程式編譯會給出一條警告,但是可以編譯成功,而且執行結果是正確的。

    因為 eax 有兩個功能:

    計算時的臨時儲存變數 在函式返回時,作為傳遞返回值的暫存器

    a + b 的時候結果已經存到 eax 中了, 單純的 return 並不會影響 eax,所以主函式中讀到的 a + b 時使用的功能1中的結果。

  • 中秋節和大豐收的關聯?
  • 是什麼決定了學習理論物理的好壞,人的哪些特質能學好理論物理?