←第 6 章・與微處理器溝通 全部課程
第 6 章 第 7–8 週

與微處理器溝通

Communicating with the Microprocessor

期中範圍的最後一段。兩件事:怎麼做輸入輸出,和組譯器怎麼把你的程式碼翻成機器碼。

課本小節
  • TRAP 與服務常式
  • 裝置暫存器
  • 組合語言與組譯流程
  • 符號表
概念 01

TRAP:跟作業系統借工具

TRAP Instruction
白話講

你想在螢幕印一個字。你要自己去操作螢幕的硬體嗎?太麻煩、也太危險。

TRAP 就是「按服務鈴」:你說「我要 x21 號服務(印一個字)」,作業系統就幫你做完,再把控制權還你。

像在餐廳你不用進廚房,按鈴跟服務生講就好。

TRAP x20 GETC 讀一個鍵(不顯示)
TRAP x21 OUT  印一個字(放在 R0)
TRAP x22 PUTS 印一整串字
TRAP x23 IN  讀一個鍵(會顯示)
TRAP x25 HALT 停機
在說什麼trap vector(x20 ~ x25)是服務編號。CPU 去記憶體開頭的 trap vector table 查這個編號對應的程式在哪,跳過去做完再回來。

TRAP 會把返回位址存在 R7。所以呼叫 TRAP 之前,如果 R7 裡有你要的東西,要先存起來,不然會被蓋掉。副程式巢狀呼叫時這個問題更嚴重。

概念 02

裝置暫存器:鍵盤和螢幕長什麼樣

Device Registers
白話講

對 CPU 來說,鍵盤和螢幕就是記憶體裡的幾個特殊格子(記憶體映射 I/O)。

每個裝置有兩個格子:一個放「狀態」(準備好了沒)、一個放「資料」。

KBSR xFE00 鍵盤狀態(最高位 = 1 表示有人按鍵了)
KBDR xFE02 鍵盤資料(按了什麼字)
DSR xFE04 螢幕狀態(最高位 = 1 表示螢幕可以接收了)
DDR xFE06 螢幕資料(要印的字)
在說什麼標準流程叫 polling(輪詢):不斷去讀狀態暫存器,等到 ready bit 變 1,才去讀/寫資料暫存器。

一定要先檢查狀態再動資料。螢幕還沒準備好你就塞字,字會不見。這個「先等 ready」的迴圈是 I/O 程式的固定開頭。

概念 03

組譯流程:你的字怎麼變成 0 和 1

The Assembly Process
白話講

你寫 ADD R1, R2, R3,CPU 看不懂。組譯器把它翻成 16 個 0 和 1。

但有個雞生蛋的問題:你寫 BR LOOP 時,組譯器還不知道 LOOP 在第幾行(它還沒讀到)。

解法:讀兩遍。

第一遍 (Pass 1) 只做一件事:建立符號表(每個 label 在第幾個位址)
第二遍 (Pass 2) 照符號表,把每一行翻成機器碼
在說什麼為什麼要兩遍?因為有「向前引用」(用到還沒定義的 label)。第一遍先把所有 label 的位址記下來,第二遍就都查得到了。這是必考問答題。
虛擬指令(pseudo-op,不是真指令)
.ORIG x3000 程式從哪裡開始  .END 結束
.FILL 值  放一個值    .BLKW n 空出 n 格  .STRINGZ "…" 放字串
在說什麼這些是給組譯器看的指示,不會變成 CPU 執行的指令。.ORIG 和 .END 每個程式都要有。
考卷上會這樣寫 Explain why the assembler requires two passes. What is stored in the symbol table? 兩遍是為了處理向前引用(forward reference)。符號表存的是每個 label 對應的記憶體位址。Lecture10、11 講的就是這個。
白話講堂・由 Atlas 產生。內容依據課程教材與官方教學大綱整理,不是老師的官方講義,請以課堂公告為準。