You are on page 1of 34

Chng 1 T CHC B X L INTEL 8086

I. B X L (CPU) INTEL 8086


1. T chc tng qut
CPU 8086 l CPU 16 bit (bus s liu c 16 dy). N c dng ch to cc my vi tnh u tin ca hng IBM. Tht ra IBM dng CPU 8088 vi ng bus s liu ra ngoi l 8 bit. Cho n nay, CPU khng ngng ci tin v tri qua cc dng 80186, 80286, 80386, 80486, 80586 (Pentium), Pentium Pro, Pentium II, PIII, PIV. Cc CPU tng thch t trn xung (downward compatible) ngha l tp lnh mi bao gm tp lnh ca CPU c v thm nhiu lnh mi na.
Execution Unit (EU) Thc hin lnh AH BH CH DH SP BP SI DI AL BL CL DL AX BX CX DX CS DS ES SS Bus Interface Unit (BIU) Giao tip Bus

PC 0000 0000 0000 0000 iu khin bus Bus ngoi

ALU (B lm tnh & lun l) CU (B iu khin) Thanh ghi trng thi Thanh ghi lnh

1 2 3 4 5 6

Hng ch lnh

Comment [Mr1]: Phm Enter

Hnh: S khi ca CPU 8086 Ta thy CPU 8086 chia thnh 2 b phn chnh: B phn thc hin lnh (Execution Unit: EU) v b phn giao tip Bus (Bus Interface Unit: BIU). B phn thc hin lnh EU: Kim sot cc thanh ghi, gii m v thi hnh lnh tc l lm cc tc v m lnh yu cu. Nh vy EU lm hu ht cng vic ca CPU c Trang 1

Gio trnh Assembler in. Cc thanh ghi v ng bus trong EU iu l 16 bit. EU khng ni vi bus h thng bn ngoi, n ly lnh t hng ch lnh m BIU cung cp. Khi c yu cu truy xut b nh hay ngoi vi th EU yu cu BIU lm vic. BIU c th ti nh a ch cho php EU truy xut y 1MB (8086 c 20 ng a ch ngoi). B phn giao tip bus (BIU): BIU thc hin tt c cc tc v v bus ca EU. Trong khi EU ang thc hin lnh th BIU ly lnh t b nh trong v ct gi vo trong nh (gi l hng ch lnh) bn trong CPU. Do , EU khng phi i ly lnh t b nh. y l mt cch n gin ca cache.

2. Cc thanh ghi ca 8086


a. Thanh ghi a dng: CPU 8086 c 4 thanh ghi a dng 16bit, c th chia i thnh 8 thanh, mi thanh 8 bit.

AX (accumulator): l thanh ghi tch lu c bn, mi tc v vo/ra u dng thanh ghi ny, tc v dng s liu tc thi, mt s tc v chui k t v cc lnh tnh ton u dng thanh ghi AX. BX (base register): l thanh ghi nn thng dng tnh ton a ch nh. CX (count register): l thanh ghi m thng dng m s ln trong mt lnh vng lp hoc x l chui k t. DX (data register): thng cha a ch ca mt s lnh vo ra, lnh tnh ton s hc (k c nhn v chia).

b. Thanh ghi con tr: Dng thm nhp s liu trn ngn xp.

SP (stack pointer): Thanh ghi con tr ngn xp. BP (base pointer): Thanh ghi con tr nn dng ly s liu t ngn xp.

c. Thanh ghi ch s
SI (source index): Thanh ghi ch s ngun. DI (destination index): Thanh ghi ch s ch.

d. Thanh ghi on: c dng trong mi tnh ton a ch nh. Mi thanh ghi on xc nh 64 KB nh trong b nh trong.

CS (code segment): Thanh ghi on m lnh. DS (data segment): Thanh ghi on d liu. ES (extra segment): Thanh ghi on thm. Cc php tnh chui dng DI u lin quan n ES. SS (stack segment): Thanh ghi on ngn xp. Con tr SP lun tr ti nh ca ngn xp.

e. Thanh ghi c: Phn nh kt qu ca php tnh ton s hc v lun l, xc nh trng thi hot ng ca CPU. Cc bit trn thanh ghi c c ngha c trnh by di y.

CF: th hin s gi thot ra t bit cao nht ca thanh ghi kt qu sau mt php tnh ton. OF: th hin vic tnh ton vt qu kh nng ca CPU. AF: th hin s gi thot ra t bt th 4 (bit 3) ca thanh ghi kt qu. PF: bng 1 nu 8 bt thp ca thanh ghi kt qu mt php tnh ton c s con s 1 chn (v ngc li). ZF: bng 1 khi kt qu php tnh bng 0 (v ngc li).

Ch bin V Thanh n

Trang 2

DF: c th lp trnh c, bng 1 th SI v DI gim 1 cho mi vng lp. IF: c th lp trnh c, bng 1 cho php ngt. TF: c th lp trnh c, bng 1 khi cho php chng trnh chy tng bc phc v sa sai mt chng trnh.

15 14 13 12 11 10 O D

9 I

8 T

7 S

6 Z

4 A

2 P

0 C
dnh dng sau CF c s gi PF c chn l AF c s gi ph ZF c zero SF c du * TF c by * IF c ngt * DF c hng OF c trn

3. T chc b nh trong
B nh trong c t chc thnh tng mng gm cc nh 8 bit. Cc d liu c th ct gi hoc ly ra t bt k nh no. Mi nh c mt a ch. Theo qui c ca Intel cc d kin 16 bit ct gi vo nh vi byte cao a ch cao v byte thp nh c a ch thp.

4. S phn on trong b nh trong


CPU 8086 c khng gian a ch l 1 MB (ng vi 20 ng dy a ch). Vy CPU 8086 c th qun l b nh trong l 220 = 1 MB. B nh 1MB ny c th chia thnh nhiu on 64 KB. Cc on c th chng ln nhau. Mi a ch nh xc nh bi 2 s: on 16 bit. di (offset). a ch c th cn gi l a ch vt l c tnh bng cch dch tri thanh ghi on 4 bit (nhn cho 16) ri cng vo di. V d: on CS c gi tr l 1002H, th a ch vt l ca nh K trong on CS c di 500H (thng vit CS:500H) l: + 10020H 500H 10520H V 1002H dch tri 4bit = 10020H y l a ch vt l ca nh K

Trang 3

Gio trnh Assembler


Trong v d ta thy on CS c im bt u a ch vt l 10020H. di 500H l khong cch t a ch ca im bt u ca on CS n nh K. nh K a ch 10020H Chnh BIU quyt nh s dng on no theo tnh cht ca s liu. Nu s liu l m lnh th BIU s dng on CS. Nu s liu l d liu ca chng trnh th BIU s dng on DS. Nu s liu l d liu nm trn ngn xp th BIU s dng on SS. Nu dng cc php tnh chui th thanh ghi DI lun cha di ca nh trong on ES. Lc khi ng CPU 8086 n a ch vt l cao ca b nh trong (on CS=0FFFFH v di 0) ly lnh. a ch ny ng vi a ch ROM ca b nh trong. a ch vt l ca nh K: 10520H

di 500H

im bt u ca on CS

5. a ch cc ngoi vi
Cc ngoi vi u c a ch ring t 0 n 64 KB. CPU 8086 dng cc lnh ring bit truy xut ngoi vi v b nh trong. Mun truy xut ngoi vi, BIU ch cn a a ch ca ngoi vi ln 16 bit thp ca bus a ch (khng c on).

6. Cc chn ca vi mch 8086


AD0 AD15 + AD16 AD19 l 20 chn ca bus a ch, cc chn t AD0 n AD15 c a hp (multiplex) vi bus s liu, cc chn t AD16 n AD19 c a hp vi cc nhim v v trng thi th hin cc chn S3, S4, S5, S6. GND AD14 13 12 11 10 9 8 7 6 5 4 3 2 1 AD0 NMI INTR CLK GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CPU 8086 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Vcc AD15 AD16 / S3 AD17 / S4 AD18 / S5 AD19 / S6 BHE / S7

MN / MX (MIN , MAX mode)

RD
RQ / GT 0 ( HOLD)
RQ / GT1( HALD)
Lock (WR)

S 2 ( M / IO)

S1( DT / R)
S 0 ( DEN )

QS0 (ALE) QS1( INTA)


TEST

READY RESET

Hnh: Vi mch CPU 8086. Ch bin V Thanh n Trang 4

