開放電腦計畫 -- 系統程式
(使用 JavaScript 實作)

目錄 | 下載 陳鍾誠金門大學

CPU0 處理器

商用的處理器通常因為強調效能的原因,其設計都會讓指令格式變得難懂且複雜。

為了讓處理器變得更簡單,更容易理解,我們設計了 CPU0 處理器,這個處理計的設計原則是 KISS,也就是 Keep It Simple and Stupid。

CPU0 的設計不求速度,只求清楚易懂,因此在指令級與指令格式上都盡量簡單,編碼都以 4 位元為單位,因此也很容易可以用人腦將組合語言翻成機器碼。

以下是一個 CPU0 的組合語言範例,該程式所作的事情是計算 1+2+...+10 的結果,最後應該會得到總和為 55。

檔案:sum.as0

        LD     R1, sum      ; R1 = sum = 0
        LD     R2, i        ; R2 = i = 1
        LDI    R3, 10       ; R3 = 10
FOR:    CMP    R2, R3       ; if (R2 > R3)
        JGT    EXIT         ;   goto EXIT
        ADD    R1, R1, R2   ; R1 = R1 + R2 (sum = sum + i)
        ADDI   R2, R2, 1    ; R2 = R2 + 1  ( i  = i + 1)
        JMP    FOR          ; goto FOR
EXIT:   ST     R1, sum      ; sum = R1
        ST     R2, i        ; i = R2
        LD     R9, msgptr   ; R9= pointer(msg) = &msg
        SWI    3            ; SWI 3 : 印出 R9 (=&msg) 中的字串
        MOV    R9, R1       ; R9 = R1 = sum
        SWI    4            ; SWI 4 : 印出 R9 (=R1=sum) 中的整數
        RET                 ; return 返回上一層呼叫函數
i:      RESW   1            ; int i
sum:    WORD   0            ; int sum=0
msg:    BYTE   "1+...+10=", 0   ; char *msg = "sum="
msgptr: WORD   msg          ; char &msgptr = &msg