Q74.
利用堆疊器交換C、D 兩暫存器的資料,下列哪些敘述正確?
儀表電子 · 甲級 · 嵌入式系統概論與應用及程式設計 · Q74
難易度分析
3 / 5
本題考驗對堆疊 LIFO 機制的掌握,並要求在多個 PUSH 與 POP 的排列中正確辨識哪一組能完成資料交換。題目僅提供指令序列,無額外圖像或提示,需自行推斷彈出順序與覆蓋情形。由於涉及多重選擇且需排除覆蓋錯誤,難度評為中等。
正確答案 (複選):①, ②
- ① PUSH C、PUSH D、POP C、POP D:依序將 C、D 推入堆疊後,堆疊由底至頂為 [C, D]。執行 POP C 時取出棧頂的 D 值寫入 C,再執行 POP D 時取出棧底的 C 值寫入 D,利用 LIFO(後進先出) 特性成功完成交換。
- ② PUSH D、PUSH C、POP D、POP C:依序將 D、C 推入堆疊後,堆疊由底至頂為 [D, C]。執行 POP D 時取出棧頂的 C 值寫入 D,再執行 POP C 時取出棧底的 D 值寫入 C,同樣符合 堆疊後進先出 的交換原理。
錯誤選項解析
- ③ PUSH D、PUSH C、POP C、POP D:推入順序為 D、C,堆疊由底至頂為 [D, C]。但 POP C 會先取出棧頂的 C 值寫回 C(值不變),POP D 再取出棧底的 D 值寫回 D(值不變),導致 兩暫存器內容均未改變,無法達成交換目的。
- ④ PUSH C、POP D、PUSH D、POP C:執行 PUSH C 後堆疊為 [C],POP D 使 D 取得 C 的值,此時 D 已等於 C 的原始值。接著 PUSH D 推入的是 C 的值,最後 POP C 又取回 C 的原始值,結果 C 與 D 均為 C 的原始值,D 的原始資料已遺失。
Learning Tip
"此題核心考點為 堆疊的 LIFO(後進先出)特性 與 PUSH/POP 的配對順序。常見陷阱在於混淆 PUSH 與 POP 的執行順序:必須確保「最後推入的資料最先彈出到另一個暫存器」。實務上需特別注意,當 POP 的目標暫存器與之前 PUSH 的來源相同 時,會導致資料覆蓋而無法完成交換。"
學員答題分佈
①PUSH C、PUSH D、POP C、POP D0%
②PUSH D、PUSH C、POP D、POP C0%
③PUSH D、PUSH C、POP C、POP D0%
④PUSH C、POP D、PUSH D、POP C0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!
相似類型題目
下列那一程式片段恰可將暫存器A、B 的內容對調?
如下列程式所示,假設指令PUSH X 的動作是將暫存器X 的內容放入堆疊(stack),指令POP X 的動作是從堆疊取出一筆資料放入暫存器X 中。若暫存器的內容分別為:A=18、B=19、C=20、D=21 時,則依序執行下列程式後,暫存器A 的內容將為何?
對於堆疊(Stack)記憶體及佇列(Queue)的儲存架構,下列敘述哪些正確?
假設指令PUTQ X 的動作是將暫存器X 的內容放入佇列(queue),指令GETQ X 的動作是從佇列取出一筆資料放入暫存器X 中,X 可為任意暫存器。若暫存器的內容分別為:A=18、B=19、C=20、D=21 時,則依序執行下列程式後,暫存器A 的內容將為何?
關於電腦中堆疊的敘述,下列何者錯誤?