在計算機中,為使 CPU 能完整地執行使用者要求的工作,指令集(Instruction Set)必須包括以下幾類指令:
1. 資料轉移指令(Data Transfer Instructions)
這類指令用於在寄存器、內存和I/O裝置之間傳輸資料。
- MOV:將資料從一個位置移到另一個位置。例如,MOV AX, BX 將 BX 寄存器的內容移到 AX 寄存器。
- LOAD:從內存加載資料到寄存器。例如,LOAD R1, [1000] 將內存地址 1000 的值加載到寄存器 R1。
- STORE:將寄存器中的資料存儲到內存。例如,STORE R1, [1000] 將寄存器 R1 的值存儲到內存地址 1000。
2. 算術指令(Arithmetic Instructions)
這類指令用於執行基本的算術運算,如加法、減法、乘法和除法。
- ADD:加法指令。例如,ADD AX, BX 將 AX 和 BX 的值相加,結果存放在 AX。
- SUB:減法指令。例如,SUB AX, BX 將 AX 減去 BX,結果存放在 AX。
- MUL:乘法指令。例如,MUL BX 將 AX 和 BX 相乘,結果存放在 AX。
- DIV:除法指令。例如,DIV BX 將 AX 除以 BX,商存放在 AX,餘數存放在 DX。
3. 邏輯指令(Logical Instructions)
這類指令用於執行位操作,如按位與、或、異或和非操作。
- AND:按位與。例如,AND AX, BX 將 AX 和 BX 按位與,結果存放在 AX。
- OR:按位或。例如,OR AX, BX 將 AX 和 BX 按位或,結果存放在 AX。
- XOR:按位異或。例如,XOR AX, BX 將 AX 和 BX 按位異或,結果存放在 AX。
- NOT:按位非。例如,NOT AX 將 AX 的每一位取反。
4. 控制指令(Control Instructions)
這類指令用於控制程式的執行流程,包括條件跳轉、無條件跳轉、呼叫子程式和返回。
- JMP:無條件跳轉。例如,JMP 1000 將程式計數器設置為 1000,轉到地址 1000 執行指令。
- JZ 或 JE:條件跳轉,如果零標誌位(ZF)設置,則跳轉。例如,JZ 1000 如果 ZF 為 1,則跳轉到地址 1000。
- CALL:呼叫子程式。例如,CALL 2000 跳轉到地址 2000 執行子程式,返回地址壓入堆疊。
- RET:從子程式返回。例如,RET 從堆疊彈出返回地址,跳回主程式。
5. 比較指令(Comparison Instructions)
這類指令用於比較兩個操作數,並設置狀態標誌位。
- CMP:比較指令。例如,CMP AX, BX 比較 AX 和 BX,設置標誌位(ZF、CF、SF等)以反映比較結果。
6. 位移和旋轉指令(Shift and Rotate Instructions)
這類指令用於移動寄存器中的位元,通常用於快速的乘法或除法運算。
- SHL 或 SAL:算術左移。例如,SHL AX, 1 將 AX 中的位元向左移動 1 位。
- SHR:算術右移。例如,SHR AX, 1 將 AX 中的位元向右移動 1 位。
- ROL:循環左移。例如,ROL AX, 1 將 AX 中的位元循環左移 1 位。
- ROR:循環右移。例如,ROR AX, 1 將 AX 中的位元循環右移 1 位。
7. 特權指令(Privileged Instructions)
這類指令用於執行與系統控制相關的特殊操作,通常只能在內核模式下執行。
- HLT:停止處理器。例如,HLT 停止 CPU 的執行,直到下一個中斷發生。
- IN:從 I/O 端口讀取資料。例如,IN AX, DX 從由 DX 指定的 I/O 端口讀取資料到 AX。
- OUT:將資料寫入 I/O 端口。例如,OUT DX, AX 將 AX 中的資料寫入由 DX 指定的 I/O 端口。
這些指令類別涵蓋了 CPU 執行各種操作所需的基本功能,確保了計算機能夠完成使用者的各種任務。