Sau chu k my th nht S3, S4 cho ta bit on no c dng to a ch. S3 0 0 1 1 S4 0 1 0 1 ngha on ES on SS on CS hoc khng on no on DS

S5 th hin trng thi c ngt (interrupt flag). S6 c gi trng thi thp nu CPU ang s dng h thng bus ngoi. S7 lu gi trng thi ca

Ready: nh hoc ngoi vi c th dng tn hiu ny bo cho CPU bit n ang sn sng chuyn d liu.

BHE chu k my th nht. RD : CPU dng tn hiu ny c s liu t nh hay t cc thit b ngoi vi.

TEST : Khi ta dng lnh WAIT th CPU trng thi ngh cho n khi tn hiu chn ny xung thp th CPU mi thi hnh lnh k sau lnh WAIT. INTR: Cc ngoi vi tc ng vo chn ny khi cn ngt CPU. NMI (non maskable interrupt): y l ng vo ca ngt khng che, ngt khng che c u tin tuyt i. Reset: Khi ng li h thng.
CPU 8086 c hai ch vn hnh MAX ( MX ) v MIN (MN). Nhim v ca cc chn tng ng vi 2 ch vn hnh nh sau: MIN (MN) MAX ( MX )

HOLD

RQ / GT 0 RQ / GT1

HALD

WR M / IO DT / R DEN
ALE

Lock S2
S1 S0
QS0 QS1

INTA
Ch MN (hiu in th chn

MN / MX cao) DEN (data enable): Cho php s liu c nhn vo CPU hoc a ra bus s liu tu theo tn hiu chn DT / R . Nu chn DT / R c hiu th cao, CPU a s liu ra bus h thng. Nu DT / R c hiu th
thp, CPU nhn s liu t bus h thng.

M / IO (memory / input output): Chn ny trng thi cao nu CPU lin h vi b nh. N trng thi thp n CPU lm vic vi ngoi vi. HOLD: Cc ngoi vi tc ng vo chn ny nu mun s dng bus h thng. HLDA (hold acknowledge): CPU dng tn hiu ny bo cho ngoi vi bit n ang th ni bus h thng. ALE (address latch enable): Tn hiu chn ny cho bit a ch ca nh c a ra bus h thng. INTA (interrupt latch enable): y l tn hiu cho bit CPU cng nhn ngt m ngoi vi yu cu. WR : Tn hiu dng vit s liu vo b nh.
Ch MX (hiu in th chn S0, S1, S2 kt hp, ngha nh sau:

MN / MX thp)

Trang 5

Gio trnh Assembler


S0 0 0 0 0 1 1 1 1 S1 0 0 1 1 0 0 1 1 S2 0 1 0 1 0 1 0 1 ngha Cng nhn ngt c t ngoi vi Vit ra ngoi vi Trng thi dng (HALT) Tm lnh c b nh Vit vo b nh Khng c hot ng

RQ / GT 0 (request / grant): Ngoi vi to mt xung thp chn ny bo cho CPU bit n cn s dng bus h thng. CPU bo li bng mt xung m cho bit n th ni bus h thng. RQ / GT1 ging nh RQ / GT 0 nhng u tin thp hn. QS0 v QS1 cho bit trng thi ca hng ch lnh nh sau:
QS0 0 0 1 1 QS1 0 1 0 1 ngha Cha c tc v Byte th nht ca lnh c thc hin Hng ch lnh y Byte k tip ca lnh ang c ly i t hng ch lnh

LOCK: y l tn hiu bo CPU ang s dng bus h thng. GND (ground): l chn mass (0 volt). V cc l hiu in th ngun 5 volt. CPU 8086 phi dng chung vi mt s vi mch khc nh: vi mch iu khin bus, vi mch to xung nhp (clock), mi to thnh mt my vi tnh.

II. CC LNH THNG DNG CA CPU 8086


1. Gii thiu
B x l 8086 c tp lnh gm 111 lnh, chiu di ca lnh t 1 byte n vi byte. Tp lnh ca b x l Intel ngy cng c nhiu lnh mnh v phc tp. B x l Intel 80386 c 206 lnh, cc lnh c chiu di t 1 n 15 byte, mt s lnh cn 1000 chu k xung nhp thc hin. Sau y chng ta ch cp mt s lnh thng dng ca CPU 8086. Tp lnh y ca b x l 8086 c nu ph lc. Tp lnh ca b x l 80386 v Pentium khng cp trong gio trnh ny v qu phc tp. Chng ta dng cc qui c sau: Reg (register): Thanh ghi. Reg8, Reg16: Thanh ghi 8 bit, 16 bit. Mem (memory): nh. Mem8, Mem16: nh 8 bit, 16 bit. Immed (immediate): Tc th. Immed8, Immed16: Ton hng tc th 8 bit, 16 bit. Segreg (segment register): Thanh ghi on.

2. Nhm di chuyn s liu


MOV (move): Di chuyn. MOV ch, ngun Trang 6

Ch bin V Thanh n

Lnh ny di chuyn s liu t ngun sang ch. Ngun c th l Reg, Mem, Immed; ch c th l Reg, Mem. V d: MOV CX, BX Lnh trn thc hin chuyn ni dung ca thanh ghi BX vo thanh ghi CX. Ni dung ca thanh ghi BX gi nguyn. Sau lnh ny th BX v CX c cng ni dung. PUSH (push): y vo. PUSH ngun Ngun c th l Reg16, Mem16. Lnh PUSH l gim con tr ngn xp SP xung 2 n v. V d: PUSH AX Lnh trn thc hin chuyn ni dung ca thanh ghi AX vo ngn xp, ng thi con tr SP gim 2 n v. POP (pop: ly, di chuyn): ly d liu ra t ngn xp. POP ch ch c th l Reg16, Mem16. Lnh POP l tng con tr ngn xp SP xung 2 n v.

V d: POP BX Lnh trn thc hin chuyn ni dung 2 byte nh m SP tr ti a vo BX, byte c a ch thp a vo BL, byte c a ch cao a vo BH, ng thi con tr SP tng 2 n v. Ghi ch: Qua 2 lnh PUSH v POP, ta thy ngn xp nh i t nh c a ch cao, n nh c a ch thp, ngha l s liu a vo ngn xp trc th a ch cao, s liu a v ngn xp sau th a ch thp hn.

3. Nhm lnh chuyn a ch


LEA (load effective address): np a ch hiu dng. LEA Reg16, Mem16 Chuyn di ca nh Mem16 vo thang ghi Reg16. V d: LEA DX, StringVar Lnh trn thc hin chuyn di ca bin StringVar vo thanh ghi DX. Ta cng c th vit (MASM): MOV DX, offset StringVar tng ng lnh trn.

4. Nhm lnh chuyn c hiu (thanh ghi trng thi)


PUSHF (push flag): lu gi c. PUSHF (khng c i) y l lnh lu gi thanh ghi c vo ngn xp. POPF (pop flag): ly c ra. POPF (khng c i) y l lnh ly 2 byte t ngn xp a vo thanh ghi c. V d: a ni dung ca thanh ghi c vo thanh ghi AX ta lm nh sau: PUSHF POP AX Trang 7

Gio trnh Assembler

5. Nhm lnh vo ra ngoi vi


IN (in: vo): ly s liu t ngoi vi. IN AL, a ch cng 8bit y l lnh a s liu lu gi nh m ng ra ca cng vo thanh ghi AL. Nu a ch ca cng l 16bit th phi a a ch ca cng ny vo thanh ghi DX trc khi s dng lnh IN. V d: IN AL, 3FH ;3FH l a ch ca cng 8bit. MOV DX, 3F8H ;3F8H l a ch cng 16 bit. IN AL, DX OUT (out: ra): a s liu ra ngoi vi. OUT a ch cng 8bit, AL MOV DX, a ch cng 16 bit. OUT DX, AL JMP (jump: nhy): y l lnh nhy v iu kin n mt a ch khc. JMP ch Nhy n a ch c nh du bng mt nhn hay mt con s m ch di. Nhn nm trong on CS hin ti. Tu theo khong cch ca ch n lnh JMP m ta c 3 kiu lnh ny. JMP near ch Lnh ny (cn c vit: JMP ch) nhy n on nm trong CS hin ti. JMP short ch Dng nhy n a ch trong khong 128 n +127 tnh t lnh JMP. JMP far ch Dng nhy ra khi on CS hin ti. Lnh nhy c iu kin: Lnh ny kim tra iu kin trc khi nhy. Nu iu kin ng th nhy ti ch, ngc li thi hnh lnh k mt cch bnh thng. JA (jump if above: nhy nu ln hn). Nu 2 c CF=ZF=0 th nhy n ch. JB (jump if below: nhy nu nh hn). Nu c CF=1 th nhy n ch. JZ (jump if zero: nhy nu bng 0). Nu c ZF=1 (php ton trc bng 0 hoc so snh bng nhau) th nhy. JNZ (jump if not zero: nhy nu khc 0). Nu c ZF=0 (php ton trc khc 0 hoc so snh khc nhau) th nhy. Lnh CMP CMP tri, phi Trang 8

