電腦的動作#
即可程式化 programmable、儲存 store、擷取 retrieve 及運算 process。
機器語言#
機器語言是電腦唯一能執行的指令,由二進制的數字組成。
Pep/8 虛擬電腦#
依據不同的CPU會有不同的機器語言,而Pep/8為一台假想的電腦,具有真實電腦應有的特徵,及39個機器語言指令。
- 記憶單元:由65536個位元組的記憶體組成。
- 字語長度:2個位元組,也就是16位元。
- CPU 內有7個暫存器,以下會討論到三個:
- PC 程式計數器:存放下一個被執行的指令位址。
- IR 程式暫存器:儲存目前執行的指令。
- 累加器(A暫存器)。
一個位元組能表示的最大數為255(base 10),也就是11111111(base 2)、0xFF,一個字語(16位元)能表示的最大數為65535,也就是0xFFFF,若要表示負數,則範圍為0x-7FFF~0x7FFF
指令格式#
有兩個部分:
8bits 的指令指標 instruction specifier:表示要執行何種運算,及指標需如何解讀。
16bits 的運算元指標 operand specifier(非必要):存放運算元本身或運算元地址。
- 指令指標格式
運算碼 operation codes (opcodes) 有4~8個位元長度,我們討論4或是5個bit的,其中 4bits 的第五個 bit 用來表示使用哪個暫存器,暫存器指標為0代表使用A暫存器。
定址模式指標佔 3bits,如果為000代表為立即定址,代表運算元指標即運算元本身;001為直接定址,代表運算元指標為記憶體位址;還有兩種定址模式不討論。
組合語言#
以指定的字母來助憶機器語言,由組譯器負責翻譯。
Pep/8 組合語言#
運算碼由0x和四位16進位值組成,定址模式由i(立即)或d(直接)表示。
組合語言 | 機器語言 | 運算元指標 |
---|---|---|
STOP | 0000 | |
LDA | 1100 | 0x0008,i |
LDA | 1100 | 0x0008,d |
STA | 1110 | 0x0008,d |
ADDA | 0111 | 0x0008,i |
ADDA | 0111 | 0x0008,d |
SUBA | 1000 | 0x0008,i |
SUBA | 1000 | 0x0008,d |
BR | ||
CHARI | 01001 | 0x0008,d |
CHARO | 01010 | 0x0008,i |
CHARO | 01010 | 0x0008,d |
DECI | 00110 | 0x0008,d |
DECO | 00111 | 0x0008,i |
DECO | 00111 | 0x0008,d |
組譯器指揮動作#
- .ASCII+”STR/x00":表示一組字串。
- .BLOCK+位元組數目:產生一個空間。
- .WORD+值:指派一個值給字語。
- .END:結束。
分歧指令#
- BRLT,若小於則跳至分歧。
- BREQ,若等於則跳至分歧。
演算法表示#
虛擬碼 pseudocode 功能#
- 變數:出現的名稱,需反應其角色。
- 指定:變數需要放值,如 Set sum to 0,或是 sum ← 0。
也可以用 Set sum to sum + num,或是 sum ← sum + num。
- 輸入/輸出
Write “Hello word!” |
- 選擇
IF(sum<0)… |
- 重複
WHILE(counter < limit) … |