1. 8086CPU有14個寄存器,
通用寄存器:AX、BX、CX、DX
SI、DI
SP、BP、IP
CS、SS、DS、ES、PSW
8086CPU的所有寄存器都是16位的。
8位寄存器放存放十進位數的範圍:[0] 至 [2^8], 即 [0] ~ [255]
2. 看到上面這麼多寄存器,頭暈了不? = =~
3. 既然頭暈,就一個一個來吧。 先學習通用寄存器。
通用寄存器用來存放一般性資料,所以稱為通用寄存器。
4. 有一個很有意思的地方。 8086CPU的上一代CPU,寄存器都是8位的,為了保證相容性,
8086CPU中的AX、BX、CX、DX(通用寄存器) 都只可以分為2個獨立的8位寄存器來用。
AX 可分為 AH AL
BX 可分為 BH BL
CX 可分為 CH CL
DX 可分為 DH DL
L 應該是 Lower 低8位(0 ~ 7位)的意思, H 應該是 Higher 高8位(8 ~ 15位)的意思.
5. 8086CPU可以一次性處理2種尺寸的資料: byte(位元組)、word(字)
其中 一個字(word)由2個位元組組成, 1 word = 2 bytes.
6. 幾條彙編指令:
mov ax, 18 將18送入寄存器AX<br />mov ah, 78 將78送入寄存器AH<br />add ax, 8 將寄存器AX中的數值加上8<br />mov ax, bx 將寄存器BX中的資料送入寄存器AX<br />add ax, bx 將AX和BX寄存器中的數值相加,結果存在AX中
7. 幾種常見錯誤:
mov ax, bl (不能在8位和16位寄存器之間傳送資料)<br />mov bh, ax (不能在16位和8位寄存器之間傳送資料)<br />mov al, 20000 (8位寄存器最大可存放值為:255,這個20000 = =~)<br />add al, 100H (8位寄存器可存放不了這個高於8位的資料, 嘻嘻)
8. 程式碼範例:2個通用寄存器 add
假設 ax 和 bx 都是 8226H
add ax, bx
// 以下進行小學加法運算
8226H
+
8226H
--------------------
1044CH
由於 ax 寄存器要存放 add 的結果值 1044CH, 而1044CH明顯是大於4位的16進位資料,
ax 寄存器是16位寄存器,只能存放 16 / 4 = 4 位16進位資料,
所以最高位 1 無法在ax 寄存器中儲存,最終 ax 寄存器中存放的資料為: 044CH
9. 程式碼範例:al 寄存器 add
假設: al 中存放的資料為 C5H
add al, 93H
// 下面還是進行小學加法運算
C5H
+
93H
----------------
158H
由於al 是8位寄存器,最多隻能存放 8 / 4 = 2位16進位資料,
So, 最高位 1 無法在 al 寄存器中存放, 最終 al 寄存器中的資料為 58H