You are on page 1of 13

B vi x l 8088/8086 v lp trnh hp ng x86

3.1 Thanh ghi (Register) L cc phn t nh c bit bn trong b vi x l. cc thanh ghi lun c kch thc bng nhau, kch thc ny cng chnh l rng ca data bus bn trong b x l. 8088 l b vi x l 16 bit do cc thanh ghi ca 8088 u c kch thc 16 bit. Mt s tc v c bit nh nhn hay chia, kt qu bt buc phi t trong thanh ghi Mt s thanh ghi ch dng xc nh a ch cho b x l Cc tc v trn thanh ghi nhanh hn nhiu so vi cc tc v trn b nh B vi x l 8088 c 14 thanh ghi 16 bit chia thnh nhm theo chc nng nh sau: Nhm thanh ghi a dng (General registers):
F E D C B A 9 8 7 6 5 4 3 2 1 0

AX BX CX DX

AH BH CH DH

AL BL CL DL

Nhm thanh ghi ch mc v con tr (Index & Pointer registers):


F E D C B A 9 8 7 6 5 4 3 2 1 0

SI DI BP SP

SI DI BP SP

Nhm thanh ghi phn on (Segment registers):


F E D C B A 9 8 7 6 5 4 3 2 1 0

DS ES SS CS Thanh ghi c hiu:


F E D C B A 9 8

DS ES SS CS

Flag

Thanh ghi contr lnh (Instruction Pointer) :


F E D C B A 9 8 7 6 5 4 3 2 1 0

Flag

IP

3.1.1

Nhm thanh ghi d liu (Data registers): AX,BX,CX,DX hay l AH,AL,BH,BL,CH,CL,DH,DL ng vai tr ch yu nh l cc phn t nh c bn trong cc qu trnh tnh ton. Tham gia vo cc tc v tnh ton ca b x l. C th s dng nh l mt thanh ghi 16 bit hoc hai thanh ghi 8 bit ni lin nhau.

3.1.2

Nhm thanh ghi ch mc v con tr (Index & Pointer registers): SI,DI,BP,SP C th s dng nh cc thanh ghi a dng, ngoi ra cn ng vai tr lm ch mc khi xc dnh a ch theo offset ca b x l. SI v DI l hai thanh ghi ch mc thc hin cc tc v chui BP v SP l hai thanh ghi con tr thao tc trn cu trc STACK

3.1.3

Nhm thanh ghi phn on (Segment registers): DS,ES,SS,CS Khng th tham gia vo cc tc v tnh ton, thng ch dng xc nh cc a ch phn on. DS: Data segment register ES: Extra segment register SS: Stack segment register CS: Code segment register

3.1.4

Thanh ghi con tr lnh (Instruction Pointer register): IP Khng th tham gia vo cc tc v tnh ton, khng th gn gi tr trc tip, cng vi CS to thnh a ch m lnh s thc hin ca CPU

3.1.5

Thanh ghi c hiu (Flag register): Flag Khng th tham gia vo cc tc v tnh ton, khng th gn gi tr trc tip, ch dng ghi nhn hoc ch nh cc trng thi lm vic ca CPU.

3.2 a ch (Memory address) Cc lnh ca b x l thao tc trc tip ln cc i tng ch yu l thanh ghi v b nh . Cc thanh ghi dc xc nh bng tn , cc phn t thuc b nh c xc nh bng a ch. Cc b x l thuc dng h x86 xc nh a ch bng hai gi tr 16 bit gi l segment v offset. a ch vt l tng ng c tnh theo cng thc :

Memory_Address
20 bit

Segment
16 bit

* 10h

Offset
16 bit

Mt a ch vt l c th biu din thnh nhiu cp segment v offset khc nhau. Th d: 0040:006C 0000:046C 0020:026C l cc biu din ca da ch vt l 20 bit 00046C. 3.2.1 Segment:

Segment l mt on b nh c kch thc ti a 64KB (16 bit offset) v c th bt u ti cc a ch chia chn cho 16 (10h) trn ton b vng nh 1MB (20 bit). Trong hu ht cc tc v ca b x l 8088, segment dc xc nh gin tip qua cc thanh ghi segment DS , ES , SS , CS . Khi cn s dng segment no , phi gn gi tr tng ng cho cc thanh ghi segment . Lc cc a ch c th hin thnh dng Segment:offset Th d: CS:Offset , DS:Offset 3.2.2 Offset:

