BCC16VM 教材:輸出訊息

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] 可以觀察機器碼的運作情形。

習題

  1. 輸入並 [Run] 內文中標列