CASL(Computer Assembly Language)是教學用模擬處理器架構,廣泛用於計算機組織課程。本文系統整理 CASL 的 CPU 架構、定址模式、指令集、偽指令、常用子程式設計模式,並收錄 1996-2001 年經典考題詳細解析,作為學習與複習的完整參考。
字長 16 位元,編號從左至右(bit0 為最高位,bit15 為最低位)。
16 位元,儲存當前指令第一字地址(每條指令佔 2 字),指令結束自動指向下一條(通常 +2)。
| 運算結果 | FR0(符號位 SF) | FR1(零位 ZF) |
|---|---|---|
| 大於 0 | 0 | 0 |
| 等於 0 | 0 | 1 |
| 小於 0 | 1 | 0 |
除算術邏輯與移位指令外,LEA 也會影響 FR。
統一格式:OP GR, ADR[, XR]
[,XR],EA = ADRLEA GR, IMM 可傳送立即數LEA GR, 0, XR 可實現暫存器間傳送| 分類 | 助憶碼 | 操作說明 | 影響旗標 |
|---|---|---|---|
| 資料傳送 | LD / ST | 記憶體⇄暫存器 | 否 |
| 算術邏輯 | ADD, SUB, AND, OR, EOR | 記憶體 OP 暫存器 → 暫存器 | 是 |
| 比較 | CPA / CPL | 帶號/無號比較,不回存,僅影響 FR | 是 |
| 移位 | SLA, SRA, SLL, SRL | 算術/邏輯左右移,位數由 EA 決定 | 是 |
| 載入有效位址 | LEA | EA → 暫存器,支援立即數、暫存器傳送、自增等特殊用法 | 是 |
| 轉移 | JMP, JPZ, JMI, JNZ, JZE | 無條件/條件轉移,支援直接與間接相對轉移 | 否 |
| 堆疊 | PUSH / POP | PUSH 來源不含 GR0;POP 目的為 GR0~GR4 | 否 |
| 子程式 | CALL / RET | 呼叫與返回 | 否 |
| 巨集 | IN, OUT, EXIT | 輸入/輸出/結束,由作業系統實作,GR 不變,FR 不定 | - |
START / END:程式進入點與結束DC:定義常數(十進位、字串、十六進位 #h、標號地址)DS:保留儲存區(n=0 時標號仍有效指向下一字)因無立即數運算指令,需先以 DC 定義常數再運算。
利用 AND #000F 取最低 4 位,SRL 4 右移拋棄,配合迴圈計數器 GR3、指標 GR2 完成 4 位元 BCD 碼與記憶體陣列互轉。
ADD #30H30H,A-F 加 37H(先 CPL #0A 判斷)30H,若 ≥10 再減 07HSLL n(無號)/ SLA n(帶號)SLL 1 存暫存,SLL 2(×4),相加得 ×10SLL 3(×8)減原值((Dₙ×10+Dₙ₋₁)×10+...)×10,×10 用移位加法實現指標 GR2 走訪陣列,GR3 計數,GR0 累加,最後 ST GR0, SUM。
核心邏輯:GR1 源指標、GR2 目標指標、GR3 模式旗標(0=ASCII, 1=漢字)、GR0 工作字元。
關鍵填空:
(1) LD GR0,0,GR1 取字元
(2) JZE GOON 連續 ~~ 處理
(3) EOR GR3,V1 切換模式旗標
(4) OR GR0,V0,GR3 漢字模式置高位
(5) JNZ LOOP 檢查結束符 0
暫存器分配:GR1 參數表指標、GR2 暫存 a/|b|、GR3 b 符號、GR0 應發薪 c。
關鍵填空:
(1) LD GR2,0,GR1 取 a
(2) ADD GR0,BONUS,GR3 依符號加減獎金(GR3=1 時為負)
(3) ST GR0,2,GR1 存 c
(4) LEA GR1,3,GR1 指向下一筆
(5) JMP L1 繼續處理
GR1 存 15 位資料(bit0=0),GR2 工作暫存器,GR3 計數器(初值 1 表奇校驗)。
關鍵填空:
(1) LEA GR2,0,GR1 複製資料
(2) JPZ L2 最高位為 1 時計數+1
(3) SLL GR3,15 將奇偶性移至最高位
ST GR3,WORK / ADD GR1,WORK 合成 16 位結果
GR1 參數表(A, n, B),GR2 陣列指標,GR3 計數器 n,GR0 累加和。
(4) LEA GR3,-1,GR3 計數-1
(5) LD GR3,2,GR1 取結果地址 B
一字雙字元(各 8 位),GR2 計數器(遞減清零 NCH 10 格),GR1 字串指標,GR2 工作字元,GR4 高低位旗標,GR3 暫存比較。
關鍵填空:
(1) ST GR0,NCH,GR2 清零統計陣列
(2) SLL GR2,8 第二次處理低位元組
(3) ADD GR2,NCH,GR3 累加
(4) ST GR2,NCH,GR3 存回
(5) LEA GR1,1,GR1 字串指標+1
GR0 被轉換數,GR2 結果緩衝區指標,GR1 位權陣列 SNO 索引(10⁴~10⁰),GR3 字元計數器(初值空格 32)。
關鍵填空:
(1) CPL GR0,SNO,GR1 比較是否 ≥ 10ⁱ
(2) LEA GR3,48 初始化 '0' ASCII
(3) CPL GR0,SNO,GR1 同 (1)
(4) JMP L3 繼續減法試商
(5) LEA GR3,-5,GR1 判斷是否完成 5 位
參數:M, N, NTABLE 首址。LOW=0, UP=N-1。K=(LOW+UP)/2。
關鍵填空:
(1) LD GR2,1,GR1 取 N
(2) LEA GR2,-1,GR2 UP=N-1
(3) ADD GR3,2,GR1 計算 NTABLE(K) 地址
(4) CPL GR0,0,GR3 比較 M 與 NTABLE(K)
(5) LD GR2,UP 取 UP 比較空間
(6) JPZ LOOP 空間非零繼續
(7) LD GR2,-1 找不到回傳 0(GR0=GR2+1=0)
CASL 雖為教學架構,但其指令集設計涵蓋了處理器核心概念:暫存器架構、定址模式、旗標運算、堆疊與子程式慣例、I/O 巨集等。熟練掌握上述指令與設計模式,配合歷屆考題實戰演練,可建立扎實的底層程式設計思維。