天天看點

Ting Machine完全指令集

前言

做編譯原理作業用到了,這裡就記錄一下吧。

第七個寄存器為專用寄存器,一般用來作為PC,指令計數器。

引用的課本: 《編譯原理及實踐》 Kenneth.C.Louden 機械工業出版社 2000.3

RO指令

寄存器指令 opcode r, s, t

  1. HALT     ~~~     0, 0(0)

    停止執行(操作數無意義)

    HALT 0, 0 (0)

  2. IN r, 0, 0

    标準輸入流讀取一個值放入 reg[r]

    IN 1, 0, 0 從标準輸入流讀取一個值放入寄存器 1中

  3. OUT r, 0, 0

    reg[r]輸出到标準輸出流

    OUT 1, 0, 0 把寄存器1輸出到螢幕中

  4. ADD     ~~~    r, s, t

    reg[r] = reg[s] + reg[t] , 即将寄存器 s 和 寄存器 t 中的值相加并放入寄存器 r 中

    ADD 1, 2, 3 即寄存器 2 中的值加寄存器 3 中的值,放入寄存器1中即

    ADD 1, 2, 3 reg[1] = reg[2] + reg[3]

  5. SUB     ~~~    r, s, t

    reg[r] = reg[s] - reg[t], 解釋見ADD

    SUB 1, 2 ,3 reg[1] = reg[2] - reg[3]

  6. MUL     ~~~    r, s, t

    reg[r] = reg[s] ∗ * ∗ reg[t], 解釋見ADD

    MUL1, 2, 3 reg[1] = reg[2] ∗ * ∗ reg[3]

  7. DIV     ~~~    r, s, t

    reg[r] = reg[s] / / / reg[t], 解釋見ADD

    DIV 1, 2, 3 reg[1] = reg[2] / / / reg[3]

RM指令

寄存器-存儲器指令 opcode r, d (s)

a = d + reg[s]

任何對dmem[a] 的引用若 a < 0 或者 a >= DADDR-SIZE時會産生DMEM-ERR

  1. LD     ~~~     r, d (s)

    reg[r] = dMem[d + reg[s]] 将記憶體位址為 d + reg[s] 中的值轉入寄存器 r 中

    LD 7, 0(1) 可以用該指令跳轉到 0 + reg[1]的位置

  2. LDA    ~~    r, d (s)

    reg[r] = d + reg[s] 将位址 d + reg[s] 轉入寄存器 r 中

    LDA 7, d(s) 可以用該指令進行跳轉到位置 a = d + reg[s]

  3. LDC    ~~    r, d (s)

    reg[r] = d 将常數 d 裝入寄存器 r 中 (s 忽略無用)

    LDC r, d (0)

  4. ST      ~~~~      r, d (s)

    dMem[d + reg[s]] = reg[r] 将寄存器 r 中的值放入記憶體位址編号為 a = d + reg[s] 的空間中

    ST r, d (s)

  5. JLT     ~~~     r, d (s)

    if (reg[r] < < < 0) reg[pc_reg] = d + reg[s]

    如果寄存器 r 中的值小于0, 則将位址a 放入pc寄存器(一般為寄存器7) , 相當于跳轉

  6. JLE     ~~~     r, d (s)

    if (reg[r] ≤ \leq ≤ 0) reg[pc_reg] = d + reg[s]

  7. JGE     ~~~     r, d (s)

    if (reg[r] ≥ \geq ≥ 0) reg[pc_reg] = d + reg[s]

  8. JGT     ~~~     r, d (s)

    if (reg[r] > 0) reg[pc_reg] = d + reg[s]

  9. JEQ     ~~~     r, d (s)

    if (reg[r] == 0) reg[pc_reg] = d + reg[s]

  10. JNE     ~~~     r, d (s)

    if (reg[r] != 0) reg[pc_reg] = d + reg[s]