---
# System prepended metadata

title: 計概：低階程式語言與虛擬碼
tags: [計算機概論]

---

# 計概：低階程式語言與虛擬碼
##  電腦的動作
>即可程式化 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!”
Read num
```
- 選擇

```
IF(sum<0)…
ELSE …
```

- 重複

```
WHILE(counter < limit) …
```

###### tags: `計算機概論`