←第 5 章・微處理器指令集導論 全部課程
第 5 章 第 5–6 週

微處理器指令集導論

Introduction to Instructions

期中考的核心。 ISA 就是「CPU 聽得懂的語言」。LC-3 只有 16 個指令,全部背起來不難,難的是定址模式——同樣是「拿資料」,有四五種不同的拿法。

課本小節
  • ISA 是什麼
  • LC-3 三類指令
  • 定址模式
  • 分支與迴圈
概念 01

ISA:軟硬體之間的合約

Instruction Set Architecture
白話講

ISA 是一份合約:硬體答應「你給我這些指令,我就做這些事」;軟體答應「我只用這些指令」。

有了合約,Intel 可以換掉內部設計,你的程式還是能跑;你也可以換編譯器,CPU 照樣認得。

ISA 規定:指令集、資料型態、定址模式、暫存器、記憶體組織
在說什麼考題問「What is included in the ISA?」就答這五項。不包含:電路怎麼設計、用幾個電晶體、時脈多快——那些是微架構的事。
LC-3 三類指令 運算類 ADD, AND, NOT
        資料搬移類 LD, LDI, LDR, LEA, ST, STI, STR
        控制類 BR, JMP, JSR, RET, TRAP
在說什麼分類記比較快。搬移類的名字有規律:L = Load(讀進來)、S = Store(寫出去);後面 I = Indirect、R = Register+offset、EA = Effective Address。
概念 02

定址模式:同樣是拿東西,有四種拿法

Addressing Modes
白話講

「去拿資料」可以有很多種講法:

PC 相對 (LD)=「從我現在的位置往前數 20 格」。缺點:只能構到附近 ±256 格。
間接 (LDI)=「往前數 20 格,那裡寫著一個地址,去那個地址拿」。可以構到整個記憶體。
基底+偏移 (LDR)=「以這個暫存器裡的地址為基準,往前數 5 格」。跑陣列最好用。
立即 (LEA)=「我只要地址,不要內容」。

LD R1, LABEL → R1 ← M[PC + offset]   (讀一次記憶體)
LDI R1, LABEL → R1 ← M[ M[PC + offset] ] (讀兩次記憶體)
LDR R1, R2, #5 → R1 ← M[R2 + 5]
LEA R1, LABEL → R1 ← PC + offset    (不讀記憶體)
在說什麼差別在讀幾次記憶體:LEA 0 次、LD 1 次、LDI 2 次。這是最常考的比較題。

為什麼需要 LDI?因為 PC 相對只能構到 ±256 個位置。要存取遠方的資料,就先在附近放一張「紙條」寫著遠方的地址,再照紙條去拿。這就是間接定址。

概念 03

分支與迴圈:用條件碼做決定

Branches and Loops
白話講

CPU 怎麼做 if 判斷?靠三個小燈泡:N(負)、Z(零)、P(正)。

每次運算完,這三個燈會依結果亮一個。然後 BR 指令去看燈:「如果 Z 亮就跳」。

if-else、for、while,全部都是用這個湊出來的。

BRz LABEL → 如果上一個結果是 0,就跳到 LABEL
BRnp LABEL → 如果是負的或正的(也就是不等於 0),就跳
BR / BRnzp → 無條件跳
在說什麼n、z、p 可以任意組合。三個都寫=無條件跳;三個都不寫=永遠不跳(等於 NOP)。

條件碼是「上一個寫入暫存器的指令」設定的,不是「上一個指令」。ST 之類不寫暫存器的指令不會改變 NZP。程式順序一改,BR 的判斷就可能跟著錯——這是 debug 時最難找的 bug。

考卷上會這樣寫 Write an LC-3 program that computes the sum of 12 integers stored starting at x3100. 典型結構:LEA 設基底 → 計數器設 12 → 迴圈內 LDR 讀值、ADD 累加、ADD 基底+1、ADD 計數器−1 → BRp 回迴圈。Lecture6 就是講這題。
白話講堂・由 Atlas 產生。內容依據課程教材與官方教學大綱整理,不是老師的官方講義,請以課堂公告為準。