BCC16VM 很單純,它只能輸出非常少量的訊息,印在它自己的 console 上。 那些負責輸出的機器碼,都是 0000 指令碼,通稱為 interrupts (中斷指令)。 其中 00000000 代表程式結束, CPU 不會繼續運作。而執行 00000000 時,會在 console 輸出
\nthe end\n其中 \n 代表『折到下一列』。
以下我們寫一個非常無聊的程式,在 console 中輸出
1 + 1 = 2任何數值,必須放在暫存器內,才能輸出。 但是暫存器內並沒有 1 也沒有 2,怎麼辦呢? 辦法之一是,先把 1 和 2 寫進資料段,這是我們自己可以輸入的。
譬如我們將 1 也就是 00000001 寫進 0000, 將 2 也就是 00000010 寫進 0001。 可完成上述任務的程式如下:
記號 | 機器碼 |
---|---|
R0 <- 0000 | 10100000 |
R1 <- 0001 | 10110001 |
print R0 | 00001010 |
print ' ' | 00000010 |
print '+' | 00000100 |
print ' ' | 00000010 |
print R0 | 00001010 |
print ' ' | 00000010 |
print '=' | 00001001 |
print ' ' | 00000010 |
print R1 | 00001011 |
stop | 00000000 |
注意 print R0, print R1 和 print R2 這三個指令, 只會把 R0, R1 或 R2 的內容做無號整數解讀,並以十進制數字輸出。 它們無法輸出其他解釋的文字或數字。
以上程式有 12 個機器碼,而 BCC16VM 的指令段可以儲存最多 16 個機器碼, 因此可以放得下。 一般而言,我們從 0000 開始輸入機器碼, 一直寫到 1011 為止。然後,有必要的話,將 PC 的內容歸零, 也就是輸入 00000000,然後按 [Run] 可以觀察機器碼的運作情形。
習題