BCC16VM 面板上有一個名叫 PC 的暫存器, 它不是 Personal Computer (個人電腦) 的意思, 它是 Program Counter (程式指標) 的意思。 PC 裡面可以寫 8-bit 資料,但是其實只有 0--15 是有意義的, 它就是指令段的位址。 而所謂『程式指標』的意義,就是說『 CPU 下一步要執行的工作, 便是 PC 內容所指的位址』。
例如我們將前一節,產生 230 並存入 0000 的機器碼程式, 在最後加上 stop 指令,共七句機器碼,寫在指令段的 2 到 8 號, 亦即 0010--1000;我們這次故意不要從 0 號開始寫程式。
指令位址 | 記號 | 機器碼 |
---|---|---|
0010 | R2 <- 15 | 01011111 |
0011 | R0 <- R2 | 10010010 |
0100 | R0 <- R0*R2 | 00110010 |
0101 | R2 <- 5 | 01010101 |
0110 | R0 <- R0+R2 | 00010010 |
0111 | R0 -> 0000 | 11010000 |
1000 | stop | 00000000 |
請實驗:將 PC 的內容寫入 00000010,也就是指令段位址 0010 的意思, 然後逐次按 [Run] 就發現 CPU 從 0010 開始逐步執行到 1000。 執行之後,PC 停留在最後一個指令位址,也就是 00001000。 因此,再按 [Run] 也無效,必須要先將 PC 改成 00000010, 才能夠再執行一遍。
如果 PC 是 00000110,然後按 [Step], 則 CPU 只執行 0110 而已,也就是做了 R0 <- R0+R2。 按下 [Step],您看到 CPU 執行了 PC 所指的機器碼, 然後 PC 的數值會自動加一。 因此,CPU 的下一個動作,根據 PC 的指示, 就會是指令段的下一個機器碼。
習題