6. Nhm lnh iu khin


-

7. Nhm lnh so snh


-

Ch bin V Thanh n

Nu tri > phi th ZF = 0 v CF =0 Nu tri = phi th ZF = 1 v CF =0 Nu tri < phi th ZF = 0 v CF =1 V d: MOV AX, 1000H CMP AX, 200H JZ NHANDEN ; nhn n NHANDEN: ADD AX, BX

8. Nhm lnh vng lp


LOOP (loop: nhy vng): Lnh ny lm gim thanh ghi CX xung 1 v nhy ti mt nhn (trong vng 128 n 127) nu CX khc 0. V d: MOV AH, 02H MOV DL, 48 MOV CX, 10 BATDAU: INT 21H INC DL LOOP BATDAU LOOPZ (loop if zero: nhy nu bng 0) Nhy vng nu c ZF =1. LOOPNZ (loop if not zero: nhy nu khc 0) Nhy vng nu c ZF =0. CALL (call: gi): lnh gi chng trnh con. CALL Nhn (hoc tn chng trnh con) Lnh gi chng trnh con l mt lnh c bit v trc khi nhy ti nhn th CPU t ng lu a ch tr v (l a ch sau lnh CALL) vo ngn xp. RET (return: tr v). Lnh kt thc chng trnh con. Khi gp lnh ny th CPU 8086 ly a ch tr v ngn xp tip tc thi hnh lnh chng trnh chnh. V d: Chng trnh sau s dng Macro, Procedure.
INCHU Macro mov ah,02 mov dl, 'A' int 21h ENDM dulieu segment thongbao db 'hello!$'

; lp 10 ln

9. Nhm lnh gi chng trnh con


-

Trang 9

Gio trnh Assembler


dulieu ends malenh1 segment P2 Proc far mov ah,02 mov dl, 'C' int 21h ret P2 Endp malenh1 ends malenh2 segment malenh group malenh1, malenh2 assume cs: malenh, ds: dulieu batdau: mov ax, dulieu mov ds, ax ; khoi dong lea dx, thongbao ; in thong bao nhap chuoi mov ah, 09h int 21h inchu ;goi macro call pinchu ;goi ctrinh con call p2 ;goi ctrinh con mov ah, 4ch int 21h PINCHU Proc near mov ah,02 mov dl, 'B' int 21h ret PINCHU Endp malenh2 ends end batdau

10.
-

Nhm lnh tnh ton s hc


ADD (add: cng): cng 2 s nguyn, ly ngun cng vo ch v kt qu lu ch. ADD ch, ngun ch l Reg, Mem; ngun l Reg, Mem hoc Immed. V d: MOV AL, 02 ADD AL, 06 (Sau 2 lnh ny AL = 08 tc l AL = 02+06) INC (increment: tng) INC ch ch l Reg, Mem. Lnh ny tng ni dung ca ch ln 1 n v. V d: MOV AL, 02 INC AL ;Sau 2 lnh ny AL = 3. SUB (subtract: tr ra): ly ch tr ngun v kt qu lu ch. SUB ch, ngun ch l Reg, Mem; ngun l Reg, Mem hoc Immed. Trang 10

V d: Ch bin V Thanh n

MOV AL, 09 SUB AL, 06 (Sau 2 lnh ny AL = 03 tc l AL = 09-06) DEC (decrement: gim) DEC ch ch l Reg, Mem. Lnh ny gim ni dung ca ch xung 1 n v. V d: MOV AL, 02 DEC AL ;Sau 2 lnh ny AL = 1. MUL (multiplication: php nhn): nhn s khng du. MUL ngun Ngun l Reg, Mem. Lnh ny ly thanh ghi tch lu (AX) nhn cho ngun. Nu ngun 8bit th s ny c nhn AL v kt qu t trong AX. Nu ngun l 16 bit, s ny c nhn vi AX v kt qu trong DX:AX (DX:AX l mt s 32 bit, 16 bit cao trong DX v 16 bit thp trong AX). V d: MOV AL, 9 MOV BL, 2 MUL BL (Sau 3 lnh ny AL c gi tr bng 18). DIV (division: php chia): chia s khng du. DIV ngun Ngun l Reg, Mem. Lnh ny ly thanh ghi tch ly (AX) chia cho ngun. Nu ngun 8bit th ly AX chia cho ngun, kt qu t trong AL v s d t trong AH. Nu ngun l 16 bit th ly DX:AX chia cho ngun. Thng s t trong AX, s d t trong DX. V d: MOV AX, 9520 MOV BL, 100 DIV BL (Sau 3 lnh ny AL = 95 v AH = 20 v 9520 : 100 = 95 v d 20).

11.
-

Nhm lnh dch chuyn v quay


SHL (logical shift left): dch tri logic. SHL ch, 1 ; dch tri ton hng ch 1 bit (dch t 2 bit tr ln phi t s ln dch trong CL). SHL ch, CL ; dch tri ton hng s bit bng ni dung ca CL. 7 CF 2 1 Ton hng ch Trang 11 0 0

Gio trnh Assembler Trong hnh trn, gi s ton hng ch l 8bit th lnh SHL ch, 1 lm bt th 7 dch sang bit CF (c), bt 6 chuyn sang bit7, bt5 sang bit6, bit0 qua bit1 v s 0 vo bit0. - SHR (logical shift right): dch phi logic. Lnh ny ging nh SHL nhng by gi dch phi. 7 0 6 Ton hng ch 0 CF

Trong hnh trn, gi s ton hng ch l 8bit th lnh SHR ch, 1 lm 0 vo bt7, bit7 sang bt 6, bit0 dch sang bit CF (c). - SAL (shift arithmetic left): dch tri s hc. Ging nh lnh SHL nhng bit0 c gi nguyn 7 CF 2 1 Ton hng ch 0

SAR (shift arithmetic right): dch phi s hc. Ging nh lnh SHL nhng bit cao nht c gi nguyn. 7 6 Ton hng ch 0 CF

ROL (rotate left): quay vng sang tri. ROL ch, 1 ; quay vng sang tri ton hng ch 1 bit (quay vng sang tri t 2 bit tr ln phi t s ln dch trong CL). ROL ch, CL ; dch tri ton hng s bit bng ni dung ca CL. 7 CF 2 1 Ton hng ch 0

ROR (rotate right): quay vng sang phi (ging nh quay vng sang tri nhng by gi sang phi). ROR ch, 1 ROL ch, CL RCL (rotate through carry left): quay vng qua bit s gi sang tri, ging nh lnh ROL nhng c s tham gia ca bit s gi. 7 CF 2 1 Ton hng ch 0

Ch bin V Thanh n

Trang 12

RCR (rotate through carry right): quay vng qua bit s gi sang phi, ging nh lnh RCL nhng sang phi.

12.
-

Nhm lnh logic


AND (and: v): lnh ny ly tng bit ca ton hng ch and vi tng bit ca ton hng ngun, kt qu lu ch. AND ch, ngun ch l Reg, Mem; ngun l Reg, Mem hoc Immed. V d: MOV AL, 01010101B AND AL, 00001111B (Sau 2 lnh ny AL = 00000101B) OR (or: hoc): lnh ny ly tng bit ca ton hng ch or vi tng bit ca ton hng ngun, kt qu lu ch. OR ch, ngun ch l Reg, Mem; ngun l Reg, Mem hoc Immed. V d: MOV AL, 01010101B OR AL, 00001111B (Sau 2 lnh ny AL = 01011111B) XOR (xor: hoc loi): lnh ny ly tng bit ca ton hng ch xor vi tng bit ca ton hng ngun, kt qu lu ch. XOR ch, ngun ch l Reg, Mem; ngun l Reg, Mem hoc Immed. V d: MOV AL, 01010101B XOR AL, 00001111B (Sau 2 lnh ny AL = 01011010B) NOT (not: o): lnh ny ly o tng bit ca ton hng ch. NOT ch ch l Reg, Mem. V d: MOV AL, 01010101B NOT AL (Sau 2 lnh ny AL = 10101010B) TEST (test: trc nghim): lnh ny ging nh lnh AND nhng khng lu gi kt qu m ch nh hng n cc c. TEST ch, ngun

