正常情況下,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] 就會看到它重複執行 0001 和 0010 這兩個機器碼,永不止息。
看夠了,按 [Stop] 停止執行。
習題
240 241 242 ...(其中 ... 只是示意,應繼續輸出)。按 [Stop] 終止。