Offset l mt c ly (16 bit) so vi im u ca mt segment. Cc cch 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 mt hng s * Nhn xt: Offset c th m t bng mt tng ca : Hng s 16 bit v cc thanh ghi ch mc BX, BP, SI, DI . Trong cc cp BX v BP , SI v DI khng c php cng xut hin 3.3 Cc lnh c bn Cc lnh ca b vi x l 8088 di y s c m t theo dng thc: Tn_Lnh [ch [, Ngun]] ch (Dest) c th l tn mt thanh ghi (Reg) , mt a ch trong b nh (Mem), mt v tr trong chng trnh (Label) Ngun (Src) c th l tn mt thanh ghi (Reg) , mt a ch trong b nh (Mem), mt hng s (Const) ch v Ngun khng ng thi l hai a ch trong b nh (Mem)

3.3.1

Lnh MOVE MOVE <Dest>,<Src>

Gi tr ca Src dc gn (assign) vo Dest Khng th MOVE : - Hai thanh ghi segment - Hng s vo thanh ghi segment - Bt c gia tr no vo cc thanh ghi IP v Flag 3.3.2 Lnh XCHG XCHG <Dest>,<Src>

Gi tr ca Src v Dest i ch cho nhau Src v Dest ch c th l Reg hoc Addr/Mem Khng th XCHG gia cc thanh ghi segment vi nhau. 3.3.3 Lnh INC , ADD v ADC INC <Dest> Ly Dest cng vi 1 ri gn kt qu vo Dest ADD <Dest>,<Src> Ly Dest cng vi Src ri gn kt qu vo Dest ADC <Dest>,<Src> Ly Dest cng vi Src v cng thm 1 nu CF=1 ri gn kt qu vo Dest 3.3.4 Lnh DEC , SUB v SBB DEC <Dest> Ly Dest tr i 1 ri gn kt qu vo Dest SUB <Dest>,<Src> Ly Dest tr i Src ri gn kt qu vo Dest SBB <Dest>,<Src> Ly Dest tr i Src v tr tip 1 nu CF=1 ri gn kt qu vo Dest

3.3.5

Lnh MUL MUL <Reg_8bit/Mem_8bit>

Ly AL nhn vi Reg_8bit hoc Mem_8bit Kt qu (16 bit) gn vo AX MUL <Reg_16bit/Mem_16bit>

Ly AX nhn vi Reg_16bit hoc Mem_16bit Kt qu (32 bit) gn vo DX,AX (Theo th t DH,DL,AH,AL) 3.3.6 Lnh DIV DIV <Reg_8bit/Mem_8bit>

Ly AX chia cho Reg_8bit hoc Mem_8bit Kt qu (8 bit) gn vo AL , s d (8 bit) gn vo AH DIV <Reg_16bit/Mem_16bit>

Ly DX,AX (32 bit) chia cho Reg_8bit hoc Mem_8bit Kt qu (16 bit) gn vo AX , s d (16 bit) gn vo DX 3.3.7 Lnh IMUL v IDIV Ging MUL v DIV, nhng thc hin trn cc gi tr c du v cho ra kt qu c du 3.3.8 Lnh AND , OR , XOR v NOT ADD OR XOR <Dest>,<Src> <Dest>,<Src> <Dest>,<Src>

Ly Dest AND/OR/XOR vi Src ri gn kt qu vo Dest NOT <Dest>

Ly NOT ca Dest gn vo Dest

3.3.9

Lnh SHL , SHR SHL/SHR <Reg/Mem>,1

y cc bit ca thanh ghi sang tri (SHL)hoc sang phi(SHR) 1 ct (Nhn/Chia vi 2) SHL/SHR <Reg/Mem>,CL

y cc bit ca thanh ghi sang tri (SHL) hoc sang phi (SHR) n ct, vi n l gi tr ch a trong CL (Nhn/Chia vi 2n ) Kt thc lnh , c hiu CF cha bit cui cng lt ra ngoi. Trc khi SHL SHL AL,1 SHL AL,1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 CF = 1 CF = 0 Trc khi SHR SHR AL,1 SHR AL,1 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 CF = 1 CF =1 3.3.10 Lnh RCL , RCR RCL/RCR <Reg/Mem>,1