13.
-

Nhm lnh x l chui


MOVSB (move string byte): di chuyn chui tng byte mt. MOVSW (move string word): di chuyn chui tng 16 bit. CMPSB (compare string byte): so snh chui tng byte mt. CMPSW (compare string word): so snh chui tng 16 bit. SCASB (scan string byte): qut chui tng byte mt. Trang 13

Gio trnh Assembler SCASW (scan string word): qut chui tng 16 bit. LODSB (load string byte): np chui tng byte mt. LODSW (load string word): np chui tng 16 bit. STOSB (store string byte): lu chui tng byte mt. STOSW (store string word): lu chui tng 16 bit. Cch dng cc lnh ging nhau v thng phi qua cc bc sau: Bc 1: Xc nh chiu x l chui. DF = 0: chui x l theo chiu a ch tng. DF = 1: chui x l theo chiu a ch gim. Bc 2: S lng phn t cn x l c np vo thanh ghi m CX. Bc 3: a a ch ca chui vo ng v tr. a ch chui ngun a vo DS:SI. a ch chui ch a vo ES:DI. Bc 4: Chn mt vng lp thch hp REP, REPE, REPNE. Lnh REP (repeat: lp li): lp li lnh theo sau n n khi CX=0. Lnh REPE (repeat if equal: lp li nu bng nhau): lp li lnh theo sau n nu ZF=1. Lnh REPNE (repeat if not equal: lp li nu khng bng nhau): lp li lnh theo sau n nu ZF=0. Bc 5: t lnh x l chui thch hp. V d 1: Chuyn 100 byte t nh ngun n nh ch. ;DF=0, SI v DI t ng tng 1 sau mi ln lp, ;lnh ny c gii thiu phn di. LEA SI, ngun LEA DI, ch MOV CX, 50 MOVSW ; T ng chuyn 100 byte. CLD CLD ;DF=0, mun DF=1 ta dng lnh STD. PUSH DS PUSH ES MOV SI, 7000H MOV DI, F000H MOV CX, 10 CMPSB JNZ NOTEQ ;NOTEQ l mt nhn chng trnh s nhy ;ti nu xut hin 2 byte khng ging nhau. CLD MOV CX, 100 Ch bin V Thanh n ;DF=0, mun DF=1 ta dng lnh STD.

REP

V d 2: So snh 10 byte ca 2 vng nh trong DS.

REPE

V d 3: Tm ch 'A' trong chui 100 k t.

Trang 14

LEA DI, chui MOV AL, 'A' REPNE SCASB JCXZ NOTE

;so snh mi byte ca chui vi k t 'A'. ;NOTE l mt nhn chng trnh s nhy ;ti nu khng tm thy 'A'. ;(jump if CX equal zero)

14.
-

Cc lnh khc
CLC (clear carry flag): xa c zero - CF. CLD (clear direction flag): xa c hng - DF. CLD (clear interrupt flag): xa c ngt - IF. CMC (complement carry flag): i ngc c CF. HLT (halt): dng, CPU ngng hot ng. INT (interrupt): gi ngt. IRET (return from interrupt): tr v chng trnh chnh t chng trnh phc v ngt. LOCK: kho bus h thng. NOP (no operation): khng c tc v. WAIT: i cho n khi c xung chn TEST ca CPU 8086.

III. CC KIU NH V CA CPU 8086


1. nh v tc th
Ton hng tc th nm ngay sau m tc v ca lnh nn vic truy xut ton hng rt nhanh chng. MOV AL, 15H ;15H l ton hng tc th.

2. nh v trc tip
a ch ca ton hng ( nh trong) nm ngay sau m tc v ca lnh. VarI DB 25H MOV AL, VarI ;a s 25H a ch ca VarI vo AL.

3. nh v thanh ghi
nh v thanh ghi ton hng nm trn thanh ghi. nh v trc tip thanh ghi. ADD AL, BL ;cng 2 thanh ghi AL v BL t kt qu trong AL. nh v gin tip thanh ghi. ADD AL, [BX] ;di chuyn s liu a ch m BX tr ti trong on DS vo thanh ghi AL. 99 di cha trong BX im bt u ca on DS

Trang 15

Gio trnh Assembler

4. nh v nn
a ch ton hng l tng di v thanh ghi nn BX hay BP. MOV AL, [BX + 20H] Di chuyn s liu nm nh BX+20H trong on DS vo thanh ghi AL.

5. nh v ch s
a ch ca ton hng l tng di v thanh ghi ch s SI hay DI. MOV AL, [SI + 100H] Di chuyn s liu nm nh SI+100H trong on DS vo thanh ghi AL.

6. nh v ch s v nn
a ch ca ton hng l tng di vi thanh ghi ch s v thanh ghi nn. MOV AL, [BX + SI + 50H] Di chuyn s liu nm nh BX + SI + 50H trong on DS vo thanh ghi AL.

7. nh v chui
Trong nh v ny ta dng cc lnh mnh x l chui ca 8086 (MOVSB, SCASB,) dng thanh ghi SI tr ti a ch ngun trong on DS v thanh ghi DI tr ti a ch ch trong on ES. Sau mi ln thc hin lnh, thanh ghi SI v DI t ng tng (hoc gim) 1 n v - do ta qui nh c hng DF. MOVSB Lnh ny di chuyn 1 byte t v tr nh K n v tr nh H. Sau SI v DI t ng tng ln 1 n v (nu DF = 0) ch ti nh k .

nh H

di cha trong DI

im bt u ca on ES nh K

di cha trong SI

im bt u ca on DS

8. nh v ca vo ra
Nu a ch ca vo ra nm trong khong t 0 n FFH, ta c th dng php nh v trc tip. IN AL, 0F8H ;0F8H l a ch ca cng vo ra. Nu a ch ca vo ra ln hn FFH, ta c th dng php nh v gin tip thanh ghi. MOV DX, 3F8H ;3F8H l a ch ca cng vo ra. IN AL, DX

Ch bin V Thanh n

Trang 16

Chng 2 HP NG
p ng (Assembler) l chng trnh dch ra m my mt chng trnh gc vit bng t gi nh (mnemonic) ca cc lnh m my. Lc u, cc chng trnh hp ng ch lm vic n thun t nhng t gi nh sang m my, nhng dn dn cc chng trnh hp ng cho php dng cc nhn, cc k hiu bin i dng lnh, phn phi b nh, vit cc macro nhm gip cho ngi lp trnh vit cc chng trnh hp ng d dng hn. Sau y, chng ta s cp n cc c tnh tng qut ca hp ng trc khi nghin cu hp ng MASM dng cho m my.

I.

C TNH TNG QUT CA HP NG


1. Cu trc tng qut ca mt lnh hp ng
Mt lnh ca hp ng thng c cc vng sau: Tn T gi nh m lnh Ton hng Ch thch

V d: BATDAU: MOV DX, 3F8H ;3F8H l cng vo ra ni tip. Cc vng c sp xp trn mt hng lnh v phn cch nhau bng du chm (:) hoc du phy (,) hoc chm phy (;) tu theo lnh ca hp ng. a. Cu trc tng qut vng tn (name) Vng tn cho php gn tn cho mt a ch hay mt d liu, lc ta c th dng tn ny thay th cho a ch hay d liu trn. Mi tn ch xut hin mt ln trong chng trnh. b. Cu trc tng qut t gi nh m lnh y l vng duy nht khng th thiu ca hng lnh. Vng ny c th cha mt t gi nh m lnh hoc mt lnh gi. Khi gp mt t gi nh m lnh, hp ng s dch n sang m my. Khi gp mt lnh gi (cn gi l hng dn: directives) th hp ng khng dch thnh m nh phn v cc lnh gi ch gip cho hp ng nh ngha k hiu, phn phi b nh, to bng d liu Thng thng, cc chng trnh hp ng thng c cc lnh gi ch yu sau: - ORG (origin: im gc): Cho bit im bt u ca mt on chng trnh hay mt on d liu no . - EQU (equate: bng nhau) hay DEFINE (define: nh ngha): Cho php t tn mt d liu no . - DS (define storage: nh ngha vng lu tr s liu) hay RM (reserve memory: dnh vng nh): Cho php dnh vng nh, lu tr s liu. Cc lnh gi DATA, DB (define byte), DW (define word) cng cho php dnh vng nh. - END: Cho bit chm dt chng trnh. c. Cu trc tng qut vng ton hng Cha cc ton hng m lnh m my cn. Trang 17

