BCC16VM 教材:指定位址

正常情況下,CPU 每執行一個指令,PC 就會自動加一。 這就是程式的基本『流程』:沒有特殊狀況的時候, 程式就是一個指令接著一個指令地往下做。 如果只能這樣,那麼高階語言 (例如 C) 的「流程控制」是怎麼辦到的呢? 基本上,那是利用 goto 指令。

其實 goto 的作用,就是直接在 PC 內寫入指定的位址 (0--15 之間), 但是因為指令執行之後,PC 會被自動加一,所以如果想要讓 CPU 下一次執行 N 號位址, 必須要說 goto N-1 才行。 然後,因為 CPU 按照 PC 的指示去工作, 其效果就好像 CPU『跳』到另一個指令去了。

為了示範,以下我們故意寫一個無窮迴圈程式。 執行之後,請按 [Stop] 來終止它。 這個程式將會不停地在 Console 輸出 *

指令位址組合語言機器碼
0001  print '*' 00000110
0010  goto 0 10000000

舊的程式不擦掉也沒關係,只要把 PC 設定成 00000001。 然後按 [Run] 就會看到它重複執行 00010010 這兩個機器碼,永不止息。

看夠了,按 [Stop] 停止執行。

習題

  1. 寫一個程式,讓它從 0000 所存的數開始, 不停地輸出下一個整數,每個數一列。 例如,如果 0000 儲存的是 11110000,則輸出
    240
    241
    242
    ...
    (其中 ... 只是示意,應繼續輸出)。按 [Stop] 終止。
[BCC16-B]
單維彰 (2004/06/10) ---
[Prev] [Next] [Up]