Quay cc bit ca thanh ghi v CF sang tri hoc sang phi 1 ct RCL/RCR <Reg/Mem>,CL

Quay cc bit ca thanh ghi v CF sang tri hoc sang phi n ct, vi n l gi tr ch a trong CL Trc khi RCL RCL AL,1 RCL AL,1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 CF = 0 CF = 1 CF = 0 Trc khi RCR RCR AL,1 RCR AL,1 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 CF = 0 CF = 1 CF =1

3.3.11

Lnh ROL , ROR ROL/ROR <Reg/Mem>,1

Quay cc bit ca thanh ghi sang tri (ROL) hoc sang phi (ROR) 1 ct ROL/ROR <Reg/Mem>,CL

Quay cc bit ca thanh ghi sang tri (ROL) hoc sang phi (ROR) n ct, vi n l gi tr ch a trong CL Trc khi ROL ROL AL,1 ROL AL,1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 Trc khi ROR ROR AL,1 ROR AL,1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 3.4 Cc lnh so snh v chuyn iu khin c bn 3.4.1 Lnh JMP JMP <Label> CPU chuyn n thc hin lnh ti <Label>. 3.4.2 Lnh CMP v TEST CMP <Dest>,<Src> Thc hin php tr Dest cho Src, kt qu khng c gi li, cc c hiu b thay i. Test <Dest>,<Src> Thc hin php AND Dest vi Src, kt qu khng c gi li, cc c hiu b thay i. Hai tc v ny c phi hp cng vi cc lnh chuyn iu khin theo iu kin. 3.4.3 Cc lnh chuyn iu khin theo iu kin Lnh chuyn iu khin theo iu kin c dng thc chung nh sau : <Jump_command> <Label> <Label> l mt tn nhn nh du mt v tr trong chng trnh. Khi iu kin kim tra l ng, CPU s chuyn n thc hin lnh ti v tr <Label> , nu iu kin kim tra l sai CPU s thc hin lnh k tip

Lnh chuyn iu khin theo iu kin so snh S khng du S c du So snh JA JG > JAE , JNB JGE , JNL >= JE , JZ JE , JZ = JBE , JNA JLE , JNG <= JB JL < JNE , JNZ JNE , JNZ <> Lnh chuyn iu khin theo c hiu Lnh lm thay i c hiu trc tip Lnh iu kin Lnh iu kin JC CF = 1 STC CF = 1 JNC CF = 0 CLC CF = 0 JZ ZF = 1 STD DF = 1 JNZ ZF = 0 CLD DF = 0 JO OF = 1 STI IF = 1 JNO OF = 0 CLI IF = 0 JP PF = 1 JNP PF = 0 JS SF = 0 JNS SF = 0 JNS SF = 0 JCXZ CX = 0 Cc lnh chuyn iu khin theo iu kin thng i theo sau lnh CMP Cc lnh chuyn iu khin khng lm thay i gi tr ca cc c hiu. 3.4.4 Lnh LOOP LOOP <Label>

<Label> l mt tn nhn nh du mt v tr trong chng trnh. on lnh tng ng: SUB CMP JNE CX,1 CX,0 <Label>

Mi ln thc hin LOOP , CX gim i 1 , sau nu CX=0 CPU s thc hin lnh tip theo , nu CX>0 CPU s chuyn n thc hin lnh ti <Label>. Nn dng LOOP khi cn phi thc hin cc chu trnh c s ln lp bit trc.

3.5 Vit chng trnh vi Assembler 86 3.5.1 Th d 1


Code segment assume cs,ds,es:code org 0100h near

Main proc

; Day la ghi chu ; Sau dau cham phay la ghi chu mov int int Main endp Code ends end Main ah,1 021h 020h ; ah=1 , Read char function ; ch nhn mt phm ; kt thc chng trnh v quay li ; du i lnh

C th vit cc chng trnh u tin bng cch dng th d 1 lm mu, ch cn thay th cc cc dng lnh mu xanh bng phn chng trnh ca mnh 3.5.2 Th d 2
Code segment assume cs,ds,es:code org 0100h near dx,chuoi ah,9 021h 020h ; np a ch ca chuoi vo dx ; ah=9 , Print string ; In chuoi ra mn hnh ; kt thc chng trnh v quay li ; du i lnh

Main proc lea mov int int Main endp

chuoi db
Code ends end

'Chao ban', '$'


Main

3.5.3

Khai bo v s dng b nh: Chng trnh vit cho b vi x l 8088 l mt tp hp cc byte va m lnh va d liu. Ngi vit chng trnh phi t t chc v sp xp khi chng trnh c thc hin b vi x l khng nhm ln gia d liu v m lnh. Ta c th khai bo mt vng nh trong chng trnh dng lu tr d liu bng cc dng lnh nh sau:
db db db db dw dd 1,2,3,4 'a', 'b' 1,2,'a' 'chao' 0,1 0,1 ; M t 4 byte ln lt c gi tr l 1,2,3,4 ; M t 2 byte m ASCII ca k t a v b ; M t 4 byte ca chui chao ; M t 2 word (4 byte) 0 v 1 ; M t 2 dword (8 byte) 0 v 1

Khai bo kiu d liu (db,dw,dd ) m t cc nh v gi tr c gn trong chng trnh. S lng cc nh c xc nh bng s lng cc gi tr c lit k ngay sau khai bo kiu d liu. Kiu d liu db n nh mi phn t d liu c kch thc 1 byte Kiu d liu dw n nh mi phn t d liu c kch thc 2 byte Kiu d liu dd n nh mi phn t d liu c kch thc 4 byte c th s dng c cc vng d liu khai bo trong chng trnh, ngi ta nh du cc v tr bng cch t cc nhn ngay trc khai bo kiu:
chuoi tongso dayso db db db 'chao' 0 5,6,7,8

Sau c th khai thc cc vng nh ny nh sau: Gn a ch (offset) ca chuoi vo thanh ghi dx: mov dx, offset chuoi hoc lea dx, chuoi Gn gi tr ang lu ti nh tongso (1 byte) vo thanh ghi al: mov al, byte ptr tongso Gn gi tr trong al vo nh tongso (1 byte): mov byte ptr tongso,al Gn gi tr ca nh th 1 trong dayso vo al: mov al, tongso[0] ; AL s bng 5 Gn gi tr ca nh th 2 trong dayso vo al: mov al, tongso[1] ; AL s bng 6

Khi tham chiu n mt vng nh, nn m t tng minh v loi d liu bng ch nh byte ptr hoc word ptr . Nu khng m t th trnh hp dch s ly theo kiu d liu khai bo. 3.5.4 S dng cc chc nng h thng: C nhiu on m lnh dng iu khin cc thit b c thit k sn trong BIOS hoc OS. Cc chng trnh vit cho PC thng dng cc on m lnh ny hn l phi thc hin li t u. Cch thc ny c gi l s dng cc chc nng ca h thng. *Mt s chc nng h thng n gin ca DOS: Ch c mt phm, c in li phm ny ra mn hnh mov ah,1 int 021h Sau khi thc hin AL = m ASCII ca phm c g vo In mt k t ra mn hnh mov dl,<ky_tu_can_in> mov ah,2 int 021h In mt chui k t ra mn hnh mov dx,offset <chuoi_can_in> mov ah,9 int 021h Chui k t phi kt thc bng k t $, Mt s cc k t iu khin c nh hng n chc nng in nh sau: 7 : Bell 8 : Back Space (BS) 10 : Line Feed (LF) 13 : Carriage Return (CR) beep mt ting xa k t bn tri xung hng v u dng

*Mt s chc nng h thng n gin ca BIOS: Ch c mt phm, khng in li phm ny ra mn hnh mov ah,0 int 016h Sau khi thc hin AL = m ASCII ca phm c g vo AH = scan code ca phm AL bng 0 khi mt s cc phm chc nng c bm

c trng thi ca bn phm mov ah,2 int 016h Sau khi thc hin AL = byte trng thi ca bn phm

In chui k t vi thuc tnh mu, bt u ti v tr row v col: mov ax,01301h mov bh,0 mov bl,<color_code> mov bp,offset <chuoi_can_in> mov cx,<So_ky_tu_trong_chuoi> mov dh,<row> ; 0 - 24 mov dl,<col> ; 0 - 79 int 010h Mn hnh PC trong text mode c 25 dng, mi dng 80 k t. Mu ca k t c to thnh t mu nn (Background color) v mu k t (Foreground/Text color) theo cng thc sau: Color_code = Foreground_Color + 16*Background_Color

Hy dng Tech Help tham kho cc chc nng ca BIOS v DOS

You might also like