Gio trnh Assembler d. Cu trc tng qut vng ch thch C th c hoc khng, vng ny dnh cho ngi lp trnh ghi cc ghi ch, gii thch v cu lnh.

2. Cu trc tng qut ca Macro


Macro l mt nhm lnh no c dng nhiu ln nn ta gn cho n mt tn. Nhiu chng trnh hp ng cho php dng Macro. i vi Macro, mi ln chng trnh chnh gi n th on m lnh trong Macro c xen vo ngay m lnh gi, khng cn dng lnh CALL hay JUMP nn chng trnh chnh thc hin nhanh hn. Tuy nhin, mi ln gi Macro th m lnh trong Macro c xen vo trong chng trnh chnh lm cho chng trnh ngy cng di v chim nhiu nh trong b nh trong.

3. Cu trc tng qut ca chng trnh con


Hp ng thng cho php dch cc chng trnh con. N s nh du tham kho chng trnh con trong chng trnh chnh v chnh chng trnh lin kt (linker) s gn a ch ca cc chng trnh con. Mt s loi hp ng cn cho php to mt th vin chng trnh con. Mun gi chng trnh con th chng trnh chnh phi dng lnh CALL hay JUMP, do phi lu a ch tr v ca chng trnh chnh ngn xp v lm chm i vic thc hin chng trnh chnh. Chng trnh con ch chim mt lng nh nht nh. Khi chng trnh chnh chnh gi n th chng trnh chnh phi lu a ch tr v, sau nhy n a ch ca chng trnh con v thc thi chng trnh con, khi thc hin xong th ly a ch tr v tip tc thc hin chng trnh chnh.

4. Cu trc tng qut ca bin ton cc (global), bin a phng (local)


Cc bin nh ngha trong chng trnh chnh gi l bin ton cc. Cc bin ny c th dng trong chng trnh chnh, trong macro v trong cc chng trnh con. Cc bin c nh ngha trong macro hay trong chng trnh con gi l cc bin a phng, ch c dng trong ni b macro hay chng trnh con khai bo n.

5. Cu trc tng qut ca cc bng, thng bo m hp ng cung cp cho ngi s dng


a s cc hp ng c th cung cp cc bng v thng bo cho ngi s dng cc ni dung sau: - Bng lit k chng trnh hp ng v m my tng ng. - Bng lit k cc li trong chng trnh gc. - Bng cc tn c dng trong chng trnh gc. - Danh sch cc tham kho bn ngoi (cc chng trnh con, cc bin dng ngoi). - Danh sch cc macro, chng trnh con v di ca chng. Ch bin V Thanh n Trang 18

6. Cu trc tng qut ca hp ng cho (cross assembler)


Mt hp ng chy trn mt my no dch ra m my cho CPU khc vi CPU trn my m hp ng ang chy, th gi l hp ng cho. V d, hin nay rt kh tm 1 my tnh dng CPU Z80. Mun dch mt chng trnh hp ng thnh m my ca CPU Z80, ngi ta phi dng chng trnh hp ng cho chy trn cc my IBM chn hn bin dch ra m my cho CPU Z80 (d nhin chng trnh m my sau khi dch phi chy trn my tnh hoc vi mch do CPU Z80 iu khin).

II. HP NG MASM - DNG CHO CPU 8086


1. Gii thiu hp ng MASM
Ta dng cc t gi nh m lnh, cc lnh gi, cc k hiu do hp ng MASM qui nh vit ra mt chng trnh m ta gi l chng trnh gc (source file). Chng trnh gc c lu trong a t vi tp tin c ui l ASM. Hp ng MASM s dch chng trnh gc thnh chng trnh ch c ui OBJ. Chng trnh ch s c ni kt LINK to ra chng trnh chy c c ui l EXE. Chng ta s nghin cu cc qui nh, mt s c php thng dng cho vic vit mt chng trnh hp ng gc.

2. Cu trc ca mt hng lnh hp ng MASM


Mt lnh ca hp ng MASM thng c 4 vng. c t chc ging nh t chc tng qut ca hp ng. Tn V d: BATDAU: T gi nh m lnh MOV DX, 3F8H Ton hng Ch thch

;3F8H l cng vo ra ni tip.

3. Tn trong hp ng MASM
Trong hp ng MASM, tn c th l nhn, bin, k hiu. Tn c chiu di l 31 k t v phi bt u l ch. - Nhn: Dng nh du mt a ch m cc lnh nh JUMP, CALL, LOOP cn n. N cng c dng n cho cc lnh gi LABEL hoc PROC hoc EXTRN. V d: NH: MOV AX, DX ;NH l nhn nh du a ch nh. FOO LABEL NEAR ;t tn cho a ch nh theo sau lnh gi. CTCON PROC FAR ;a ch bt u ca chng trnh con. EXTRN NH FAR ;cho bit NH nm ngoi chng trnh gc. - Bin: Dng lm ton hng cho cc lnh hoc cc biu thc. Bin tng trng cho a ch ni c gi tr m ta cn. V d: TWO DB 2 ;bin TWO c gi tr l 2.

Trang 19

Gio trnh Assembler K hiu: l mt tn c nh ngha thay cho biu thc, mt t gi nh lnh. K hiu c th dng lm ton hng trong biu thc, trong lnh hay trong lnh gi. V d: FOO EQU 7H TOTO = 0FH

4. T gi nh m lnh
a. Gii thiu T gi nh m lnh d c hc chng I v tp lnh b x l 8086 nn sau y chng ta ch nghin cu mt s lnh gi thng dng ca MASM. Lnh gi cn gi l lnh hng dn (directive) dng hng dn chng trnh dch hp ng v vic vo ra, v t chc b nh, v dch chng trnh vi iu kin, v iu khin in danh sch v i chiu cho, v cc nh ngha. Lnh gi c chia thnh 4 nhm v c trnh by di y. b. Nhm lnh gi lin quan n b nh - ASSUME: Lnh ny cho bit mt on no thuc loi g? V d: ASSUME DS: DATA, CS: CODE dng bo cho hp ng bit on c tn DATA l on DS v on c tn CODE l on CS. ASSUME NOTHING bo cho hp ng bit rng khng c tn on no c cho bit loi v nh vy mi ln lin h n mt nhn, bin th ta phi bo cho bit on ca chng (v d DS: NHAN cho bit NHAN thuc on DS). - COMMENT: Lnh ny cho ta ghi ch. V d: COMMENT *Day la ghi chu* (du * l k t gii hn). Cc lnh dng nh ngha bin, khi ng vng nh cho bin: - DB (define byte: nh ngha byte): dnh nh trong cha tng byte. - DW (define word: nh ngha t - 16bit): dnh nh trong cha tng t - mi t tng ng 2 byte. - DD (define double word: nh ngha tng i t): dnh nh trong cha tng i t - 4 byte. - DQ (define qualword: nh ngha tng 4 t): dnh nh trong cha tng 4 t - 8 byte. - DT (define ten byte: nh ngha 10 byte): dnh nh trong cha tng 10 byte. Ta xem cc v dv phn gii thch sau: MOTCHU DB A ;dnh mt v tr nh ch s 65. ARRAY DB 1, 2, 3, 4 ;nh ngha 4 v tr nh cha 1, 2, 3, 4. MES DB CHAO BAN! ;dnh 9 nh cha chui CHAO BAN!. BUF DB 10 DUP(?) ;dnh 10 nh m khng khi ng cc ;nh ngha l cc nh cha bt k s ;no. BUF 100 DUP(A) ;dnh 100 nh cha ton ch A. Ch bin V Thanh n Trang 20

BSIZE DW 4*128 ;dnh 2 nh cha s 512. END: chm dt chng trnh gc. EQU (equate: bng): gn tr cho tn. Ta dng lnh EQU gn tr cho tn mt ln, mun gn i li nhiu ln ta dung lnh = (bng). V d: FOO EQU 2*10 ;gn tr 20 vo FOO. Du = (bng): lnh ny ging nh EQU nhng cho php ta gn li nhiu ln. EVENT (chn): lm cho thanh ghi m chng trnh PC c ni dung l mt s chn. EXTRN (external: bn ngoi): cho bit mt tn hay mt k hiu c nh ngha bn ngoi trong mt modul khc vi modul chng trnh hin ti. V d: EXTRN TAGN: NEAR, SO: WORD TAGN l mt nhn gn (2 byte), SO l mt t my tnh nm ngoi modul hin ti. GROUP (nhm): gom cc on c tn khc nhau gn chng mt tn mi. V d: NHOM123 GROUP NHOM1, NHOM2, NHOM3 NHOM1, NHOM2, NHOM3 l tn 3 on khc nhau, chng c gom li c tn l NHOM123. INCLUDE (bao gm): Cho php xen thm mt tp tin hp ng vo tp tin hp ng hin hnh. V d: INCLUDE C:\THEM.ASM Ni dung tp tin THEM.ASM trn a C:\ c xen vo to tin hin hnh ngay lnh gi INCLUDE. LABEL (nhn): Cho php nh du mt a ch l a ch ca lnh hay s liu k . V d: NHF LABEL FAR ;nhn xa, nh du v tr NH. NH: MOV AX, DATA ;nhn gn. MOV DS, AX CHB LABEL BYTE ;nh du v tr CH c th ly tng byte. CH DW 100 DUP(0) ;chui tng t. NAME (tn): t tn cho mt modul hp ng. V d: NAME CURSR ;t tn cho modul l CURSR.

Trang 21

Gio trnh Assembler ORG (origin: im gc): n nh a ch cho on chng trnh vit sau lnh gi ORG. V d: ORG 100H MOV AX, Code PROC (procedure: th tc): Gn mt tn cho chng trnh con. V d: CTCON PROC NEAR MOV AX, CODE RET CTCON ENDP PUBLIC (public: cng cng): Dng khai bo k hiu trong modul hin hnh m cc modul khc c th s dng. V d: PUBLIC FOO, NH, TOTO RADIX: Cho php i c s, c s mc nhin l 10. V d: MOV BX, 0FFH ;tng ng vi RADIX 16. RECORD (mu tin): Cho php nh ngha mu tin. V d: FOO RECORD CAO: 7, VUA: 3, THAP: 4 Vy FOO c chiu di 16bit, 4bit thp nht c tn l THAP, 3bit k c tn VUA, 7bit k c tn l CAO. Cn 2 bt cha c nh ngha. STRUC (structure: cu trc): Ging nh lnh RECORD, ch khc l cc vng bn trong l byte. SEGMENT: Cho php nh ngha on. <Tn> SEGMENT [align] [combine] [class] <Tn> ENDS Vng [align] xc nh on bt u nh sau: Byte: on c th bt u a ch bt k. Word: on phi bt u a ch chn. Para: on phi bt u vi a ch l bi ca 16. Page: on phi bt u vi a ch l bi ca 256. Vng [combine] xc nh on kt hp vi phn on khc nh sau: Public: Cc on cng tn v cng class c ghp ni vi nhau khi lin kt. Trang 22

Ch bin V Thanh n

Common: Cc on cng tn v cng class c ph lp ln nhau khi lin kt. AT(biu thc): on c t ti mt a ch l bi ca 16 v c ghi trong biu thc. STACK: Ging nh Public, tuy nhin con tr ngn xp SP ch vo a ch u tin ca ngn xp u tin. Private hoc khng g ht cho vng combine th cc on cng tn v cng class khng c ghp vo nhau. c. Nhm lnh gi v dch (complie) c iu kin Cc lnh gi v dch c iu kin nhm bo cho hp ng dch hay khng dch mt nhm lnh no nu mt iu kin no c tha. IF [i s] [ELSE] ENDIF IF [i s] c cc hnh thc sau: - IFE <biu thc>: nu biu thc tnh ra bng 0 th on chng trnh IFE c dch, nu biu thc tnh ra khc 0 th on chng trnh sau lnh gi ELSE c dch (nu c lnh gi ELSE). - IF1: Nu hp ng ang dch ln 1 th on chng trnh sau IF1 c dch. - IF2: Nu hp ng ang dch ln 2 th on chng trnh sau IF2 c dch. - IFDEF <k hiu>: Nu k hiu khng c nh ngha th dch chng trnh sau IFDEF. - IFB <i s>: Nu i s l khong trng hoc khng c i s th dch on chng trnh sau IFB. - IFNB <i s>: Nu c i s th dch on chng trnh sau IFNB. - IFIDN <i s 1>, <i s 2>: Nu <i s 1> bng <i s 2> th on chng trnh sau IFIDN c dch. - IFDIF <i s 1>, <i s 2>: Nu <i s 1> khc <i s 2> th on chng trnh sau IFIDF c dch. - ENDIF: nh du ht on chng trnh sau IF . d. Nhm lnh gi v MACRO Lnh gi MACRO gip ta vit mt on chng trnh m ta c th xen vo bt c ni no trong chng trnh hp ng bng cch vit tn MACRO m ta mun gi.

Trang 23

Gio trnh Assembler Ta nh ngha mt MACRO nh sau: <Tn> MACRO [tham s] ENDM ;chm dt MACRO V d: Ta vit MACRO c tn l TEST nh sau: TEST MACRO X, Y, Z MOV AX, X MOV BX, Y MOV CX, Z ENDM Nh vy, trong mt chng trnh no ta gi TEST nh sau: TEST 10, 20, 30 Th cu lnh tng ng nh sau: MOV AX, 10 MOV BX, 20 MOV CX, 30 Bn trong MACRO ta c th dng cc lnh gi LOCAL, EXITM. Lnh EXITM dng thot khi MACRO trc khi c lnh chm dt MACRO. Lnh gi LOCAL cng c th dng bn trong MACRO, lnh ny gip ta nh ngha cc nhn trong MACRO m ta mun gi nhiu ln. V d: Ta thit k hm WAIT nh sau: WAIT MACRO count MOV CX, count NEXT: LOOP NEXT ENDM MACRO WAIT ch c th gi duy nht mt ln v nhn NEXT ch xut hin trong chng trnh 1 ln. Mun c th gi lnh WAIT nhiu ln, ta thit k li lnh WAIT nh sau: WAIT MACRO count LOCAL NEXT MOV CX, count NEXT: LOOP NEXT ENDM e. Nhm lnh gi v lit k (listing) Nhm ny dng iu khin lit k ln my in, xem cc ta u trang. - PAGE s hng, s ct V d: PAGE 58, 60 ;mi trang lit k c 58 hng v 60 ct. - TITLE ( ta): Cho php t ta. V d: TITLE Chuong Trinh Hop Ngu Ch bin V Thanh n Trang 24

SUBTTL (subtitle: ta con): Cho php lit k ta con mi u trang. % OUT <vn bn>: Vn bn c lit k khi hp ng dch chng trnh. XLIST: Khng cho lit k. XALL: Lit k m do MACRO to nn. LALL: Lit k ton b MACRO. SALL: Khng lit k MACRO. CREF: Cho lit k bng i chiu cho. XCREF: Khng cho php lit k bng i chiu cho.

f. Nhm lnh gi v ton hng v ton t C 3 loi ton hng: tc th, thanh ghi v nh. - Ton hng tc th c th l mt s hoc mt k hiu c gn mt s bng cc lnh gi EQU v du = (bng). V d: SL EQU 15 MOV CL, SL MOV AL, 20 - Ton hng nh tng trng mt a ch nh. N lun lun l di i vi mt a ch bt u ca on tng ng V d: FOO DW 0FEFEH MOV AX, FOO ;FOO l a ch ca s liu. MOV FOO, AX FOO+5, FOO[5], 5[FOO] l tng ng nhau v ch n a FOO cng 5. 5 [BX] [SI], [BX+5][SI], [BX] 5 [SI] l tng ng vi [BX+SI+5] trong nh dng nn + ch s. Cc ton t c th chia lm 4 loi: ton t thuc tnh (attribute), ton t s hc, ton t quan h (relational), ton t logic. i. Ton t thuc tnh - PTR (pointer: con tr): Dng thay i kiu ca cc a ch. V d: CALL Word PTR [BX+SI] [BX+SI] tr ti mt byte trong nh nhng ta mun ly 2 byte bt u ca chng trnh con nn ta dng WORD PTR. - Du : (hai chm): Dng thay i on mc nhin. V d: MOV AX, ES:[BX+SI] [BX+SI] tr ti s liu trong DS nhng ta mun ly trong on ES nn vit ES:[BX+SI]. - SHORT: Dng thay i kiu mc nhin l NEAR ca lnh JMP v bo cho hp ng bit ch nhy trong vng 128 n +127 so vi v tr lnh nhy JMP. Trang 25

