Q79.
Atmega328P 程式碼如下,轉譯後的組語包含下列何者?
數位電子 · 甲級 · 程式語言 · Q79
難易度分析
3 / 5
此題需掌握 AVR 16 位元 I/O 註冊寫入順序、IN/OUT 語法與 LDI 指令用法,並辨識兩項正確選項,屬於中等複雜度。
正確答案 (複選):①, ②
- ①
:TCNT1 為 16 位元計數器,寫入 `0x1FF` 時,低位元組 0xFF 存入 TCNT1L,高位元組 0x01 存入 TCNT1H。此選項正確呈現將 `0x01` 載入 r17(高位)、`0xFF` 載入 r16(低位)的 LDI 指令,符合 16 位元暫存器寫入前的準備動作。 - ②
:讀取 16 位元 TCNT1 暫存器時,必須先讀 低位元組 TCNT1L 再讀 高位元組 TCNT1H,此為 AVR 硬體自動鎖定機制確保資料一致性。此選項的 IN 指令 順序正確,符合讀取 16 位元 I/O 暫存器的標準程序。
錯誤選項解析
- ③
:此選項使用 OUT 指令 將暫存器值寫入 TCNT1L/TCNT1H,但 OUT 指令的語法為 `OUT I/O暫存器, 通用暫存器`,此處順序雖正確,但題目包含讀取動作 `i = TCNT1`,應使用 IN 指令 而非 OUT 指令,故此選項不符合題意。 - ④
:OUT 指令 的正確語法為 `OUT I/O暫存器, 通用暫存器`,此選項將目的與來源顛倒,寫成 `OUT 通用暫存器, I/O暫存器`,屬於語法錯誤。AVR 組語中 OUT 指令不支援此種參數順序。
Learning Tip
"16 位元 I/O 暫存器存取為常考重點:寫入時使用 OUT 指令(先低後高),讀取時使用 IN 指令(先低後高)。注意 LDI 用於載入立即值到通用暫存器,IN/OUT 用於通用暫存器與 I/O 暫存器間的資料傳輸。容易混淆的是 IN/OUT 指令的參數順序:`IN Rd, A`(從 I/O 讀到 Rd)、`OUT A, Rr`(從 Rr 寫到 I/O)。"
學員答題分佈
①
0%
0%②
0%
0%③
0%
0%④
0%
0%此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!