首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

CASL 組合語言完整教學:語法、指令集、偽指令與經典考題解析

     編輯:組合語言

前言

CASL(Computer Assembly Language)是教學用模擬處理器架構,廣泛用於計算機組織課程。本文系統整理 CASL 的 CPU 架構、定址模式、指令集、偽指令、常用子程式設計模式,並收錄 1996-2001 年經典考題詳細解析,作為學習與複習的完整參考。

一、CASL CPU 可程式化暫存器架構

字長 16 位元,編號從左至右(bit0 為最高位,bit15 為最低位)。

1. 通用暫存器(GR0~GR4)

  • GR0:累加器特性,不可作變址暫存器
  • GR1~GR4:可作變址暫存器(XR),GR4 兼任堆疊指標(SP)
  • 功能:算術邏輯運算、資料搬移、位址運算

2. 程式計數器(PC)

16 位元,儲存當前指令第一字地址(每條指令佔 2 字),指令結束自動指向下一條(通常 +2)。

3. 狀態暫存器(FR,2 位元)

運算結果FR0(符號位 SF)FR1(零位 ZF)
大於 000
等於 001
小於 010

除算術邏輯與移位指令外,LEA 也會影響 FR。

二、指令格式與定址模式

統一格式:OP GR, ADR[, XR]

  • 直接定址:省略 [,XR],EA = ADR
  • 變址定址:EA = ADR + (XR);ADR=0 時為暫存器間接定址
  • 立即數定址:CASL 無通用立即數運算,僅 LEA GR, IMM 可傳送立即數
  • 暫存器定址:無通用暫存器定址,LEA GR, 0, XR 可實現暫存器間傳送

三、指令集詳細說明

分類助憶碼操作說明影響旗標
資料傳送LD / ST記憶體⇄暫存器否
算術邏輯ADD, SUB, AND, OR, EOR記憶體 OP 暫存器 → 暫存器是
比較CPA / CPL帶號/無號比較,不回存,僅影響 FR是
移位SLA, SRA, SLL, SRL算術/邏輯左右移,位數由 EA 決定是
載入有效位址LEAEA → 暫存器,支援立即數、暫存器傳送、自增等特殊用法是
轉移JMP, JPZ, JMI, JNZ, JZE無條件/條件轉移,支援直接與間接相對轉移否
堆疊PUSH / POPPUSH 來源不含 GR0;POP 目的為 GR0~GR4否
子程式CALL / RET呼叫與返回否
巨集IN, OUT, EXIT輸入/輸出/結束,由作業系統實作,GR 不變,FR 不定-

四、偽指令

  • START / END:程式進入點與結束
  • DC:定義常數(十進位、字串、十六進位 #h、標號地址)
  • DS:保留儲存區(n=0 時標號仍有效指向下一字)

因無立即數運算指令,需先以 DC 定義常數再運算。

五、常用子程式設計模式

1. 拆字與拼字(BCD 處理)

利用 AND #000F 取最低 4 位,SRL 4 右移拋棄,配合迴圈計數器 GR3、指標 GR2 完成 4 位元 BCD 碼與記憶體陣列互轉。

2. 數字與 ASCII 互轉

  • BCD → ASCII:ADD #30H
  • Hex → ASCII:0-9 加 30H,A-F 加 37H(先 CPL #0A 判斷)
  • ASCII → Hex:減 30H,若 ≥10 再減 07H

3. 乘法實作(移位+加減)

  • 乘 2n:SLL n(無號)/ SLA n(帶號)
  • 乘 10:SLL 1 存暫存,SLL 2(×4),相加得 ×10
  • 乘 7:SLL 3(×8)減原值

4. 二進位⇄十進位轉換

  • 二化十:依序被 104~100 減法試商,計數器即為該位數值
  • 十化二:霍納法則 ((Dₙ×10+Dₙ₋₁)×10+...)×10,×10 用移位加法實現

5. 累加求和

指標 GR2 走訪陣列,GR3 計數,GR0 累加,最後 ST GR0, SUM。

六、歷屆考題深度解析(1996-2001)

1. 2001 試題三:HZ 編碼解碼子程式 DEHZ

核心邏輯: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

2. 2000 試題四:薪資計算(基本薪 a、超額/不足 b、應發薪 c)

暫存器分配: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 繼續處理

3. 1999 試題四 程序 4.1:15 位元奇校驗位產生

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 位結果

4. 1999 試題四 程序 4.2:陣列求和子程式 SUM

GR1 參數表(A, n, B),GR2 陣列指標,GR3 計數器 n,GR0 累加和。
(4) LEA GR3,-1,GR3 計數-1
(5) LD GR3,2,GR1 取結果地址 B

5. 1998 試題四:字串數字字元統計

一字雙字元(各 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

6. 1997 試題四:二進位轉五位十進位 ASCII

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 位

7. 1996 試題四:二分搜尋子程式 OFFSET

參數: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 巨集等。熟練掌握上述指令與設計模式,配合歷屆考題實戰演練,可建立扎實的底層程式設計思維。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved