
B vi x lý 8088/8086 và l p trình h p ng x86ộ ử ậ ợ ữ
3.1 Thanh ghi (Register)
Là các ph n t nh đ c bi t bên trong b vi x lý. các thanh ghi luôn có kích th cầ ử ớ ặ ệ ộ ử ướ
b ng nhau, kích th c này cũng chính là đ r ng c a data bus bên trong b x lý.ằ ướ ộ ộ ủ ộ ử
8088 là b vi x lý 16 bit do đó các thanh ghi c a 8088 đ u có kích th c 16 bit. ộ ử ủ ề ướ
M t s tác v đ c bi t nh nhân hay chia, k t qu b t bu c ph i đ t trong thanhộ ố ụ ặ ệ ư ế ả ắ ộ ả ặ
ghi
M t s thanh ghi ch dùng đ xác đ nh đ a ch cho b x lý ộ ố ỉ ể ị ị ỉ ộ ử
Các tác v trên thanh ghi nhanh h n nhi u so v i các tác v trên b nh ụ ơ ề ớ ụ ộ ớ
B vi x lý 8088 có 14 thanh ghi 16 bit chia thành nhóm theo ch c năng nh sau:ộ ử ứ ư
Nhóm thanh ghi đa d ng (General registers):ụ
F E D C B A 9 8 7 6 5 4 3 2 1 0
AX AH AL
BX BH BL
CX CH CL
DX DH DL
Nhóm thanh ghi ch m c và con tr (Index & Pointer registers):ỉ ụ ỏ
F E D C B A 9 8 7 6 5 4 3 2 1 0
SI SI
DI DI
BP BP
SP SP
Nhóm thanh ghi phân đo n (Segment registers):ạ
F E D C B A 9 8 7 6 5 4 3 2 1 0
DS DS
ES ES
SS SS
CS CS
Thanh ghi c hi u:ờ ệ
F E D C B A 9 8 7 6 5 4 3 2 1 0
Flag O D I T S Z A P C
Thanh ghi contr l nh (Instruction Pointer) :ỏ ệ
F E D C B A 9 8 7 6 5 4 3 2 1 0
Flag IP

3.1.1 Nhóm thanh ghi d li u (Data registers):ữ ệ
AX,BX,CX,DX hay là AH,AL,BH,BL,CH,CL,DH,DL
Đóng vai trò ch y u nh là các ph n t nh c b n trong các quá trình tínhủ ế ư ầ ử ớ ơ ả
toán. Tham gia vào các tác v tính toán c a b x lý. Có th s d ng nh làụ ủ ộ ử ể ử ụ ư
m t thanh ghi 16 bit ho c hai thanh ghi 8 bit n i li n nhau.ộ ặ ố ề
3.1.2 Nhóm thanh ghi ch m c và con tr (Index & Pointer registers):ỉ ụ ỏ
SI,DI,BP,SP
Có th s d ng nh các thanh ghi đa d ng, ngoài ra còn đóng vai trò làm chể ử ụ ư ụ ỉ
m c khi xác d nh đ a ch theo offset c a b x lý. ụ ị ị ỉ ủ ộ ử
- SI và DI là hai thanh ghi ch m c đ th c hi n các tác v chu i ỉ ụ ể ự ệ ụ ỗ
- BP và SP là hai thanh ghi con tr đ thao tác trên c u trúc STACKỏ ể ấ
3.1.3 Nhóm thanh ghi phân đo n (Segment registers):ạ
DS,ES,SS,CS
Không th tham gia vào các tác v tính toán, th ng ch dùng đ xác đ nhể ụ ườ ỉ ể ị
các đ a ch phân đo n.ị ỉ ạ
- DS: Data segment register
- ES: Extra segment register
- SS: Stack segment register
- CS: Code segment register
3.1.4 Thanh ghi con tr l nh (Instruction Pointer register):ỏ ệ
IP
Không th tham gia vào các tác v tính toán, không th gán giá tr tr c ti p,ể ụ ể ị ự ế
cùng v i CS t o thành đ a ch mã l nh s th c hi n c a CPUớ ạ ị ỉ ệ ẽ ự ệ ủ
3.1.5 Thanh ghi c hi u (Flag register):ờ ệ
Flag
Không th tham gia vào các tác v tính toán, không th gán giá tr tr c ti p,ể ụ ể ị ự ế
ch dùng đ ghi nh n ho c ch đ nh các tr ng thái làm vi c c a CPU. ỉ ể ậ ặ ỉ ị ạ ệ ủ
3.2 Đ a ch (Memory address)ị ỉ
Các l nh c a b x lý thao tác tr c ti p lên các đ i t ng ch y u là thanh ghi vàệ ủ ộ ử ự ế ố ượ ủ ế
b nh . Các thanh ghi d c xác đ nh b ng tên , các ph n t thu c b nh đ cộ ớ ượ ị ằ ầ ử ộ ộ ớ ượ
xác đ nh b ng đ a ch . Các b x lý thu c dòng h x86 xác đ nh đ a ch b ng hai giáị ằ ị ỉ ộ ử ộ ọ ị ị ỉ ằ

tr 16 bit g i là segment và offset. Đ a ch v t lý t ng ng đ c tính theo côngị ọ ị ỉ ậ ươ ứ ượ
th c :ứ
Memory_Address = Segment * 10h + Offset
20 bit 16 bit 16 bit
M t đ a ch v t lý có th bi u di n thành nhi u c p segment và offset khác nhau.ộ ị ỉ ậ ể ể ễ ề ặ
Thí d : ụ0040:006C 0000:046C 0020:026C
là các bi u di n c a d a ch v t lý 20 bit 00046C.ể ễ ủ ị ỉ ậ
3.2.1 Segment:
Segment là m t đo n b nh có kích th c t i đa 64KB (16 bit offset) và cóộ ạ ộ ớ ướ ố
th b t đ u t i các đ a ch chia ch n cho 16 (10h) trên toàn b vùng nhể ắ ầ ạ ị ỉ ẵ ộ ớ
1MB (20 bit).
Trong h u h t các tác v c a b x lý 8088, segment d c xác đ nh giánầ ế ụ ủ ộ ử ượ ị
ti p qua các thanh ghi segment DS , ES , SS , CS . Khi c n s d ngế ầ ử ụ
segment nào , ph i gán giá tr t ng ng cho các thanh ghi segment . Lúc đóả ị ươ ứ
các đ a ch đ c th hi n thành d ng Segment:offsetị ỉ ượ ể ệ ạ
Thí d : ụCS:Offset , DS:Offset
3.2.2 Offset:
Offset là m t c ly (16 bit) so v i đi m đ u c a m t segment. ộ ự ớ ể ầ ủ ộ
Các cách mô t offset:ả
[Const] , [BX] , [BP] , [SI] , [DI]
[BX+Const] , [BP+Const] , [SI+Const] , [DI+Const]
[BX+SI+Const] , [BX+DI+Const] , [BP+SI+Const] , [BP+DI+Const]
Const là m t h ng s ộ ằ ố
* Nh n xét: Offset có th mô t b ng m t t ng c a : H ng s 16 bit và cácậ ể ả ằ ộ ổ ủ ằ ố
thanh ghi ch m c BX, BP, SI, DI . Trong đó các c p BX và BP , SI và DIỉ ụ ặ
không đ c phép cùng xu t hi nượ ấ ệ
3.3 Các l nh c b nệ ơ ả
Các l nh c a b vi x lý 8088 d i đây s đ c mô t theo d ng th c:ệ ủ ộ ử ướ ẽ ượ ả ạ ứ
Tên_L nhệ[Đích [, Ngu n]]ồ
Đích (Dest) có th là tên m t thanh ghi (Reg) , m t đ a ch trong b nh (Mem),ể ộ ộ ị ỉ ộ ớ
m t v trí trong ch ng trình (Label)ộ ị ươ
Ngu nồ (Src) có th là tên m t thanh ghi (Reg) , m t đ a ch trong b nh (Mem),ể ộ ộ ị ỉ ộ ớ
m t h ng s (Const)ộ ằ ố

Đích và Ngu n ồkhông đ ng th i là hai đ a ch trong b nh (Mem)ồ ờ ị ỉ ộ ớ
3.3.1 L nh ệ MOVE
MOVE <Dest>,<Src>
Giá tr c a ị ủ Src d c gán (assign) vào ượ Dest
Không th MOVE :ể
- Hai thanh ghi segment
- H ng s vào thanh ghi segmentằ ố
- B t c gia tr nào vào các thanh ghi IP và Flagấ ứ ị
3.3.2 L nh ệ XCHG
XCHG <Dest>,<Src>
Giá tr c a ị ủ Src và Dest đ i ch cho nhauổ ỗ
Src và Dest ch có th là Reg ho c Addr/Memỉ ể ặ
Không th XCHG gi a các thanh ghi segment v i nhau.ể ữ ớ
3.3.3 L nh ệ INC , ADD và ADC
INC <Dest>
L y ấDest c ng v i ộ ớ 1 r i gán k t qu vào ồ ế ả Dest
ADD <Dest>,<Src>
L y ấDest c ng v i ộ ớ Src r i gán k t qu vào ồ ế ả Dest
ADC <Dest>,<Src>
L y ấDest c ng v i ộ ớ Src và c ng thêm ộ1 n u ếCF=1 r i gán k t qu vào ồ ế ả Dest
3.3.4 L nh ệ DEC , SUB và SBB
DEC <Dest>
L y ấDest tr đi ừ1 r i gán k t qu vào ồ ế ả Dest
SUB <Dest>,<Src>
L y ấDest tr đi ừSrc r i gán k t qu vào ồ ế ả Dest
SBB <Dest>,<Src>
L y ấDest tr đi ừSrc và tr ti p ừ ế 1 n u ếCF=1 r i gán k t qu vào ồ ế ả Dest

3.3.5 L nh ệ MUL
MUL <Reg_8bit/Mem_8bit>
L y ấAL nhân v i ớReg_8bit ho c ặMem_8bit
K t qu (16 bit) gán vào ế ả AX
MUL <Reg_16bit/Mem_16bit>
L y ấAX nhân v i ớReg_16bit ho c ặMem_16bit
K t qu (32 bit) gán vào ế ả DX,AX (Theo th t DH,DL,AH,AL)ứ ự
3.3.6 L nh ệ DIV
DIV <Reg_8bit/Mem_8bit>
L y ấAX chia cho Reg_8bit ho c ặMem_8bit
K t qu (8 bit) gán vào ế ả AL , s d (8 bit) gán vào ố ư AH
DIV <Reg_16bit/Mem_16bit>
L y ấDX,AX (32 bit) chia cho Reg_8bit ho c ặMem_8bit
K t qu (16 bit) gán vào ế ả AX , s d (16 bit) gán vào ố ư DX
3.3.7 L nh ệ IMUL và IDIV
Gi ng MUL và DIV, nh ng th c hi n trên các giá tr có d u và cho ra k tố ư ự ệ ị ấ ế
qu có d uả ấ
3.3.8 L nh ệ AND , OR , XOR và NOT
ADD <Dest>,<Src>
OR <Dest>,<Src>
XOR <Dest>,<Src>
L y ấDest AND/OR/XOR v i ớSrc r i gán k t qu vào ồ ế ả Dest
NOT <Dest>
L y NOT c a ấ ủ Dest gán vào Dest