Gio trnh Assembler THIS: To mt ton hng c gi tr tu thuc vo tham s ca THIS. V d: NH EQU THIS BYTE tng ng vi NH LABEL BYTE. SCH = THIS NEAR tng ng vi SCH LABEL NEAR. SEG: Cho ta gi tr ca on, ca mt nhn hay bin. V d: MOV AX, SEG TENB a vo AX gi tr ca on cha TENB. OFFSET: Cho di ca mt nhn hay bin. V d: MOV DX, OFFSET TENCHUOI a vo DX di ca bin TENCHUOI, lnh gi tng ng vi lnh gi ny l LEA DX, TENCHUOI. TYPE <bin>: Cho bit s byte m loi bin chim (BYTE=1, WORD=2, DWORD=4,). V d: MOV AX, (TYPE NH) PTR [BX+SI] Vi NH l mt nhn. LENGTH: Cho bit s phn t ca mt bin. V d: FOO DW 100 DUP(?) MOV CX, LENGTH FOO ;CX cha 100. SIZE: Cho bit s byte ca mt bin. V d: FOO DW 100 DUP(?) MOV CX, SIZE FOO ;CX cha 200.

Ton t s hc Cc ton t thng dng nh: + (cng), (tr), * (nhn), / (chia). Du tr ng trc mt s ch l s m. MOD: Chia ly s d. V d: MOV AX, 13 MOD 4 ;AX cha s 1. - SHR (shift right): dch phi. V d: MOV AX, 00011000B SHR 3 ;AX cha s 00000011B. - SHL (shift left): dch tri. V d: MOV AX, 00011000 SHL 3 ;AX cha s 11000000B. ii. iii. Ton t quan h Ton t quan h dng trong so snh hai s hng v thng c dng trong vic dch chng trnh c iu kin. - EQ (<ton hng 1> EQ <ton hng 2>): Nu ton hng 1 bng ton hng 2 th biu thc cho gi tr ng (true). - NE (not equal: khng bng nhau): Tr v TRUE nu 2 ton hng khng bng nhau. Ch bin V Thanh n Trang 26

LT (less than: nh hn): Tr v true nu ton hng bn tri LT nh hn ton hng bn phi LT. LE (less than or equal: nh hn hoc bng nhau): Ging nh LT nhng thm iu kin bng nhau. GT (greater than: ln hn): Tr v true nu ton hng bn tri LT ln hn ton hng bn phi LT. GE (greater than or equal: ln hn hoc bng nhau): Ging nh GT nhng thm iu kin bng nhau.

iv. Ton t logic Ton t logic so snh hai ton hng tng bit mt. - NOT: Tr v true nu ton hng bn tri v bn phi khc nhau. - AND: Tr v true nu c 2 ton hng u l true. - OR: Tr v true khi mt trong hai (hoc c hai) ton hng l true. - XOR: Tr v true khi hai ton hng khc nhau (ton hng true, ton hng cn li false).

III. LP TRNH DNG HP NG MASM


1. Gii thiu
Trong lp trnh dng hp ng MASM, ta thng s dng cc ngt c sn trong ROM-BIOS (basic output input system: h thng vo ra c bn) hoc trong DOS. Ton b cc ngt ny c nhiu sch lp trnh hp ng nu ln y . Trong gio trnh ny ta ch nu mt vi ngt thng dng trong DOS.

2. Mt s ngt thng dng trong HH MS-DOS


Cc ngt ca DOS c nh s t 20H n 27H. Ngt t bit quan trng l ngt 21H. INT 20H: Chm dt chng trnh, tr v DOS t mt chng trnh c ui chm COM. INT 23H: Chn CONTROL BREAK. Thng thng, mt chng trnh chy trong DOS, ta c th dng t hp phm CONTROL BREAK kt thc mt cch t nhin. T hp phm ny lm CPU nhy n chng trnh phc v ngt 23H, sau n mt th tc ca DOS kt thc chng trnh ang chy v tr v DOS (dng t ngt). Nu khng mun cho php chng trnh kt thc sm bng phm CONTROL BREAK, ta c th cho ngt 23H tr ti mt chng trnh c bit no , thng bo ln mn hnh rng khng cho chng trnh ang chy kt thc sm chn hn. INT 27H: Kt thc v t thng tr. Ngt ny cho php trong b nh trong mt chng trnh no cho n khi tt my. s dng ngt ny, ta cho chy chng trnh gm 2 phn. Mt phn ph trch vic ni tr cho phn kia. INT 21H: Ngt 21H c nhiu hm, mun gi hm no ca ngt 21H, ta t s th t ca hm vo thanh ghi AH v gi INT 21H.

Trang 27

Gio trnh Assembler Hm 1: i c mt k t t bn phm v in ra mn hnh. Khi mt phm c n th k t tng ng trong phm c lu trong thanh ghi AL. Nu phm c n l phm c bit th AL=0. Dng t hp phm CONTROL BREAK kt thc cng vic ny. Hm 2: a mt k t ra mn hnh. K t cn a ra mn hnh cha trong DL. Hm 3: c vo t cng ni tip. K t c cha trong AL. Hm 4: a k t trong DL ra cng ni tip. Hm 5: a k t trong DL ra my in. Hm 6: Hm ny c th thc hin c vo ln ra. Mun nhp, ta cho DL = FFH. Sau khi thc hin hm 6, nu c ZF = 0 th AL cha k t mi nhp vo, nu c ZF = 1 th khng c k t no c nhp vo. Nu DL cha 1 s khc FFH th k t cha trong DL c a ra mn hnh. Hm 7: Ging hm 1 nhng n khng in ra mn hnh k t va nhp vo, khng th dng CONTROL BREAK kt thc. Hm 8: Ging hm 1 nhng n khng in ra mn hnh k t va nhp ra mn hnh. Hm 9: a ra mn hnh chui k t t trong DS:DX (ngha l chui k t nm trong on DS v di ca n nm trong DX). Lu , chui k t phi kt thc bng du $. Hm 0AH: c vo vng m bn phm. Trc khi dng hm ny ta phi to ra mt vng m trong b nh. Byte u tin ca xc nh s k t ti a c th nhp vo, byte th 2 cho DOS ghi s k t thc s m ngi dng nhp vo. Cc byte k tip cha cc k t s nhp. a ch vng n t trong DS:DX. Hm 0BH: Cho trng thi bn phm. Sau khi thc hin hm nu AL=0 th khng c k t no ang i, nu AL khc 0 th c mt k t ang i CPU c vo. Tip theo hm 0BH l mt s hm thc hin cng vic FCB (file control block) li thi nn khng cn ni n. Thay vo ta dng cc hm tng ng l th tp tin (file handle). Hm 25H: i vect ngt, ta t trong DS:DX gi tr mi ca a ch vect ngt, trong AL ta s ca ngt. Hm 30H: Ly n bn (version) ca DOS. Sau khi thc hin hm ny th AL cha phn chnh, AH cha phn ph ca n bn. Hm 31H: Kt thc v li thng tr. Hm ny ging ngt INT 27H. Ta t trong thanh ghi DX s paraghaph (16 bytes) ca phn tp tin mun gi thng tr. Hm 35H: Ly gi tr ca vect ngt. Ta trong AL s ca ngt. Sau khi thc hin hm ny th ES:BX cha a ch ca vect ngt. Trang 28

Ch bin V Thanh n

Hm 3CH: To tp tin mi. Cp thanh ghi DS:DX tr ti tn ca tp tin mi. Cui chui ta phi c s 0. CX cha thuc tnh ca tp tin nh sau: 0 - bnh thng, 1 - ch c, 2 - n, 4 tp tin h thng. Sau khi thc hin th th tp tin c cha trong AX. Ta phi gi n li v mi ln truy xut tp tin ta phi cn th tp tin. Hm 3DH: M 1 tp tin c trn a. Cp thanh ghi DS:DX tr ti tn tp tin (c 0 cui chui tn). Ta t trong AL kiu truy cp ca tp tin nh sau: 0-ch c, 1-ch ghi, 2-c v ghi. Th tp tin nm trong AX. Hm 3EH: ng tp tin. Th tp tin c ng nm trong BX. Hm 3FH: c t tp tin hoc thit b, cp thanh ghi DS:DX tr n vng b nh m d liu s chuyn ti. BX cha th tp tin. Trc khi c phi m tp tin v CX cha s byte cn c. Sau khi thc hin hm th AX cha s byte c vo. Ta cng c th dng hm ny gn th cho ngoi vi v DOS cng gn th cho ngoi vi. Hm 40H: Ghi ln tp tin hoc thit b, trc ht phi m tp tin. DS:DX tr n vng cha d liu trong b nh. BX cha th tp tin. CX cha s byte cn ghi ln a. C th dng hm ny gi d liu ra ngoi vi. Hm 41H: Xo tp tin trn a. DS:DX cha n tn tp tin mun xo, ta khng th xo tp tin ang m hoc tp tin c thuc tnh ch c. Hm 43H: c hoc thay i thuc tnh tp tin. c thuc tnh: t AL = 0 DS:DX tr n tn tp tin. Sau khi thc hin hm, thuc tnh nm trong CX. i thuc tnh: t AL = 1 CX cha thuc tnh mi. DS:DX tr n tn tp tin. Hm 4CH: Kt thc chng trnh v tr v DOS (c 2 loi tp tin c ui .COM v .EXE). Hm 56H: i tn tp tin. DS:DX tr ti tn c. ES:DI tr ti tn mi.

