指令集與組合語言

下列何者是制定呼叫慣例(calling convention)的主要目的?

  1. A統一函式的命名方式,讓程式更容易閱讀
  2. B讓分別編譯的函式或函式庫之間,能正確地傳遞引數與回傳值
  3. C讓每次呼叫函式都要取得作業系統的許可
查看答案與解析

正確答案:B. 讓分別編譯的函式或函式庫之間,能正確地傳遞引數與回傳值

呼叫慣例規定了引數要放進哪個暫存器、回傳值要回傳到哪裡、哪些暫存器被呼叫端可以破壞,以及堆疊如何使用。因為有這項約定,即使將不同編譯器製作的函式庫,或以組合語言撰寫的函式與C語言的函式組合起來,也能正確運作。呼叫慣例是ABI(應用程式二進位介面)的重要一部分。

  • A. 不是命名方式的規則。
  • B. 正確。是機器語言層級的約定。
  • C. 函式呼叫與作業系統無關。
練習這個領域 前往領域頁面

指令集與組合語言的其他題目

  1. 在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?
  2. 在RISC-V的標準呼叫慣例中,呼叫一個有10個整數引數的函式時,第9個與第10個引數是在哪裡傳遞?
  3. 在RISC-V的呼叫慣例中,s0~s11被視為「被呼叫端保存(callee-saved)」的暫存器,下列何者是其意義?
  4. 在RISC-V的呼叫慣例中,t0~t6是「呼叫端保存(caller-saved)」的暫存器。當某個函式想在呼叫另一個函式之後,仍使用放在t0的值時,下列何者是正確的處理?
  5. 不呼叫其他函式的函式(葉函式、leaf function),在很多情況下不需要將ra保存到堆疊。下列何者是其理由?