3. Cu trc mt chng trnh hp ng MASM


Mt chng trnh hp ng c th gm nhiu modul. Cc modul c th vit ring l bng mt chng trnh x l vn bn v dch ring l bng MASM cho ra cc chng trnh ch. Cc chng trnh ch s c trnh lin kt ni li thnh mt chng trnh chy c c ui chm EXE. Mi modul c th vit nh sau: Trang 29

Gio trnh Assembler PAGE 60, 132 TITLE (Tiu v tr ny) (Cc pht biu EXTRN hay PUBLIC nu c) MCR MACRO (vit macro) ENDM STACK SEGMENT PARA STACK STACK DB 64 DUP(?) STACK ENDS DSEG SEGMENT PARA PUBLIC DATA (dnh nh cho d liu y) DSEG ENDS CSEG SEMENT PARA PUBLIC CODE ASSUME CS: CSEG, DS: DSEG BATDAU: MOV AX, DSEG MOV DS, AX (chng trnh chnh) CTC PROC NEAR (vit chng trnh con) CTC ENDP CSEG ENDS END BATDAU ;Chm dt chng trnh v chn a ch bt u ca ;chng trnh l BATDAU

4. Tp tin ui COM v tp tin ui EXE


a. Gii thiu Hp ng MASM cho php to tp tin ui COM dng cho cc chng trnh nh v tp tin ui EXE xy dng cc chng trnh ln. b. c im ca tp tin ui COM - Ch c mt on duy nht, cc thanh ghi CS, DS, SS u c chung mt tr s. - Kch thc ti a l 64KB. - Tp tin COM c np vo b nh trong v thc hin nhanh hn tp tin EXE. Khi DOS thc hin tp tin COM, n to vng nh t di t 0 n 0FFH cha thng tin cn thit cho DOS. Vng ny gi l vng PSP Ch bin V Thanh n Trang 30

(program segment prefix). V th a ch bt u ca tp tin COM l t di 100H. Tt cc cc thanh ghi on u phi ch dn PSP. Dng in hnh ca tp tin COM nh sau: V d chng trnh gc HELLO.ASM
CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG, ES: CSEG, SS: CSEG ORG 100H BATDAU: MOV AX, DSEG MOV DS, AX MOV AH, 09H MOV DS, offset Mess INT 21H INT 20H Mess BD Hello!$ CSEG ENDS END BATDAU

c. c im ca tp tin ui EXE - Chng trnh ln v nm nhiu on khc nhau. - C th gi cc chng trnh con dng Far. - Kch thc tp tin tu . - C Header u tp tin cha cc thng tin cn thit cho tp tin EXE. Tp tin EXE khng dng lnh ORG 100H u chng trnh. - Dng in hnh ca tp tin EXE nh sau: V d chng trnh gc HELLO.ASM
DULIEU SEGMENT THONGBAO DB 'HELLO!$' DULIEU ENDS MALENH SEGMENT ASSUME CS: MALENH, DS: DULIEU BATDAU: MOV AX, DULIEU MOV DS, AX MOV DX, Offset THONGBAO MOV AH, 09H INT 21H MOV AH, 4CH INT 21H MALENH ENDS

Trang 31

Gio trnh Assembler


END BATDAU

d. Cc bc bin dch chng trnh trong hp ng MASM - Dng mt chng trnh son tho (Notepad chn hn) son tho m ngun v lu li tn tp tin c phn m rng l ASM. V d Hello.asm. - Dng hp ng MASM dch Hello.asm thnh chng trnh ch Hello.obj. Nh trn, ta nh lnh: Masm Hello; (lu c du ; sau lnh bin dch). - Dng chng trnh LINK bin Hello.obj thnh chng trnh thi hnh c: Hello.exe. Nh trn, ta nh tip lnh: Link Hello; (lu c du ; sau lnh bin dch). Lc ny trn a c chng trnh Hello.exe ta c th thc thi chng trnh ny t DOS bng cch nh vo tn chng trh vo n phm Enter. Nh trn ta nh: Hello - Cho tp tin c ui COM th ngoi 2 lnh trn ta phi dng lnh ngoi tr ca DOS l EXE2BIN bin i EXE thnh COM. Nh trn ta nh: Exe2Bin Hello.exe Hello.com

Ch bin V Thanh n

Trang 32

Mc lc
Chng 1 T CHC B X L INTEL 8086 .............................................................1 I. B X L (CPU) INTEL 8086 .........................................................................1 1. T chc tng qut ............................................................................................1 2. Cc thanh ghi ca 8086 ...................................................................................2 3. T chc b nh trong ......................................................................................3 4. S phn on trong b nh trong ....................................................................3 5. a ch cc ngoi vi .........................................................................................4 6. Cc chn ca vi mch 8086 .............................................................................4 II. CC LNH THNG DNG CA CPU 8086 ...............................................6 1. Gii thiu .........................................................................................................6 2. Nhm di chuyn s liu ...................................................................................6 3. Nhm lnh chuyn a ch ...............................................................................7 4. Nhm lnh chuyn c hiu (thanh ghi trng thi) ...........................................7 5. Nhm lnh vo ra ngoi vi ..............................................................................8 6. Nhm lnh iu khin .....................................................................................8 7. Nhm lnh so snh ..........................................................................................8 8. Nhm lnh vng lp ........................................................................................9 9. Nhm lnh gi chng trnh con .....................................................................9 10. Nhm lnh tnh ton s hc .......................................................................10 11. Nhm lnh dch chuyn v quay ...............................................................11 12. Nhm lnh logic ........................................................................................13 13. Nhm lnh x l chui ..............................................................................13 14. Cc lnh khc ............................................................................................15 III. CC KIU NH V CA CPU 8086 .........................................................15 1. nh v tc th ................................................................................................15 2. nh v trc tip .............................................................................................15 3. nh v thanh ghi ...........................................................................................15 4. nh v nn ....................................................................................................16 5. nh v ch s.................................................................................................16 6. nh v ch s v nn .....................................................................................16 7. nh v chui .................................................................................................16 8. nh v ca vo ra .........................................................................................16 Chng 2 HP NG ....................................................................................................17 I. C TNH TNG QUT CA HP NG ...................................................17 1. Cu trc tng qut ca mt lnh hp ng .....................................................17 2. Cu trc tng qut ca Macro .......................................................................18 3. Cu trc tng qut ca chng trnh con ......................................................18 4. Cu trc tng qut ca bin ton cc (global), bin a phng (local) .......18 5. Cu trc tng qut ca cc bng, thng bo m hp ng cung cp cho ngi s dng ..................................................................................................................18 6. Cu trc tng qut ca hp ng cho (cross assembler) ...............................19 II. HP NG MASM - DNG CHO CPU 8086 ..................................................19 1. Gii thiu hp ng MASM ...........................................................................19 2. Cu trc ca mt hng lnh hp ng MASM ...............................................19 3. Tn trong hp ng MASM ............................................................................19 Trang 33

Gio trnh Assembler 4. III. 1. 2. 3. 4. T gi nh m lnh ....................................................................................... 20 LP TRNH DNG HP NG MASM ..................................................... 27 Gii thiu ....................................................................................................... 27 Mt s ngt thng dng trong HH MS-DOS ........................................... 27 Cu trc mt chng trnh hp ng MASM ................................................. 29 Tp tin ui COM v tp tin ui EXE ........................................................ 30

Ch bin V Thanh n

Trang 34

You might also like