ĐHĐL Giáo Trình Hợp Ngữ (NXB Đà Lạt 2002) Nguyễn Hữu Lộc, 110 Trang

background image

TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT

F

7 G





GIAÙO TRÌNH

HÔÏP NGÖÕ


NGUYEÃN HÖÕU LOÄC



2002

background image

Hôïp Ngöõ

- 2 -

MUÏC LUÏC

LÔØI MÔÛ ÑAÀU ..................................................................................................................... 4
CHÖÔNG 1: GIÔÙI THIEÄU CHUNG ................................................................................... 5

I. CAÙC THANH GHI TRONG VI XÖÛ LYÙ HOÏ INTEL:................................................... 5

1. Caùc thanh ghi thoâng duïng: ....................................................................................... 6
2. Caùc thanh ghi phaân ñoaïn ......................................................................................... 7
3. Caùc thanh ghi chæ muïc vaø con troû:............................................................................ 7
4. Thanh ghi traïng thaùi (FLAG)................................................................................... 8

II. ÑÒA CHÆ OÂ NHÔÙ: ....................................................................................................... 8
III. MOÄT SOÁ LEÄNH CÔ BAÛN: ........................................................................................ 9

CHÖÔNG 2: GOÏI NGAÉT VAØ TRÌNH DEBUG..................................................................11

I. CAÙC LEÄNH GOÏI NGAÉT: ...........................................................................................11
II. TRÌNH DEBUG:........................................................................................................12
III. VAØI CHÖÔNG TRÌNH ÖÙNG DUÏNG :.....................................................................15

CHÖÔNG 3: HÔÏP NGÖÕ DUØNG TRONG PC.....................................................................19

I. DOØNG LEÄNH:.............................................................................................................19
II. DÖÕ LIEÄU:...................................................................................................................20

1. Haèng: ......................................................................................................................20
2. Bieán: .......................................................................................................................21

III. CAÁU TRUÙC CHÖÔNG TRÌNH:...............................................................................22

CHÖÔNG 4: PHÖÔNG PHAÙP LAÄP TRÌNH......................................................................27

I. TOÅNG QUAN: ............................................................................................................27
II. CAÙC LEÄNH LIEÂN QUAN ÑEÁN REÕ NHAÙNH:...........................................................27

1. Caùc leänh reõ nhaùnh coù ñieàu kieän: ............................................................................28
2. Caùc leänh reõ nhaùnh khoâng ñieàu kieän:......................................................................29

III. CAÙC CAÁU TRUÙC ÑIEÀU KHIEÅN:.............................................................................29

CHÖÔNG 5: NGAÊN XEÁP VAØ THUÛ TUÏC ..........................................................................38

I. NGAÊN XEÁP:................................................................................................................38
II. THUÛ TUÏC: .................................................................................................................38
III. SÖÛ DUÏNG PTR VAØ LABEL: ...................................................................................40
IV. VAØI CHÖÔNG TRÌNH ÖÙNG DUÏNG:......................................................................41

1. Hieän soá thaäp phaân:..................................................................................................41
2. Hieän soá nhò phaân vaø thaäp luïc phaân..........................................................................44
3. Ñoïc töø baøn phím......................................................................................................46


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 3 -


CHÖÔNG 6: MOÑUN CHÖÔNG TRÌNH & CAÙC KIEÅU ÑÒNH VÒ ÑÒA CHÆ.............51

I. MOÑUN CHÖÔNG TRÌNH .......................................................................................51

1. Ñònh höôùng bieân dòch extrn.....................................................................................51
2. Ñònh höôùng bieân dòch public ...................................................................................52
3. Laäp thö vieän - taïo vó leänh (macro) .........................................................................54

II. CAÙC KIEÅU ÑÒNH VÒ ÑÒA CHÆ..................................................................................56
III. CHÖÔNG TRÌNH ÖÙNG DUÏNG...............................................................................60
IV. TAÏO TAÄP TIN .COM ...............................................................................................67

1- Daïng cuûa moät chöông trình COM...........................................................................68
2- Öùng duïng taäp tin .com ............................................................................................69

CHÖÔNG 7: SÖÛ DUÏNG PHAÂN ÑOAÏN TOAØN PHAÀN.....................................................76

I- SÖÛ DUÏNG CAÙC ÑÒNH HÖÔÙNG BIEÂN DÒCH............................................................76

1. Segment..................................................................................................................76
2. Ñònh höôùng bieân dòch assume.................................................................................79

II - DAÏNG CUÛA CHÖÔNG TRÌNH .EXE SÖÛ DUÏNG TRONG CAÙC PHÖÔNG PHAÙP
CUÕ: .................................................................................................................................79
III- VÍ DUÏ CHÖÔNG TRÌNH COM..............................................................................83

CHÖÔNG 8: CHÖÔNG TRÌNH ÖÙNG DUÏNG ..................................................................85

I. IN NOÄI DUNG VAÊN BAÛN RA MAÙY IN: ...................................................................85

1. Söû duïng haøm 40h ngaét 21h (DOS) ñeå thöïc hieän......................................................85
2. Söû duïng haøm 01h ngaét 17h (ROMBIOS) ................................................................85

II. ÑEÁM SOÁ TÖØ TRONG MOÄT TAÄP TIN ......................................................................86
III- ÑOÅI NGÖÔÏC CHUOÃI.............................................................................................89
IV. CHÖÔNG TRÌNH HIEÅN THÒ THÔØI GIAN .............................................................90
V. CHÖÔNG TRÌNH THÖÔØNG TRUÙ BOÄ NHÔÙ............................................................97

Phuï luïc A: MOÄT SOÁ CHÖÔNG TRÌNH PHUÏC VUÏ CUÛA DOS.......................................105
Phuï luïc B: MOÄT SOÁ CHÖÔNG TRÌNH PHUÏC VUÏ CUÛA ROM-BIOS............................108
TAØI LIEÄU THAM KHAÛO.................................................................................................110


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 4 -


LÔØI MÔÛ ÑAÀU

Hôïp ngöõ laø moät moân hoïc daønh cho sinh vieân caùc chuyeân ngaønh kyõ thuaät.

Laø moät ngoân ngöõ can thieäp saâu vaøo heä thoáng maùy tính, hôïp ngöõ thöôøng ñöôïc söû
duïng trong nhöõng phaàn vieäc töông ñoái tinh teá nhö ñieàu khieån heä thoáng, vi ñieàu
khieån ...


Tuy vaäy vôùi nhöõng ngöôøi laàn ñaàu tieân laøm quen vôùi ngoân ngöõ naøy, vieäc

tieáp thu quaû thaät raát khoù khaên bôûi leõ ngoân ngöõ naøy gaàn vôùi ngoân ngöõ maùy vaø söû
duïng caùc kyù töï gôïi nhôù neân khoù hieåu hôn söû duïng caùc ngoân ngöõ caáp cao nhö
Pascal, C..v.v...Ngoaøi ra, ngöôøi hoïc khoâng nhöõng phaûi bieát phaàn meàm maø coøn
phaûi hieåu phaàn cöùng ôû möùc ñoä naøo ñoù nöõa. Ñieàu naøy taïo ra moät aùp löïc raát lôùn gaây
khoù khaên cho ngöôøi hoïc.


Trong nhieàu naêm giaûng daïy moân naøy, toâi nhaän thaáy hieän coù raát nhieàu

saùch, taøi lieäu tham khaûo vieát veà hôïp ngöõ song ñeå coù moät taøi lieäu ñaùp öùng yeâu caàu
cuûa sinh vieân trong vieäc tieáp thu moân hôïp ngöõ tuaàn töï töø deã ñeán khoù coù phöông
phaùp thì thaät hieám.


Do vaäy toâi thöïc hieän giaùo trình naøy vôùi mong öôùc coù moät taøi lieäu ñaùp öùng

yeâu caàu treân. Trong giaùo trình, toâi coù ñöa vaøo raát nhieàu ví duï vaø öùng duïng töø thaáp
ñeán cao ñeå sinh vieân coù theå tieáp thu deã daøng moân hoïc naøy.


Tuy vaäy taøi lieäu naøy khoâng sao traùnh khoûi nhöõng sai soùt, raát mong caùc

ñoàng nghieäp, sinh vieân vaø baïn ñoïc goùp yù


Hoaøn thaønh giaùo trình naøy, toâi xin chaân thaønh caùm ôn ñeán caùc ñoàng

nghieäp trong Khoa Vaät lyù Tröôøng Ñaïi hoïc Dalat ñaõ ñoäng vieân, goùp yù vaø taïo ñieàu
kieän cho toâi trong quaù trình thöïc hieän. Toâi cuõng xin ghi nhaän söï ñoùng goùp cuûa
nhieàu theá heä sinh vieân khoa vaät lyù, khoa toaùn - tin ñeå giaùo trình naøy ñöôïc saép xeáp
ngaøy caøng deã hieåu vaø hôïp lyù hôn.

Nguyeãn Höõu Loäc


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 5 -

CHÖÔNG 1: GIÔÙI THIEÄU CHUNG


Taïi sao chuùng ta phaûi hoïc laäp trình vôùi hôïp ngöõ trong khi hieän nay

coù raát nhieàu ngoân ngöõ caáp cao nhö C hoaëc Pascal duøng ñeå laäp trình deã daøng
hôn? Coù theå noùi coù nhieàu caâu traû lôøi cho caâu hoûi naøy. Nhöng ban ñaàu, chuùng
ta coù theå xeùt ñoái vôùi hôïp ngöõ thì moãi leänh töông öùng vôùi moät leänh ngoân ngöõ
maùy. Noùi caùch khaùc, neáu moãi doøng leänh trong chöông trình laø moät leänh hôïp
ngöõ vaø moät töø maùy töông öùng vôùi moät leänh maùy nhö vaäy n doøng trong chöông
trình seõ taïo ra moät chöông trình maùy goàm n töø. Nhö vaäy hôïp ngöõ coù theå xem
laø ngoân ngöõ raát gaàn vôùi ngoân ngöõ maùy, chuùng ta coù theå tieáp caän ñeán taát caû caùc
ngoùc ngaùch cuûa maùy vaø quan troïng hôn laø chuùng ta thöïc hieän chöông trình
vieát baèng hôïp ngöõ nhanh hôn so vôùi vieát baèng nhöõng ngoân ngöõ caáp cao khaùc.
Tuy vaäy cuõng caàn thaáy raèng raát nhieàu ngoân ngöõ caáp cao hoå trôï giao dieän vôùi
hôïp ngöõ, noùi caùch khaùc laø chuùng ta coù theå vieát 1 ñoaïn hôïp ngöõ trong chöông
trình vieát baèng ngoân ngöõ caáp cao nhö C hoaëc Pascal... Ñieàu naøy cho pheùp
chuùng ta laäp trình hieäu quaû hôn vôùi nhöõng phaàn vieäc saùt vôùi heä thoáng vaø ñoøi
hoûi thôøi gian nhanh.


Trong kieán truùc maùy tính nhieàu caáp, vieäc chuyeån moät chöông trình

cuûa ngöôøi söû duïng töø moät ngoân ngöõ naøy sang chöông trình duøng ngoân ngöõ
khaùc goïi laø chöông trình dòch. Ngoân ngöõ söû duïng ñeå vieát chöông trình ban ñaàu
goïi laø ngoân ngöõ nguoàn coøn ngoân ngöõ sau khi dòch goïi laø ngoân ngöõ ñích.


Ngöôøi ta phaân bieät caùc chöông trình dòch ra laøm hai loaïi tuøy theo

moái quan heä giöõa ngoân ngöõ nguoàn vaø ngoân ngöõ ñích. Khi ngoân ngöõ nguoàn
goàm nhöõng kyù töï gôïi nhôù leänh cuûa ngoân ngöõ maùy thì chöông trình dòch seõ goïi
laø hôïp dòch (assembler) vaø ngoân ngöõ nguoàn laø hôïp ngöõ (assembly language).
Trong khi ñoù ngoân ngöõ nguoàn laø ngoân ngöõ caáp cao nhö C hoaëc Pascal thì
chöông trình dòch seõ goïi laø bieân dòch.

I. CAÙC THANH GHI TRONG VI XÖÛ LYÙ HOÏ INTEL:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 6 -

Boä vi xöû lyù 8088 coù theå ñòa chæ hoùa ñeán 2

20

byte baét ñaàu töø ñòa chæ 0. Nhöõng

leänh cuûa 8088 coù theå thöïc hieän vôùi nhöõng töø 8 bit hay byte cuõng nhö vôùi nhöõng töø 16 bits.
8088 söû duïng nhöõng ñòa chæ 20 bits ñeå truy caäp ñeán 2

20

byte oâ nhôù. Vì caùc thanh ghi coù

chieàu daøi laø 16 bits neân caùc ñòa chæ duøng 20 bits seõ coù khoù khaên trong thöïc hieän. Ñeå giaûi
quyeát vaán ñeà naøy, nhöõng nhaø saûn xuaát boä vi xöû lyù ñaõ söû duïng 4 thanh ghi phaân ñoaïn (moät
duøng cho leänh, moät cho döõ lieäu, moät cho ngaên xeáp vaø moät döï tröõ)


Nhöõng thanh ghi coù theå xem laø nhöõng oâ nhôù naèm beân trong boä vi xöû lyù coù thôøi

gian truy xuaát cao, vôùi 8088, chuùng ta coù 14 thanh ghi chia ra laøm 4 loaïi:


- Caùc thanh ghi laøm vieäc;
- Caùc thanh phaân ñoaïn;
- Caùc thanh ghi böôùc nhaûy (offset);
- Thanh ghi traïng thaùi (Côø: FLAG)

1. Caùc thanh ghi thoâng duïng:

Bao goàm 4 thanh ghi. Moãi thanh ghi ñeàu coù nhöõng chöùc naêng rieâng maëc duø

chuùng cuõng laø nhöõng nôi löu tröõ nhöõng keát quaû trung gian:

AX laø thanh ghi 16 bit goïi laø thanh ghi tích luõy (Accumulator) söû duïng khi

thöïc hieän caùc pheùp tính soá hoïc.


BX laø thanh ghi 16 bit goïi laø thanh ghi neàn (Base register)

CX laø thanh ghi 16 bit goïi laø thanh ghi ñeám (Counter)

DX laø thanh ghi 16 bit goïi laø thanh ghi döõ lieäu (Data)

Neân bieát raèng moãi thanh ghi naøy ñeàu coù theå phaân ra laøm hai thanh ghi 8 bit söû

duïng rieâng reõ ñöôïc:

AX = AH vaø AL;
BX = BH vaø BL;
CX = CH vaø CL;
DX = DH vaø DL.


Cuõng neân nhôù raèng nhöõng pheùp toaùn thöïc hieän vôùi caùc thanh ghi luoân nhanh

khi chuùng thöïc hieän vôùi caùc oâ nhôù trong boä nhôù.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 7 -

2. Caùc thanh ghi phaân ñoaïn

Goàm 4 thanh ghi:

CS vieát taét töø "Code Segment", laø nôi löu tröõ ñòa chæ cuûa phaân ñoaïn boä nhôù

taïi ñoù caùc leänh trong chöông trình naïp vaøo (maõ maùy).


DS vieát taét töø "Data Segment", laø nôi löu tröõ ñòa chæ cuûa phaân ñoaïn boä nhôù

taïi ñoù ñaët döõ lieäu (data) cuûa chöông trình.


SS vieát taét töø "Stack Segment", laø nôi löu tröõ ñòa chæ cuûa phaân ñoaïn ngaên

xeáp.


ES vieát taét töø "Extra Segment", laø nôi löu tröõ ñòa chæ cuûa phaân ñoaïn döï tröõ

thöôøng duøng ghi giöõ döõ lieäu.

3. Caùc thanh ghi chæ muïc vaø con troû:

Caùc thanh ghi naøy giöõ giaù trò böôùc nhaûy (offset ) keát hôïp vôùi ñòa chæ phaân ñoaïn.

Toång coäng coù 5 thanh ghi:


SI vieát taét töø "Source Index". Thanh ghi naøy laø thanh ghi 16 bit söû duïng khi

thöïc hieän caùc pheùp toaùn vôùi chuoãi (daõy kyù töï); thöôøng ñöôïc duøng keát hôïp vôùi thanh ghi
phaân ñoaïn DS.

DI vieát taét töø "Destination Index". Thanh ghi naøy cuõng laø thanh ghi

16 bit söû duïng khi thöïc hieän caùc pheùp toaùn vôùi chuoãi (daõy kyù töï); thöôøng ñöôïc
duøng keát hôïp vôùi thanh ghi phaân ñoaïn DS. Tuy nhieân trong tröôøng hôïp
chuyeån chuoãi thì noù seõ keát hôïp vôùi thanh ghi phaân ñoaïn ES.


BP hoaëc "Base Pointer". Thanh ghi 16 bit naøy keát hôïp vôùi thanh ghi phaân ñoaïn

SS (SS:BP) ñeå ñöa döõ lieäu vaøo trong ngaên xeáp khi goïi chöông trình con (CALL)


SP hoaëc "Stack Pointer". Thanh ghi 16 bit naøy cuõng keát hôïp vôùi thanh ghi phaân

ñoaïn SS (SS:SP) ñeå chæ ra phaàn töû cuoái cuûa ngaên xeáp.


IP goïi laø con troû leänh (Instruction Pointer). Thanh ghi 16 bit naøy keát hôïp vôùi

thanh ghi phaân ñoaïn CS (CS:IP) ñeå chæ ñeán leänh tieáp theo seõ thöïc hieän. Noäi dung cuûa


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 8 -


thanh ghi naøy khoâng theå thay ñoåi tröïc tieáp; noù chæ bò thay ñoåi moät caùch giaùn tieáp thoâng qua
caùc leänh nhaûy böôùc, qua caùc chöông trình con vaø qua caùc ngaét.

4. Thanh ghi traïng thaùi (FLAG)

Thanh ghi trang thaùi laø thanh ghi goàm 16 bit (Côø). Giaù trò cuûa töøng bit moät

trong thanh ghi naøy ñoäc laäp vôùi caùc bit khaùc trong cuøng thanh ghi. Ngöôøi ta thöôøng xöû lyù
töøng bit moät vaø moät soá bit coù aûnh höôûng ñeán hoaït ñoäng cuûa chöông trình. Nhöõng bit naøy
goïi laø caùc chæ baùo (indicator) coù theå chia ra laøm 2 loaïi:


Caùc chæ baùo traïng thaùi:

bit

yù nghóa

vieát taét

0

Nhôù

(Carry)

CF

2

Chaün leû (Parity)

PF

4

Nhôù phuï (Auxiliairy carry)

AF

6

Khoâng

(Zero)

ZF

7

Daáu

(Sign)

SF

11

Traøn

(Overflow)

OF

Caùc chæ baùo ñieàu khieån

bit

yù nghóa

vieát taét

8

Baåy

(Trap)

TF

9

Ngaét

(Interrupt)

IF

10

Höôùng (Direction)

DF


Caùc bit 1, 5, 12, 13, 14, 15 cuûa thanh ghi traïng thaùi 16 bit khoâng ñöôïc söû duïng.

II. ÑÒA CHÆ OÂ NHÔÙ:


Boä nhôù cuûa 1 maùy tính bao goàm 1 daõy tuaàn töï caùc oâ nhôù ñöôïc ñaùnh soá trong ñoù

löu giöõõ 1 giaù trò soá naøo ñoù. Soá töông öùng cuûa 1 oâ nhôù goïi laø ñòa chæ, moãi oâ nhôù giöõ 8 bit.
Treân nhöõng maùy tính IBM PC, boä nhôù ñöôïc chia thaønh caùc vuøng 65536 byte goïi laø phaân
ñoaïn, ñòa chæ cuûa 1 oâ nhôù seõ bao goàm 2 phaàn: soá phaân ñoaïn vaø böôùc nhaûy (offset) tính töø vò
trí ban ñaàu cuûa phaân ñoaïn; noù seõ coù daïng:


Phaân ñoaïn: böôùc nhaûy

(Segment:Offset)


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 9 -

Caùc leänh chieám moät hoaëc nhieàu oâ nhôù keá tieáp trong boä nhôù, ñieàu naøy phuï

thuoäc vaøo ñoä phöùc taïp cuûa leänh.

III. MOÄT SOÁ LEÄNH CÔ BAÛN:

MOV: laø moät trong nhöõng leänh chính cuûa hôïp ngöõ. Noäi dung cuûa toaùn haïng beân

phaûi seõ chuyeån sang toaùn haïng beân traùi

Ví duï:
MOV

AX,

10

MOV

AX,

BX

MOV

AX,

[BX]

LEA:(Load Effective Address) töông töï nhö MOV ....,OFFSET....

Ví duï:LEA DX,MSG thay vì MOV DX, OFSET MSG

ADD: coäng 2 soá 8 bit hoaëc 16 bit, keát quaû ñöa vaøo boä nhôù hoaëc thanh ghi.

Ví duï:
ADD

AX,

BX

ADD

AH,

AL

INC: theâm moät ñôn vò vaøo thanh ghi cho tröôùc, keát quaû nhaän ñöôïc seõ töông töï nhö
COÄNG vôùi 1.

Ví duï:

INC

AX

INC

BL

ADC: thöïc hieän leänh coäng nhö ADD sau ñoù theâm giaù trò coù trong chæ baùo CARRY
vaøo keát quaû nhaän ñöôïc

Ví duï:
ADC

DL,30

SUB: thöïc hieän tröø 1 löôïng töø 1 soá, keát quaû ñöôïc ñaët vaøo boä nhôù hoaëc thanh ghi.

Ví duï:
SUB

AL,

BL

MUL: nhaân toaùn haïng cho tröôùc vôùi moät löôïng ñaët trong thanh AX hoaëc AL
(accumulator). Keát quaû seõ ñaët vaøo AH vaø AL neáu caùc toaùn haïng laø byte vaø ñaët trong
DX vaø AX neáu toaùn haïng laø töø (word).

Ví duï:
MUL

BH

MUL

BX

DIV: chia 1 töø (soá bò chia trong AX) bôûi 1 toaùn haïng 8 bit (soá chia) hoaëc chia 1 töø
ñoâi - double word (trong DX, AX) bôûi moät toaùn haïng 16 bit. Thöông soá seõ ñaët trong
AL vaø soá dö ñaët trong AH neáu toaùn haïng laø moät byte vaø thöông soá seõ ñaët trong AX vaø
soá dö ñaët trong DX neáu söû duïng 1 töø-word.

Ví duï:

DIV

BX

DIV

BH


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 10 -

CMP: cho pheùp so saùnh noäi dung hai thanh ghi hoaëc oâ nhôù. So saùnh laø thöïc hieän 1
pheùp tröø tuy nhieân muïc ñích ñaït ñöôïc khoâng phaûi laø keát quaû cuûa pheùp trö ø maø chuû
yeáu laø so saùnh hai toaùn haïng do vaäy sau leänh so saùnh thöôøng thaáy leänh nhaûy böôùc coù
ñieàu kieän phuï thuoäc vaøo caùc chæ baùo trong quaù trình so saùnh.

Ví duï:

CMP

DL, 3A

JNZ: nhaûy böôùc ñeán moät nhaõn (label) cho tröôùc neáu chæ baùo zero laøø 0.

Ví duï:

JNZ

Tiep

JLE: nhaûy böôùc ñeán moät nhaõn (label) cho tröôùc neáu keát quaû laø nhoûù hôn hoaëc baèng 0.

Ví duï:

JLE

Lap

LOOP: laëp laïi luùc naøy thanh ghi CX giaûm 1 ñôn vò vaø thöïc hieän moät söï reõ nhaùnh
ñeán moät nhaõn cho tröôùc cho ñeán khi CX baèng 0.

Ví duï:

LOOP

Lap

RCL: dòch chuyeån taát caû caùc bit veà phía traùi moät vò trí hoaëc nhieàu vò trí. Nhöõng bit
ra khoûi beân TRAÙI seõ vaøo chæ baùo CARRY tröôùc khi ñöa laïi vaøo beân phaûi cuûa toaùn
haïng.

Ví duï:

RCL

AH,1

SHR: dòch chuyeån taát caû caùc bit veà phía phaûi moät vò trí hoaëc nhieàu vò trí.

Ví duï:

SHR

AH,1


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 11 -

CHÖÔNG 2: GOÏI NGAÉT VAØ TRÌNH DEBUG

I. CAÙC LEÄNH GOÏI NGAÉT:

Moät maùy tính thöôøng coù raát nhieàu loaïi thieát bò ngoaïi vi quan troïng nhö baøn

phím, maøn hình, ñóa, maùy in, v.v... Muoán ñieàu khieån caùc thieát bò naøy ñoøi hoûi chuùng ta phaûi
vieát chöông trình baèng caùc leänh maùy daøi doøng vaø phöùc taïp. Nhôø söï giuùp ñôõ cuûa heä ñieàu
haønh MSDOS hoaëc ROM-BIOS chuùng ta coù theå taùc ñoäng moät thieát bò ngoaïi vi baèng caùch
chæ söû duïng 1 haøm ñöôïc ñaùnh soá vaøo chöông trình keøm theo moät soá caùc thoâng soá. Taát caû
ñieàu naøy ñeàu thöïc hieän thoâng qua caùc thanh ghi. Nhöõng haøm naøy goïi laø ngaét.

Leänh INT laø leänh goïi ngaét ñöôïc ñaùnh soá taïi vò trí toaùn haïng ñöôïc xem nhö goïi

moät chöông trình con. Moät ngaét coù theå bao goàm nhieàu dòch vuï, soá cuûa dòch vuï ñöôïc ñöa
vaøo thanh ghi AH tröôùc khi goïi ngaét.


Ví duï 1: Hieän 1 kyù töï ASCII leân maøn hình

MOV

DL,41h

MOV

AH,02h

INT

21h


Ví duï 2: Ñoïc kyù töï tieáp töø baøn phím

MOV

AH,0

INT

16h


Ví duï 3: Hieän 1 thoâng baùo leân maøn hình

Chao

DB

'Chao cac ban $'


MOV

AH,09h

MOV

DX, OFFSET Chao

INT

21h

Ví duï 4: Keát thuùc chöông trình

INT

20h


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 12 -

Chuùng ta coù theå tham khaûo caùc haøm naøy trong taøi lieäu "Caåm nang cho ngöôøi

laäp trình maùy vi tính IBM PC" - taùc giaû Peter Norton

II. TRÌNH DEBUG:

Moät trong hai caùch ñeå vieát chöông trình baèng hôïp ngöõ laø söû duïng phaàn meàm

DEBUG. Chuùng ta caàn phaûi coù moät taäp tin teân DEBUG.EXE söû duïng trong heä ñieàu haønh
MSDOS

Coù theå xem DEBUG laø moät coâng cuï giuùp chuùng ta laäp trình baèng hôïp ngöõ ban

ñaàu vì nhöõng lyù do sau:


-

DEBUG söû duïng deã hôn MASM.

-

Chuùng ta coù theå thöû nghieäm caùc chöông trình nhoû deã daøng tröôùc khi ñöa
chuùng vaøo trong nhöõng chöông trình lôùn, phöùc taïp hôn.

DEBUG coù 19 leänh. Caùc leänh naøy duøng maãu töï ñaàu cuûa töø tieáng

Anh ñeå gôïi nhôù yù nghóa cuûa leänh.

LEÄNH

TÖØ TIEÁNG ANH

CHÖÙC NAÊNG

1 2

3

A

Assemble

Hôïp dòch 1 chöông trình

C

Compare

So saùnh 2 vuøng cuûa boä nhôù

D

Dump

Trình baøy moät vuøng cuûa boä nhôù baèng hex vaø
ASCII

E

Enter

Nhaäp maõ maùy vaøo boä nhôù

F

Fill

Laép ñaày moät vuøng nhôù

G

Go

Thöïc hieän moät chöông trình

H

Hexadecimal

Coäng vaø tröø 2 soá hex

I

Input

Nhaäp vaø trình baøy töø coång

L

Load

Nhaäp moät taäp tin töø ñóa vaøo boä nhôù

1 2

3

M

Move

Chuyeån moät khoái nhôù

N

Name

Ñaët teân moät taäp tin

O Out

Ñöa

ra

coång

P

Proceed

Thöïc hieän thuû tuïc hay moät ngaét

Q Quit

Thoaùt

khoûi

Debug

R

Register

Trình baøy giaù trò thanh ghi


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 13 -

S

Search

Tìm moät chuoãi byte trong boä nhôù

T

Trace

Cho chöông trình chaïy töøng leänh moät

U Unassemble

Dòch

ngöôïc

W

Write

Ghi leân ñóa


Ñeå khôûi ñoäng trình DEBUG, ngöôøi ta ñaùnh leänh sau:

DEBUG

- Moät gaïch ngang (hyphen) xuaát hieän thoâng baùo cho chuùng ta bieát DEBUG

ñang ñôïi leän tieáp.


Nhöõng leänh DEBUG thöôøng söû duïng:

Q (Quit): Döøng thöïc hieän DEBUG, veà laïi heä ñieàu haønh

D (Dump Memory): Hieän noäi dung moät vuøng nhôù.

Ví duï: D 100

xxxx:0100 E9 2D 0D BA DA E7 F5 53 - 00 75 1B 0A 7D 3E 89 90
xxxx:0110 00 67 8A C9 65 3E 7F 1D -5A 6B 7E 90 8B 5A 8F 39
xxxx:0120 E9 2D 0D BA DA E7 F5 53 - 00 75 1B 0A 7D 3E 89 90
xxxx:0130 00 67 8A C9 65 3E 7F 1D -5A 6B 7E 90 8B 5A 8F 39

U (UnAssemble): Cho hieän maõ maùy chöông trình.

Ví duï: U 100

xxxx:0100 E92D0D

JMP

0E30

xxxx:0103 BADA0A

MOV

DX,0ADA

xxxx:0106 3D0500

CMP

AX,0005

xxxx:0109 741B

JZ

0126

R (Registers): Hieän hoaëc thay ñoåi noäi dung caùc thanh ghi cuûa boä vi xöû lyù. Leänh

naøy cho hieän:

-

Noäi dung cuûa caùc thanh ghi trong heä cô soá 16 (hexadeùcimal).

-

Noäi dung cuûa thanh ghi traïng thaùi

Chæ baùo

=0

=1

OF NV

OV


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 14 -

DF UP

DN

IF EI

DI

SF PL

NG

ZF NZ

ZR

AF NA

AC

PF PO

PE

CF NC

CY


Ví duï:

R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=6800 ES=6800 SS=6800 CS=6800 IP=0100 NV UP EI PL NZ NA PO NC

6800:0100 E92D0D JMP 0E30


A (Assemble): nhaäp leänh hôïp ngöõ. Chuù yù, DEBUG chæ duøng soá trong heä cô soá

16 chöù khoâng duøng heä cô soá naøo khaùc.


Ví duï:

A 100

6800:0100 MOV AX,FFFF
6800:0103 MOV AH,5
6800:0105 MOV BH,6
6800:0107 MOV AL,BH
6800:0109

E (Entry): Thay ñoåi noäi dung oâ nhôù.

Ví duï:

E 120


G (Go): Thöïc hieän chöông trình


N (Name): Ñaët teân taäp tin

duï:

N

DIAMOND.COM


W (Write): Ghi laïi taäp tin leân ñóa, chuù yù tröôùc ñoù phaûi nhaäp CX (soá byte söû

duïng trong chöông trình) vaø BX= 0 (ñóa A)


L (Load): Laáy laïi noäi dung taäp tin vaøo boä nhôù, chuù yù tröôùc ñoù phaûi xaùc ñònh teân

taäp tin, oå ñóa ñang löu giöõ


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 15 -

T (Trace): thöïc hieän chöông trình tuaàn töï töøng leänh moät coù thoâng baùo noäi dung

cuûa caùc thanh ghi thay ñoåi sau moãi leänh.

III. VAØI CHÖÔNG TRÌNH ÖÙNG DUÏNG :


Chöông trình 1: Hieän 1 kyù töï (♦) leân maøn hình

-A
xxxx:0100

MOV

DL,4;

maõASCII

xxxx:0102

MOV

AH,2; kyù töï ♦

xxxx:0104

INT

21

xxxx:0106

INT

20

-G
-U
-N DIAMOND.COM
-R CX (=8)
-R BX (=0)
-W
-Q


Chöông trình 2: Hieän 1 chuoãi (Chao cac ban) leân maøn hình

Caùch 1:
-E 120

43 6F 68 61 20 63 61 63 20

62

61

6E


-A
xxxx:0100

MOV

BX,120

xxxx:0103

MOV

CX,0C

xxxx:0106

MOV

DL,[BX]

xxxx:0108

MOV

AH,2

xxxx:010A

INT

21

xxxx:010C

INC

BX

xxxx:010D

LOOP

106

xxxx:010F

INT

20

-U
-G


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 16 -


* Sinh vieân coù theå ñaët teân roài löu vaøo ñóa
Caùch 2: Söû duïng giaû leänh DB

-A
xxxx:0100

MOV

AH,9

xxxx:0102

MOV

DX,109

xxxx:0105

INT

21

xxxx:0107

INT

20

xxxx:0109

DB

'Chao cac ban! $'


-U
-G

Chöông trình 3: Coäng 10 soá nguyeân ñaàu tieân

-A
xxxx:0100

MOV

CX,1

xxxx:0103

MOV

AX,0

xxxx:0106

ADD

AX,CX

xxxx:0108

INC

CX

xxxx:0109

CMP

CX,0A

xxxx:010C

JLE

106

xxxx:010E

INT

20


-U
-T
Chöông trình 4: Hieän 5 kyù töï ABCDE leân maøn hình
-A
xxxx:0100

MOV

DL,41

xxxx:0102

MOV

CX,5

xxxx:0105

CALL

10E

xxxx:0108

LOOP

105

xxxx:010A

MOV

AH,4C

xxxx:010C

INT

21

xxxx:010E

MOV

AH,2

xxxx:0110

INT

21

xxxx:0112

INC

DL

xxxx:0114

RET


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 17 -

-N HIEN.COM
-R CX (=F)
-R BX (=0)
-W
-G

DEBUG
-N HIEN.COM
-L
-U

Chöông trình 5: Thöïc hieän caùc pheùp toaùn + , - , x , /

1 byte:

-A
xxxx:0100

MOV

AL,05

MOV

BL,03

ADD

AL,BL

MOV

BL,02

SUB

AL,BL

MOV

CL,03

MUL

CL

MOV

CL,02

DIV

CL

INT

20

-U
-T

1 word = 2 byte

-A
xxxx:0100

MOV

AX,3A62

MOV

CX,2B14

ADD

AX,CX

MOV

CX,1002

SUB

AX,CX

MUL

CX

MOV

AX,A034


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 18 -

MOV

DX,0001

MOV

BX,1002

DIV

BX

INT

20

-U
-T



















Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 19 -

CHÖÔNG 3: HÔÏP NGÖÕ DUØNG TRONG PC


Hieän nay khi vieát chöông trình baèng hôïp ngöõ, chuùng ta thöôøng söû duïng trình

dòch MICROSOFT MACRO ASSEMBLER (MASM). Cuõng gioáng taát caû caùc ngoân ngöõ laäp
trình khaùc nhö Basic, Pascal, C ñeàu phaûi thoâng qua dòch thì maùy tính môùi hieåu ñöôïc leänh
sau khi ñaõ taïo ra maõ nguoàn trong moät moâi tröôøng keát hôïp soaïn thaûo. Ñeå soaïn thaûo moät
chöông trình baèng hôïp ngöõ chuùng ta chæ caàn söû duïng moät trình soaïn thaûo vaên baûn ASCII ví
duï nhö Sidekick, phaàn soaïn thaûo trong Norton Commander...v.v... vaø sau ñoù seõ löu giöõ vaøo
taäp tin ASCII treân ñóa. Böôùc tieáp theo laø dòch maõ nguoàn sang maõ maùy nhôø trình dòch
(Assembler).


Chöông trình ñöôïc löu treân ñóa laø moät taäp tin coù phaàn môû roäng ASM ñöôïc soaïn

thaûo baèng moät phaàn meàm soaïn thaûo vaên baûn (ASCII) trong ñoù caùc chöõ caùi vieát HOA ñeàu
ñöôïc xöû lyù nhö nhöõng chöõ caùi vieát thöôøng tröø tröôøng hôïp ñaët trong 1 chuoãi (daõy kyù töï).


Caùc chöông trình bao goàm nhöõng doøng leänh. Moãi doøng leänh laø moät leänh ñöôïc

dòch sang maõ maùy baèng caùc trình dòch.

I. DOØNG LEÄNH:

Moãi doøng leänh goàm 4 vuøng

-

Teân (identifier)

-

Pheùp toaùn

-

Toaùn haïng

-

Chuù thích


Thöôøng theo thoùi quen ngöôøi ta chia laøm 4 coät duøng cho 4 vuøng ñeå chöông trình ñöôïc roõ
raøng maëc duø khoâng coù moät söï baét buoäc naøo veà vieäc chia naøy caû.

TEÂN

PHEÙP TOAÙN

TOAÙN HAÏNG ; CHUÙ THÍCH


Ví duï:
Batdau:

MOV CX,5 ; ñaët soá ñeám ban ñaàu

Caùc vuøng khaùc nhau phaûi ngaên caùch bôûi ít nhaát moät khoaûng troáng (space) hoaëc

TAB, caùc toaùn haïng trong moät leänh phaûi caùc nhau bôûi 1 daáu phaåy (trong tröôøng hôïp naøy
khoâng caàn thieát phaûi coù khoaûng troáng).


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 20 -

Caùc teân ñöôïc laäp trình vieân töï do ñaët ñeå xaùc ñònh nhaõn, bieán, thuû tuïc, v.v...Teân

goàm caùc kyù töï theo yeâu caàu sau: Kyù töï thöù nhaát laø chöõ caùi, soá kyù töï toái ña laø 31 vaø khoâng
coù khoaûng troáng trong teân.


Nhöõng pheùp toaùn laø nhöõng kyù töï gôïi nhôù leänh: MOV, ADD, INC... hoaëc giaû

leänh (pseudo-instruction): DB, PROC...

Nhöõng toaùn haïng trong moät leänh seõ ngaên caùch baèng moät daáu phaåy.

Neáu coù 2 toaùn haïng thì toaùng haïng thöù nhaát laø ñích coøn toaùn haïng thöù hai laø
nguoàn.


Chuùng ta cuõng thaáy coù theå ñöa theâm chuù thích ñeå deã theo doõi ñoïc chöông

trình. Daáu ";" phaûi ñöôïc söû duïng tröôùc khi ghi chuù thích.

II. DÖÕ LIEÄU:

1. Haèng:

Haèng laø moät giaù trò xaùc ñònh baèng moät leänh hay ñuùng hôn laø moät giaû leänh

hôïp ngöõ, giaù trò naøy ñöôïc laäp trình vieân ñònh nghóa laø khoâng thay ñoåi trong quaù trình thöïc
hieän chöông.


Giaû leänh EQU laø leänh hôïp ngöõ duøng ñeå ñònh nghóa moät haèng öùng vôùi moät

teân ñöôïc laäp trình vieân ñaët cho.


Ví duï:

Dung EQU 1

Sai

EQU

0

Nhöõng haèng töùc thôøi (immeùdiate) laø:

. Nhöõng chöõ soáá do laäp trình vieân ñaët ra coù theå söû duïng trong caùc heä cô soá

khaùc nhau. Do vaäy neân theâm chöõ caùi "h" sau nhöõng soá duøng trong heä cô soá 16, vaø theâm
chöõ caùi "b" sau taát caû caùc soá nhò phaân vì trình dòch hôïp ngöõ maëc nhieân chæ laøm vieäc trong
heä cô soá 10 (thaäp phaân) (caàn chuù yù laø trình DEBUG chæ laøm vieäc vôùi heä cô soá 16).

Ví duï: 1B4Dh, 1100b

Nhöõng chöõ soá trong heä cô soá 16 (hexadecimal) baét ñaàu baèng moät chöõ caùi

thì phaûi theâm vaøo moät soá "0" neáu khoâng trình dòch hôïp ngöõ seõ xem nhö moät TEÂN vaø
thoâng baùo loãi.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 21 -

. Nhöõng kyù töï: Nhöõng kyù töï hoaëc chuoãi (daõy kyù töï) ñeàu phaûi

ñöôïc ñaùnh daáu nhaùy ñôn hoaëc ñoâi.

Ví duï: "A", 'Hello'

2. Bieán:

Caùc bieán seõ chieám caùc vuøng nhôù trong quaù trình dòch nhôø söû duïng caùc leänh giaû.

Leänh giaû DB khai baùo vuøng nhôù theo byte, laäp trình vieân coù theå ñaët teân cho

phaàn ñaàu vuøng nhôù. Leänh giaû naøy cuõng xaùc ñònh vuøng nhôù ñöôïc duøng cho chöõ soá hay caùc
chöõ caùi.

Chuù yù: neáu coù nhieàu phaàn töû duøng trong leänh naøy thì nhöõng phaàn töû

naøy phaûi ñöôïc ngaên caùch baèng nhöõng daáu phaåy.


Loaïi BYTE ñöôïc duøng cho caùc soá coù giaù trò trong khoaûng töø 0 ñeán

255.

Ví duï:
-

Khai baùo moät bieán loaïi BYTE coù giaù trò ban ñaàu laøø 0, Teân laø "So".
So DB 0

-

Khai baùo vuøng nhôù coù 3 phaàn töû loaïi BYTE

XYZ

DB 1,2,3

-

Khai baùo moät bieán khoâng coù giaù trò ban ñaàu

Khac

DB ?

-

Khai baùo moät maûng coù 5 phaàn töû khoâng coù giaù trò ban ñaàu loaïi BYTE:

Mang

DB 5 DUP(?)

-

Khai baùo moät maûng coù 25 phaàn töû, phaàn töû thöù nhaát laø 1, thöù hai laøø 2, v.v...:

Mangkhac

DB

5 DUP (1,2,3,4,5)


DUP baùo cho trình dòch bieát laø thöïc hieäp laëp laïi (DUPlicate). Nhö
vaäy nhöõng giaù trò coù trong ngoaëc ñôn seõ laëp laïi cho ñeán heát.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 22 -

Leänh giaû DW khai baùo vuøng nhôù goàm caùc töø (word)

Leänh giaû DD khai baùo vuøng nhôù goàm caùc töø ñoâi (double word)

Leänh giaû DF, DP -> 6byte, DQ -> 8byte; DT-> 10byte

Chuoãi kyù töï: Leänh giaû DB cuõng ñöôïc söû duïng ñeå ñònh nghóa chuoãi kyù. Moät

chuoãi kyù töï luoân ñöôïc ñaët trong daáu nhaùy; neáu chuoãi ñöôïc cho hieän leân maøn hình thì
phaûi keát thuùc baèng daáu '$'


Ví duï:
Thongbao DB 'Chaøo caùc baïn $'
Baoloi DB 'Coù loãi, ñeà nghò laøm laïi $'

Maûng: Maûng laø moät taäp hôïp caùc döõ lieäu cuøng loaïi (byte, word...). Maûng seõ giuùp

cho laäp trình vieân deã daøng laäp caùc voøng laëp ñôn giaûn trong moät chöông trình, muïc
ñích laø truy caäp tuaàn töï ñeán caùc döõ lieäu caàn thieát theo thöù töï.

Ví duï 1:

Vôùi khai baùo SO DB 5,2,7

Chuùng ta coù:

SO

-

5

hoaëc xxxx:0100

- 5

SO+1 -

2

hoaëc xxxx:0101

- 2

SO+2 -

7

hoaëc xxxx:0102

- 7

Ví duï 2:
MANG

DW

12F9h,

15AEh

thì
MANG -

F9h

MANG+1

-

12h

MANG+2

-

AEh

MANG+3

-

15h

III. CAÁU TRUÙC CHÖÔNG TRÌNH:


Caùc chöông trình vieát baèng maõ maùy bao goàm caùc phaàn maõ pheùp toaùn, döõ lieäu,

ngaên xeáp. Moãi phaàn chieám moät phaân ñoaïn nhôù. Chöông trình vieát baèng hôïp ngöõ
cuõng theo caáu truùc nhö vaäy. Luùc aáy döõ lieäu vaø ngaên xeáp ñöôïc ghi thaønh caùc phaân
ñoaïn trong chöông trình . Moãi phaân ñoaïn cuûa chöông trình seõ ñöôïc dòch sang moät
phaân ñoaïn nhôù trong quaù trình dòch.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 23 -

1. Loaïi nhôù:


Ngöôøi ta coù theå söû duïng ñònh höôùng bieân dòch (directive) ñeå xaùc ñònh loaïi nhôù:

CUÙ PHAÙP: .MODEL loaïi nhôù

Thöôøng ngöôøi ta söû duïng caùc loaïi sau:

SMALL, MEDIUM, COMPACT, LARGE....

SMALL: Caùc maõ pheùp toaùn ñaët trong moät phaân ñoaïn

Caùc döõ lieäu ñaët trong moät phaân ñoaïn.

MEDIUM:

Caùc maõ pheùp toaùn ñaët trong nhieàu phaân ñoaïn (hôn 1)
Caùc döõ lieäu ñaët trong moät phaân ñoaïn

COMPACT:

Caùc maõ pheùp toaùn ñaët trong moät phaân ñoaïn Caùc döõ lieäu ñaët

trong nhieàu phaân ñoaïn (hôn 1)


LARGE:

Caùc maõ pheùp toaùn ñaët trong nhieàu phaân ñoaïn (hôn 1)
Caùc döõ lieäu ñaët trong nhieàu phaân ñoaïn

(hôn 1)


Khoâng theå coù caùc maûng chieám nhieàu hôn 64Kbyte

2. Phaân ñoaïn döõ lieäu:

Phaân ñoaïn döõ lieäu trong moät chöông trình bao goàm taát caû nhöõng bieán xaùc ñònh.

Ngöôøi ta söû duïng ñònh höôùng bieân .DATA ñeå ñònh nghóa vuøng cho bieán vaø haèng.

Ví duï:

.DATA

WORD1

DW

2

MSG

DB

'Chao'

SO

EQU

10101111b

3. Phaân ñoaïn ngaên xeáp:

Ngöôøi ta thöôøng daønh moät phaàn cuûa boä nhôù ñeå taïo ngaên xeáp.

.STACK kích thöôùc

Kích thöôùc ñöôïc ñaët tuøy yù theo byte.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 24 -


Ví duï:

.STACK 100h

Neáu chuùng ta khoâng ñaët kích thöôùc cho phaân ñoaïn naøy thì maëc nhieân phaân

ñoaïn ngaên xeáp seõ laáy kích thöôùc laø 1KByte

4. Phaân ñoaïn chöông trình


.CODE

teânchöôngtrình


"teânchöôngtrình" laø moät teân do laäp trình vieân ñaët cho chöông trình. Thöôøng teân

chöông trình coù theå khoâng caàn ñaët nhaát laø trong tröôøng hôïp loaïi nhôù laø SMALL.


Coù raát nhieàu phöông phaùp ñeå laäp chöông trình, tuy vaäy toát nhaát neân chia nhoû

chöông trình thaønh nhieàu chöông trình con (thuû tuïc)


Khi taïo moät thuû tuïc ngöôøi ta thöôøng söû duïng leänh giaû PROC ôû ñaàu cuûa thuû tuïc

vaø ENDP sau leânh cuoái cuûa thuû tuïc.


Daïng chung khi söû duïng caùc leänh giaû naøy laø:

teânthuûtuïc

PROC

;leänh

teânthuûtuïc

ENDP

Ví duï

.CODE

MAIN

PROC

; caùc leänh cuûa chöông trình chính

MAIN

ENDP

; nhöõng thuû tuïc khaùc

Toùm laïi:Ñeå vieát moät chöông trình chuùng ta coù theå coù caáu truùc ñôn giaûn chung

nhö sau


.MODEL SMALL

.STACK 100h

.DATA

;ñònh

nghóa

döõ

lieäu

.CODE


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 25 -

MAIN

PROC

;

leänh

MAIN

ENDP

; caùc thuû tuïc khaùc

END

MAIN

5. Caùc coâng cuï caàn thieát:

Coù raát nhieàu caùch ñeå maõ hoaù moät chöông trình hôïp ngöõ. Caùch ñaàu tieân laø maõ

hoaù tröïc tieáp caùc leänh trong boä nhôù baèng trình DEBUG. Caùch thöù hai laø maõ hoaù maõ
"nguoàn" trong moät taäp tin roài seõ dòch ñeå taïo ra moät chöông trình thöïc hieän ñöôïc.
Caùch naøy laø caùch maø ngöôøi ta thöôøng duøng nhaát vaø goàm caùc böôùc sau:


a- Chuaån bò laäp trình, taïo caáu truùc, xaùc laäp caùc pheùp tính,.. vaø xaùc ñònh löu ñoà

thuaät toaùn. Böôùc naøy chæ caàn vieát treân giaáy.


b- Vieát chöông trình baèng caùc leänh nhôø moät phaàn meàm soaïn thaûo vaên baûn

ASCII nhö EDLIN, Sidekick hoaëc moät phaàn meàm soaïn thaûo baát kyø mieãn sao ghi laïi
ñöôïc moät taäp tin theo maõ.

Taäp tin phaûi coù phaàn môû roäng laø ASM.

c- Dòch maõ nguoàn sang "maõ maùy" baèng caùc söû duïng trình dòch hôïp ngöõ

(MASM). Trong böôùc naøy thöôøng xuaát hieän caùc thoâng baùo loãi, trong tröôøng hôïp ñoù
phaûi söûa loãi roài laïi tieáp tuïc dòch cho ñeán khi khoâng coøn moät loãi naøo nöõa.

Sau böôùc naøy chuùng ta seõ thu nhaän ñöôïc moät taäp tin coù phaàn môû roäng laø OBJ

d- Ñeå taïo moät chöông trình thöïc hieän ñöôïc, chuùng ta söû duïng trình khaùc laø

LINK.EXE

Sau böôùc naøy chuùng ta seõ thu nhaän ñöôïc moät taäp tin coù phaàn môû roäng laø EXE

e- Kieåm tra laïi chöông trình coù thöïc hieän toát khoâng baèng caùch goõ phaàn teân taäp

tin vaø nhaán ENTER.


Meïo nhoû:

o

Chuùng ta coù theå vieát nhöõng chöông trình nhoû chaïy trong trình
DEBUG töøng leänh moät ñeå hieåu roõ caùch xöû lyù töøng leänh moät sau ñoù
coù theå gheùp laïi trong moät chöông trình lôùn hôn nhaèm taïo taäp tin
maõ nguoàn nhö neâu treân
.

o

Chuùng ta coù theå thöïc hieän caùc böôùc treân tuaàn töï moät caùch töï ñoäng
neáu söû duïng taäp tin boù leänh vôùi phaàn môû roäng laø BAT


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 26 -


Cuõng caàn neân bieát raèng khi moät chöông trình thöôøng truù trong boä nhôù, DOS seõ

daønh 256 byte cho phaàn baét ñaàu PSP (Program Segment Prefix). PSP giöõ toaøn boä
caùc thoâng tin cuûa chöông trình. DS vaø ES giöõ ñòa chæ cuûa PSP tröôùc khi thöïc hieän
chöông trình. Nhö vaäy DS khoâng giöõ ñòa chæ cuûa phaân ñoaïn döõ lieäu. Ñeå giaûi quyeát
vaán ñeà naøy neáu coù söû duïng ñòa chæ phaân ñoaïn döõ lieäu ntrong chöông trình thì phaøi söû
duïng theâm 2 doøng leänh sau:

MOV

AX,@DATA

MOV

DS,AX


Ví du: Vieát moät chöông trình vôùi teân taäp tin laø CHAO.ASM duøng phaàn meàm

soaïn thaûo vaên baûn ASCII baát kyø


.MODEL SMALL
.DATA
MSG

DB

'Chao cac ban!$'

.STACK

100h

.CODE
MAIN

PROC

MOV

AX,@DATA

MOV

DS,AX

LEA

DX,MSG

MOV

AH,9

;Hieän

thoâng

baùo

INT

21h

MOV

AH,4Ch

;Döøngchöông

trình

INT

21h

MAIN

ENDP

END

MAIN


Sau khi ghi taäp tin vaøo ñóa, thöïc hieän caùc böôùc sau:

MASM

CHAO;

LINK

CHAO;

Sau ñoù ñeå thöïc hieän chöông trình, goõ CHAO ↵


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 27 -

CHÖÔNG 4: PHÖÔNG PHAÙP LAÄP TRÌNH

I. TOÅNG QUAN:


Laäp trình baèng hôïp ngöõ cuõng gioáng nhö raát nhieàu ngoân ngöõ laäp trình khaùc

khoâng khoù nhöng caàn phaûi toå chöùc toát. Thöôøng chuùng ta thaáy caùc chöông trình ñöa ra
thaät khoù ñoïc vaø khoâng tuaân theo luaät leä naøo caû, moãi laäp trình vieân laøm theo kieåu cuûa
hoï vaø keát quaû laø chöông trình chæ coù theå hieåu ñöôïc bôûi chæ chính taùc giaû cuûa noù maø
thoâi


Coù raát nhieàu phöông phaùp ñöôïc ñöa ra ngoõ haàu taïo ra moät soá qui taéc ñeå laäp

trình. Trong soá caùc phöông phaùp naøy, coù moät phöông phaùp baét chöôùc caùch laäp trình
baèng ngoân ngöõ caáp cao nhö C, Pascal trong ñoù coù nhieàu leänh CHUAÅN cho pheùp laäp
trình ñeán 90% vaán ñeà:


IF . . . THEN . . . ELSE

CASE . . . OF

FOR

WHILE . . .

REPEAT . . .

Coù theå thaáy raèng caùc leänh hôïp ngöõ coù chöùc naêng cuûa:

. IF laëp laïi nhôø nhaõn IF1, THEN1, ELSE1, ENDIF1; leänh IF tieáp theo nhôø IF2,

THEN2, ELSE2, ENDIF2,...;


. FOR seõ laëp laïi nhôø nhaõn FOR1.


II. CAÙC LEÄNH LIEÂN QUAN ÑEÁN REÕ NHAÙNH:

CMP ñích,

nguoàn

TEST ñích,

nguoàn


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 28 -


Leänh so saùnh CMP thöïc hieän gioáng pheùp tröø SUB nhöng keát quaû laïi khoâng giöõ

laïi, nghóa laø toaùn haïn nguoàn vaø ñích ñeàu khoâng bò aûnh höôûng. Nhöõng bit trong thanh
ghi traïng thaùi ñeàu bò taùc ñoäng nhö khi thöïc hieän pheùp tröø. Leänh naøy thöôøng ñöôïc söû
duïng ñeå tìm ra moái quan heä giöõa hai toaùn haïng (so saùnh).


Leänh TEST thöïc hieän gioáng pheùp VAØ logic (AND) nhöng keát quaû khoâng giöõ

laïi. Ñieàu naøy coù nghóa laø toaùn haïng ñích vaø nguoàn khoâng ñoåi chæ coù caùc bit trong
thanh ghi traïng thaùi seõ thay ñoåi. Chuùng chuû yeáu söû duïng ñeå xaùc ñònh laø 1 bit naøo ñoù
coù giaù trò laø 1 hoaëc laø 0 .

1. Caùc leänh reõ nhaùnh coù ñieàu kieän:


Nhöõng leänh reõ nhaùnh coù ñieàu kieän ñeàu thöïc hieän sau nhöõng leänh taùc ñoäng ñeán

thanh ghi traïng thaùi. Nhöõng leänh ñeán sau reõ nhaùnh seõ naèm trong khoaûng töø -128 ñeán
+127 byte tính töø leänh keá tieáp leänh reõ nhaùnh. Do vaäy ñeå môû roäng phaïm vi reõ nhaùnh
coù ñieàu kieän, chuùng ta coù theå keát hôïp vôùi leänh reõ nhaùnh khoâng ñieàu kieän.

Jcc

ñích

Nhöõng leänh reõ nhaùnh coù ñieàu kieän naøy luoân kieåm tra caùc bit trong thanh ghi

traïng thaùi ñaõ ñöôïc xaùc ñònh nhôø leänh tröôùc ñoù. Neáu ñieàu kieän ñuùng, böôùc nhaûy seõ
thöïc hieän ñeán ñòa chæ ñích. Trình dòch hôïp ngöõ seõ tính toaùn khoaûng caùch ñeán ñích ñeå
xaùc ñònh soá byte khoaûng caùch töø leänh keá tieáp sau reõ nhaùnh coù ñieàu kieän ñeán ñích.





Ñieàu kieän khoâng daáu

Ñieàu kieän

Moâ taû

Kieåm tra

A/NBE

Treân / Khoâng döôùi laãn baèng

CF ou ZF = 0

AE/NB

Treân hoaëc baèng/ Khoâng döôùi

CF=0

B/NAE

Döôùi / Khoâng treân laãn baèng

CF=1

BE/NA

Döôùi hoaëc baèng / Khoâng treân

CF ou ZF = 1

C

Nhôù baèng 1

CF=1

NC

Nhôù baèng 0

CF=0

P/PE Chaún

PF=1

NP/PO Leõ

PF=0


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 29 -

Ñieàu kieän coù daáu

Ñieàu kieän

Moâ taû

Kieåm tra

G/NLE

Lôùn hôn / khoâng nhoû hôn laãn baèng

((SF xor OF) or ZF)= 0

GE/NL

Lôùn hôn hoaëc baèng / khoâng nhoû hôn

(SF xor OF)=0

L/NGE

Nhoû hôn / khoâng lôùn hôn laãn baèng

(SF xor OF)=1

LE/NG

Nhoû hôn hoaëc baèng / Khoâng lôùn hôn

((SF xor OF) or ZF)= 1

O

Traøn baèng 1

OF=1

NO

Traøn baèng 0

OF=0

S Daáu

döông

SF=1

NS Daáu

aâm

SF=0


Ñieàu kieän zeùro

Ñieàu kieän

Moâ taû

Condition testeùe

E/Z

Baèng / zeùro

ZF = 1

NE/NZ

Khoâng baèng / Khoâng zeùro

ZF = 0

2. Caùc leänh reõ nhaùnh khoâng ñieàu kieän:


Ñoù laø nhöõng leänh nhaûy böôùc ñeán moät vò trí naøo ñoù trong chöông trình.
Leänh nhaûy khoâng ñieàu kieän coù daïng:

JMP

ñích

Leänh naøy coù theå nhaûy ñeán baát kyø moät vò trí naøo trong chöông trình.

III. CAÙC CAÁU TRUÙC ÑIEÀU KHIEÅN:

1- Löïa choïn
a. IF THEN

Ñieàu kieän

Leänh 1

Sai



Ñuùng






Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 30 -



Neáu <ñieàu kieän> Thì <leänh 1>

Ví duï:

Neáu AX > 0 Thì AX -AX

Hôïp

ngöõ:

. . .

CMP

AX , 0

JNG

END_IF

NEG

AX

. . .

END_IF:

b. IF THEN ELSE


Nguyeãn Höõu Loäc

Khoa Vaät Lyù









Neáu <ñieàu kieän> Thì <Leänh 1>

Coøn laïi <leänh 2>

Leänh 2

Leänh 1

Ñuùng

ñieàu kieän

Sai

Ví duï: Neáu AL <= BL Thì hieän BL

Coøn

laïi

hieän

AL

Hôïp

ngöõ:

. . .

CMP

AL , BL

JNBE

EL_SE

MOV

DL , BL

JMP

HIEN

EL_SE:

MOV

DL,

AL

HIEN:

MOV

AH,2

background image

Hôïp Ngöõ

- 31 -


INT

21h

. . .

END_IF:


c. CASE OF

Bieåu thöùc

choïn






Nguyeãn Höõu Loäc

Khoa Vaät Lyù



Leänh 1

Leänh 2

Leänh 3

Leänh n

. . .

Tröôøng hôïp

BX=1: AX <- 1

BX=2: AX <- 5

BX=3: AX <- 10

Coøn laïi
AX

<-

0

HetTruonghop
Hôïp ngöõ

Case1:
Case1C1:
CMP

BX,

1

JNZ

Case1C2

MOV

AX,

1

JMP

EndCase1

Case1C2:
CMP

BX,

2

JNZ

Case1C3

MOV

AX,

5

JMP

EndCase1

Case1C3:
CMP

BX,

3

JNZ

Other1

MOV

AX,

10

background image

Hôïp Ngöõ

- 32 -

JMP

EndCase1

Other1:
MOV

AX,

0

ENDCase1:


d. Caùc ñieàu kieän phöùc:

Daïng:

ñieàu kieän 1 VAØ ñieàu kieän 2

ñieàu kieän 1 HOAËC ñieàu kieän 2


* Ñieàu kieän VAØ:

Ñieàu kieän phöùc (VA)Ø ñuùng chæ khi caû 2 ñieàu kieän ñeàu ñuùng. Ngöôïc laïi, neáu

moät trong caùc tröôøng hôïp laø sai thì ñieàu kieän phöùc (VAØ) laø sai.


Ví duï: Ñoïc moät kyù töï. Neáu laø chöõ caùi HOA thì seõ cho hieän leân.


Ñoïc moät kyù töï
Neáu ( kyù töï >='A' ) VAØ (kyù töï <= 'Z' )
Thì

Hieän kyù töï

HetNeu

Hôïp ngöõ
; ñoïc moät kyù töï
MOV

AH,

1

INT

21h

; Neáu ( 'A' <= kyù töï ) VAØ (kyù töï <= 'Z' )
CMP

AL,

'A'

JNAE

FSI

CMP

AL,

'Z'

JNBE

FSI

MOV

DL,AL

MOV

AH,2

INT

21h

HetNeu:

* Ñieàu kieän HOAËC


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 33 -


(Ñieàu kieän 1 HOAËC ñieàu kieän 2) laø ñuùng neáu ñieàu kieän 1 hoaëc ñieàu kieän 2

ñuùng. Ñieàu kieän phöùc seõ sai neáu caû hai ñieàu kieän ñeàu sai.


Ví duï: Ñoïc moät kyù töï. Neáu kyù töï laø 'C' hoaëc 'c', cho hieän kyù töï aáy. Coøn

khoâng thì döøng chöông trình.


Ñoïc moät kyù töï

Neáu (kyù töï='C') hoaëc (kyù töï='c')

Thì

hieän kyù töï


Coøn khoâng thì döøng chöông trình

Hôïp ngöõ:
; Ñoïc moät kyù töï
MOV

AH,1

INT

21h

; Neáu (kyù töï='C') hoaëc (kyù töï='c')

CMP

AL,

'C'

JE

THI

CMP

AL,

'c'

JE

THI

JMP

CONKHONG

THI:
MOV

AH,2

MOV

DL,AL

INT

21h

JMP

HET

CONKHONG:
MOV

AH,4Ch

INT

21h

HET:

2- Voøng laëp:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 34 -

Hôïp ngöõ coù nhöõng leänh ñaëc bieät cho pheùp taïo caùc voøng laëp trong moät

chöông trình.


LOOP ñích

Leänh LOOP laøm giaûm noäi dung cuûa thanh ghi CX moät ñôn vò vaø nhaûy ñeán

ñòa chæ ñích neáu noäi dung CX khoâng baèng 0. Neáu thanh ghi CX baèng 0, voøng laëp
keát thuùc vaø leänh keá tieáp leänh LOOP seõ ñöôïc thöïc hieän. Ñòa chæ ñích caàn naèm trong
khoaûng -128 vaø 127 byte. Leänh naøy khoâng taùc ñoäng ñeán caùc bit cuûa thanh ghi
traïng thaùi


JCXZ ñích

Leänh JCXZ thöïc hieän nhaûy böôùc ñeán ñòa chæ ñích neáu thanh ghi CX baèng 0.

Leänh naøy thöôøng söû duïng ôû ñaàu moät voøng laëp.

a - Voøng laëp FOR:

Soá voøng laëp laø coá ñònh.
CHO soá ban ñaàu THÖÏC HIEÄN leänh
KEÁT THUÙC

Leänh thöïc hieän

Ñeám <- Ñeám -1

Ñeám=0?

Xaùc ñònh soá voøng laëp














Sai

Ñuùng



; Ñaët CX = soá voøng laëp


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 35 -

Dau:
;leänh

LOOP

Dau


Ví duï:

FOR 80 DO hieän '*'


Hôïp ngöõ
MOV

CX,80

MOV

AH,2

MOV

DL,'*'

Dau:
INT

21h

LOOP

Dau

b - Voøng laëp WHILE

Voøng laëp naøy thöïc hieän theo moät ñieàu kieän.

KHI ñieàu kieän THÖÏC HIEÄN
leänh
KEÁT THUÙC


Ñieàu kieän

leänh

Ñuùng








Sai





Ví duï:

BX <-- 5


Khi BX>0 thöïc hieän BX <-- BX -1


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 36 -


Keát

thuùc


Hôïp ngöõ
MOV

BX,

5

While1:
CMP

BX,0

JLE

EndWhile1

DEC

BX

JMP

While1

EndWhile1:


c - Voøng laëp REPEAT... UNTIL



Nguyeãn Höõu Loäc

Khoa Vaät Lyù










Ví duï:

BX <-- 10

leänh

Ñieàu kieän

Sai

Ñuùng

Laëp

laïi

BX < BX-1

Ñeán khi BX <= 0


Hôïp ngöõ

MOV

BX,10

Repeat1:
DEC

BX

CMP

BX,

0

JNLE

Repeat1

EndRepeat1:

background image

Hôïp Ngöõ

- 37 -


Thöïc hieän laäp trình theo trình töï nhö treân ñoøi hoûi moät söï caàn maãn naøo ñoù

nhöng laïi giuùp laäp trình vieân thaáy ñöôïc moïi thöù raát roõ raøng. Chính vì vaäy vieäc laäp
trình trôû neân ñôn giaûn hôn raát nhieàu. Moãi laäp trình vieân coù theå coù moät phöông
phaùp laäp trình song caàn neân bieát raèng neáu chuùng ta laøm vieäc theo nhoùm hoaëc moät
chöông trình ñöôc phaân thaønh nhieàu moñun thì vieäc tuaân theo nhöõng qui öôùc laø
cöïc kyø caàn thieát: ví duï nhö taát caû caùc nhaõn ñaët ra phaûi gôïi nhôù vaø tuaân theo qui
öôùc giuùp cho nhöõng ngöôøi khaùc deã hieåu vaø söû duïng vieát caùc moñun chung.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 38 -

CHÖÔNG 5: NGAÊN XEÁP VAØ THUÛ TUÏC

I. NGAÊN XEÁP:

Ngaên xeáp laø nôi löu tröõ döõ lieäu töùc thôøi trong boä nhôù. Dung löôïng boä nhôù

daønh cho ngaên xeáp ñöôïc laäp trình vieân ñaët ra trong chöông trình nguoàn.


Nguyeân taéc hoaït ñoäng cuûa ngaên xeáp laø döõ lieäu vaøo sau thì ra tröôùc goïi laø

ngaên xeáp LIFO (Last In, First Out). Döõ lieäu ñöa vaøo trong ngaên xeáp choàng leân
nhau do vaäy ngöôøi ta coøn goïi laø xeáp choàng vaø thanh ghi SP (Stack pointer) ñöôïc
söû duïng nhö con troû ngaên xeáp xaùc ñònh vò trí cuoái trong ngaên.


Ngaên xeáp löu giöõ noäi dung caùc thanh ghi hoaëc caùc bieán.
Leänh ñeå ñöa döõ lieäu vaøo ngaên xeáp laø:

PUSH nguoàn

Leänh PUSH giaûm giaù trò cuûa thanh ghi xuoáng 2 ñôn vò neáu nguoàn laø thanh

ghi 16 bit vaø luùc aáy vò trí ñænh cuûa ngaên xeáp seõ ghi trong con troû ngaên xeáp SP.


Leänh ñeå laáy döõ lieäu ra khoûi ngaên xeáp laø:

POP ñích

Leänh POP traû laïi noäi dung löu giöõ trong ngaên xeáp cho caùc thanh ghi. Noäi

dung thanh ghi SP taêng leân 2 ñôn vò neáu thanh ghi nhaän döõ lieäu 16 bit.

II. THUÛ TUÏC:

Caùc thuû tuïc (hoaëc chöông trình con) bao goàm moät daõy caùc doøng leänh noái

tieáp nhau ñeå thöïc hieän moät coâng vieäc ñaõ xaùc ñònh. Coâng vieäc naøy coù theå ñöôïc goïi
ñeán nhieàu laàn trong moät chöông trình. Thay vì cöù vieát laäp laïi ñoaïn leänh naøy trong
chöông trình, laäp trình vieân ñaët taát caû caùc doøng leänh naøy vaøo moät khoái goïi laø thuû
tuïc. Sau ñoù khi caàn laäp trình vieân cöù goïi thuû tuïc naøy baát cöù luùc naøo tuøy thích.

Caùc thuû tuïc ñöôïc chia ra laøm hai loaïi:

- Caùc thuû tuïc NEAR ñöôïc khai baùo trong cuøng phaân ñoaïn maõ cuûa chöông

trình goïi. Ñòa chæ trôû veà ghi trong ngaên xeáp chæ laø IP (maõ 16 bit).


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 39 -


- Caùc thuû tuïc FAR söû duïng phaân ñoaïn maõ khaùc vôùi phaân ñoaïn maõ cuûa

chöông trình goïi. Ñòa chæ trôû veà ghi trong ngaên xeáp laø CS vaø IP (maõ 16 bit)


Caùc thuû tuïc ñöôïc goïi baèng leänh CALL. Leänh naøy giöõ ñòa chæ trôû veà cuûa

chöông trình trong ngaên xeáp vaø giaûm giaù trò con troû ngaên xeáp 2 ñôn vò neáu thuû tuïc
laø NEAR. Sau ñoù nhaûy böôùc ñeán vò trí ñaõ xaùc ñònh. Con troû ngaên xeáp seõ giaûm 4
neáu thuû tuïc laø FAR.


Moät thuû tuïc ñöôïc söû duïng vôùi caùc ñònh höôùng bieân dòch PROC...ENDP. Ñeå

coù theå trôû veà chöông trình chính, cuoái moãi thuû tuïc caàn coù theâm leänh RET. Ñieàu
naøy giuùp laáy laïi ñòa chæ ñaõ ghi vaøo trong ngaên xeáp vaø taêng giaù trò con troû ngaên xeáp
leân 2 neáu thuû tuïc laø NEAR vaø leân 4 neáu thuû tuïc laø FAR.


Caáu truùc chung cuûa moät thuû tuïc nhö sau:

Teân

PROC

NEAR (hoaëc FAR)

;

; thaân thuû tuïc

;
;
RET
Teân ENDP

Chöông trình chính

thuû tuïc

TEMPO

PROC

CALL TEMPO

CALL TEMPO

RET

TEMPO

ENDP

Goïi thuû tuïc



Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 40 -

III. SÖÛ DUÏNG PTR VAØ LABEL:

a- Neáu moät ñòa chæ ví duï [BX] xuaát hieän nhö moät soá haïng, 8088 phaûi bieát

choïn xöû lyù 1 hoaëc 2 byte taïi ñòa chæ ñoù, ñeå cho roõ raøng caàn phaûi duøng BYTE PTR
hoaëc WORD PTR


Ví duï 1:

MOV

[BX],1


nghóa

laø


MOV

BYTE

PTR

[BX],

1

hoaëc
MOV

WORD

PTR

[BX],

1


Ví duï 2:
.DATA

....

DOLLARS

DB

1Ah

CENTS

DB

52h

....

.CODE

...

MOV

AX,WORD

PTR

DOLLARS

; naïp 521A ---> AX
b- Ngöôøi ta coøn söû duïng ñònh höôùng bieân dòch LABEL ñeå ñònh nghóa laïi moät

bieán theo loaïi khaùc


Daïng: teân

LABEL

loaïi


Ví duï 1:

WORD_ARR

LABEL

WORD

BYTE_ARR

DB

100

DUP

(0)


WORD_ARR ñònh nghóa moät maûng 50 töø vaø BYTE_ARR ñònh nghóa moät

maûng 100 byte.


Ví duï 2:

.DATA

...

MONEY

LABEL

WORD

DOLLARS

DB

1Ah

CENTS

DB

52h


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 41 -

...

.CODE

...

MOV

AX,

MONEY

Ñieàu naøy gioáng nhö

MOV

AL,

DOLLARS

MOV

AH,CENTS

IV. VAØI CHÖÔNG TRÌNH ÖÙNG DUÏNG:

1. Hieän soá thaäp phaân:


Ñeå hieän moät soá leân maøn hình chuùng ta caàn phaûi taïo moät thuû tuïc. Ñeå laøm

vieäc naøy chuùng ta caàn phaûi phaân tích soá sau ñoù hieän tuaàn töï töøng chöõ soá moät. Do
ñoù chuùng ta caàn coù 2 thuû tuïc:

Hieän moät chöõ soá;
Hieän moät soá.

a- Hieän moät chöõ soá:
Haøm 2 ngaét 21h duøng ñeå hieän moät kyù töï leân maøn hình trong ñoù maõ ASCII

cuûa kyù töï ñöôïc ñöa vaøo DL, ví vaäy chuùng ta caàn chuyeån chöõ soá sang maõ ASCII
baèng caùch coâng theâm vaøo soá 48:


Maõ ASCII

Kyù töï

48

(30h)

0

49

(31h)

1

50

(32h)

2

...

Hienchuso PROC

PUSH

AX

;giöõAX

PUSH

DX

ADD

AL, 48 ;Chöõ soá 0...9

MOV

DL,

AL

MOV

AH, 2 ;Hieän kyù töï

INT

21h

POP

DX

POP

AX

RET
Hienchuso ENDP


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 42 -


b- Hieän soá:
Baây giôø chuùng ta phaân tích soá cho hieän. Chuùng ta söû duïng pheùp chia cho 10,

ñaët soá bò chia vaøo AX (neáu nhö soá naøy töông öùng vôùi moät töø). Thöông soá seõ naèm
trong AL vaø soá dö trong AH. Neáu chia 1 soá laø töø ñoâi (double word) chuùng ta ñaët
soá ñoù trong DX:AX vaø nhö vaäy thöông soá seõ ñaët trong AX vaø soá dö trong DX.
Nhö vaäy,

8765 DIV

10 = 876

dö 5

876 DIV

10 = 87 dö 6

87 DIV

10 = 8 dö 7

8

DIV

10 = 0 dö 8


Chuùng ta thaáy caùc soá dö laø nhöõng chöõ soá taïo thaønh keát quaû baèng soá tuy vaäy

chuùng ta khoâng theå cho hieän caùc soá dö ngay sau khi chia vì nhö vaäy seõ ñaûo soá
(5678), chuùng ta caàn phaûi naïp caùc chöõ soá tuaàn töï vaøo ngaên xeáp sau ñoù laáy ra vaø
cho hieän leân maøn hình thì môùi ñaùp öùng ñöôïc yeâu caàu.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 43 -

HienSoTP PROC

PUSH BX

PUSH CX

MOV

BX, 10

; soá chia

;

taùch soá vaø ñaët nhöõng chöõ soá theo thöù töï phuø hôïp trong ngaên xeáp

MOV

CX,0

Tach:

MOV

DX,0

DIV

BX

PUSH DX

INC

CX

CMP

AX,

0

JNZ

Tach

Hienlen:

POP

AX

CALL Hienchuso

LOOP Hienlen

POP CX

POP BX

RET

HienSoTP ENDP

c- Caùc soá aâm:

Thuû tuïc treân khoâng duøng ñeå hieän caùc soá coù daáu. Neân nhôù raèng

neáu moät soá coù daáu thì bit lôùn nhaát laø bit daáu, caàn phaûi kieåm tra xem
neáu soá laø soá aâm thì phaûi theâm daáu '-' ñoàng thôøi phaûi tính buø 2 cho soá
ñoù


HienAscii PROC

PUSH AX

PUSH DX

MOV DL,AL

MOV AH,

2


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 44 -

INT

21h

POP DX

POP AX

RET

HienAscii ENDP

Ñeå kieåm tra xem moät soá aâm chuùng ta coù theå coäng theâm soá 0 roài

kieåm tra bit chæ baùo SF ñeå bieát daáu cuûa keát quaû:

HienDauTP PROC

PUSH AX

PUSHF

ADD AX,

0

JNS Khongdau

PUSH AX

MOV AL,'-'

CALL HienAscii

POP AX

NEG AX

Khongdau:

CALL HienSoTP

POPF

POP AX

RET

HienDauTP ENDP

2. Hieän soá nhò phaân vaø thaäp luïc phaân


a- Hieän soá nhò phaân:

Trong moät soá tröôøng hôïp, chuùng ta laïi muoán bieåu dieãn moät soá nhò

phaân. Chuùng ta phaûi laáy töøng bit ra sau ñoù cho hieän leân maøn hình.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 45 -


HienNP PROC

PUSHF

PUSH BX

PUSH CX

MOV

BL,AL

MOV

CX,8

Hienbit:

RCL

BL,1

MOV

AL,0

ADC

AL,30h

CALL

HienAscii

LOOP

Hienbit

POP

CX

POP

BX

POPF
RET
HienNP ENDP

b- Hieän Thaäp Luïc Phaân

Nhöõng chöõ soá thaäp luïc phaân thöôøng ñöôïc söû duïng trong caùc

chöông trình hôïp ngöõ, trong thöïc teá ñoâi khi caàn thieát phaûi hieän soá döôùi
daïng naøy.


HienTLP PROC

PUSH

CX

PUSH

DX

MOV

DH,DL ; DL laø moät kyù töï

MOV

CX,4

SHR

DL,CL

CALL

HienChusoTLP


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 46 -

MOV

DL,DH

AND

DL,0FH

CALL

HienChuSoTLP

POP

DX

POP

CX

RET
HienTLP ENDP
HienChuSoTLP PROC
PUSH

DX

CMP

DL,10

JAE

ChuSoTLP

ADD

DL,'0'

JMP

HienChuSo

ChuSoTLP:
ADD

DL,'A'-10

HienChuSo:
MOV

AL,

DL

CALL

HienAscii

POP

DX

RET
HienChuSoTLP ENDP

3. Ñoïc töø baøn phím

a- Ñoïc moät chuoãi kyù töï:

Ñeå ñoïc moät chuoãi kyù töï, chuùng ta goïi ngaét 21h, dòch vuï 0Ah cho

pheùp ñaët caùc kyù töï goõ treân baøn phím vaøo vuøng ñeäm DS:DX (buffer).
Haøm naøy keát thuùc khi nhaán RETURN, trong vuøng ñeäm goàm caùc thoâng
tin sau:


Byte Noäi

dung

0

Giaù trò qui ñònh soá toái ña caùc kyù töï coù theå ñoïc, giaù


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 47 -

trò naøy phaûi ñöôïc ñaët tröôùc khi goïi haøm

1

Soá kyù töï thöïc teá ñoïc vaøo (Khoâng tính RETURN),
giaù trò naøy ñöôïc ñaët khi haøm thöïc hieän.

2

Töø vò trí naøy chuùng ta thaáy caùc kyù töï ñoïc vaøo.


Phaûi ñònh nghóa moät vuøng döõ lieäu (vuøng ñeäm) trong chöông trình

ñeåõ giöõ caùc kyù töï.


DocChuoi PROC
PUSH

BX

PUSH

CX

MOV

BX,DX ;

Offset cuûa vuøng ñeäm

PUSH [BX];

giöõ 2byteñaàu cuûa vuøngñeäm

MOV

[BX],

AL

MOV

AH,

0Ah

INT

21h

MOV

AL,[BX+1]

POP

CX

MOV

[BX],CH

POP

CX

POP

BX

RET
DocChuoi ENDP

Neáu chuùng ta taïo ra moät chöông trình nhoû:

.MODEL SMALL
.STACK 100h
.DATA

VungDem DB 255 DUP (?) ; Vuøng giöõ kyù töï ñoïc

Thongbao DB 'Kyù töï ñoïc ', 13,10, '$'

.CODE
Main

PROC

MOV

AX,@Data


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 48 -

MOV DS,

AX

MOV

DX, OFFSET VungDem

MOV

AL, 5 ; Ñoïc toái ña 5 kyù töï

CALL DocChuoi
MOV AH,0
CALL HienSoTP
MOV

DX, Offset Thongbao

CALL

Hienchuoi

MOV

AH,4Ch

INT

21h

Main

ENDP


Hienchuoi PROC
PUSH

AX

MOV

AH,

09h

INT

21h

POP

AX

RET
Hienchuoi ENDP
....

END

MAIN

Baây giôø, chuùng ta thöïc hieän chöông trình, neáu chuùng ta goõ vaøo

treân 5 kyù töï, ngaét 21h gaây ra 1 tieáng BÍP; chuùng ta coù theå söû duïng
phím BACKSPACE ñeå xoaù 1 kyù töï trong quaù trình goõù.

b- Ñoïc moät soá thaäp phaân


Ñeå ñoïc moät soá thaäp phaân, chuùng ta seõ söû duïng thuû tuïc

Docchuoi vaø sau ñoù chuyeån chuoãi thaønh soá.


NB
Soá <-- 0

Laëp Chöõ soá <-- 1 kyù töï cuûa chuoãi


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 49 -

Soá <-- Soá * 10 + chöõ soá

NB <-- NB-1


Neáu NB > 0 ñeán Laëp


Ví duï, ñeå chuyeån '827', ta coù
Soá <--0
Chöõ soá <-- 8
Soá

<-- Soá *10 + chöõ soá = 0*10 +8 = 8

Chöõ soá <-- 2
Soá

<-- Soá * 10 + chöõ soá = 8*10 +2 = 82

Chöõ soá <-- 7
Soá

<-- Soá * 10 + chöõ soá = 82*10 +7 = 827


Giatri PROC
PUSH BX
PUSH

CX

PUSH

DX

PUSH

SI

MOV

AX,0

MOV BX,DX

;

Bx chæ ñeán ñaàu vuøng ñeäm

MOV

CX,[DX+1]

MOV

SI,

2

Laplai:
MOV

DX,10

MUL

DX

MOV

DL,

[BX+SI]

INC

SI

SUB

DL,48

MOV

DH,0

ADD

AX,

DX

LOOP

Laplai

POP

SI

POP

DX


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 50 -

POP

CX

POP

BX

RET
Giatri ENDP

Chuù yù: thuû tuïc treân khoâng kieåm tra xem daõy kyù töï coù trong

vuøng ñeäm coù ñuùng nhö yeâu caàu khoâng? nghóa laø taát caû ñeàu laø chöõ soá
coù giaù trò töø 0 ñeán 9. Ngoaøi ra trong thuû tuïc naøy cuõng khoâng giaûi
quyeát ñöôïc xem giaù trò cuûa soá coù vöôït quaù 65.535: caàn phaûi kieåm
tra xem pheùp nhaân cuoái cuøng coù taïo ra nhôù khoâng? nghóa laø DX coù
giaù trò khaùc 0 )


DocSoTP PROC
PUSH DX

MOV

AL,

5

MOV

DX,

Offset

temp1

CALL DocChuoi
CALL Giatri

POP

DX

RET
DocSoTP ENDP











Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 51 -

CHÖÔNG 6: MOÑUN CHÖÔNG TRÌNH &

CAÙC KIEÅU ÑÒNH VÒ ÑÒA CHÆ

I. MOÑUN CHÖÔNG TRÌNH


Ñoái vôùi caùc chöông trình lôùn vôùi raát nhieàu thuû tuïc thì thaät tieän

lôïi neáu chuùng ta ñaët caùc thuû tuïc trong caùc file rieâng bieät. Coù 2
nguyeân nhaân chuû yeáu ñeå laøm ñieàu ñoù:


. Caùc thuû tuïc coù theå ñöôïc vieát, hôïp dòch vaø kieåm tra rieâng bieät

baèng caùc laäp trình vieân khaùc nhau


. Khi caùc thuû tuïc ñöôïc hôïp dòch taùch bieät, chuùng coù theå söû duïng

laïi caùc teân cho caùc bieán hay caùc nhaõn leänh. Sôõ dó coù ñöôïc ñieàu ñoù laø
vì trình bieân dòch cho pheùp caùc teân mang tính chaát cuïc boä ñoái vôùi
moãi file vaø noù seõ khoâng xung ñoät ñoái vôùi caùc teân gioáng nhö vaäy
trong moät file khaùc.

1. Ñònh höôùng bieân dòch extrn


Trong khi bieân dòch moät moñun, trình bieân dòch phaûi ñöôïc

thoâng baùo nhöõng teân ñöôïc duøng trong moñun hieän thôøi nhöng ñaõ
khai baùo trong caùc mod8un khaùc, neáu khoâng chuùng seõ bò coi laø caùc
teân chöa khai baùo.


EXTRN teân:loaïi [,teân:loaïi]

baùo cho trình dòch hôïp ngöõ coù moät teân ngoaïi truù nghóa laø coù

moät teân ñaõ ñònh nghóa trong moät moñun khaùc. Loaïi töông öùng phaûi
gioáng nhö loaïi ñaõ ñònh nghóa trong moñun khaùc. Nhöõng loaïi naøy laø:
NEAR, FAR, PROC, BYTE, WORD...



Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 52 -

2. Ñònh höôùng bieân dòch public


Moät thuû tuïc hay bieán phaûi ñöôïc khai baùo vôùi ñònh höôùng bieân

dòch PUBLIC neáu noù ñöôïc söû duïng trong caùc moñun khaùc nhau


PUBLIC teân[, teân]

ÔÛ ñaây 'teân' laø moät bieán, moät nhaõn trong moñun giöõ ñònh höôùng

bieân dòch PUBLIC


ÖÙng duïngï:

Taïo moät chöông trình goàm 2 thuû tuïc ñeå noái chuoãi, moãi thuû tuïc

naèm trong 1 taäp tin khaùc nhau.



Taäp tin thöù 1 coù teân MAIN.ASM
Noäi dung laø

EXTRN NoiChuoi:NEAR
public ChuoiCuoi
.MODEL SMALL
.STACK 200H
.DATA
Chuoi1 DB 'Chao ',0
Chuoi2 DB 'cac ban ',0dh,0ah,'$',0
Chuoicuoi DB 50 DUP (?)


.CODE
ProgramStart PROC
mov ax,@data
mov ds,ax


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 53 -

mov ax,OFFSET Chuoi1
mov bx,OFFSET Chuoi2
call NoiChuoi

; Noái 2 chuoãi laïi vôùi nhau

mov ah,9
mov dx,OFFSET ChuoiCuoi
int 21h

; Hieän chuoãi

mov ah,4ch
int 21h
ProgramStart ENDP

END ProgramStart


Taäp tin thöù 2 coù teân SUB.ASM coù noäi dung laø

EXTRN ChuoiCuoi:byte
PUBLIC NoiChuoi
.MODEL SMALL
.CODE
NoiChuoi PROC
cld ; Chuoãi taêng daàn
mov di,SEG ChuoiCuoi
mov es,di
mov di,OFFSET ChuoiCuoi ;ES:DI chæ ñeán ñích
mov si,ax ; Chuoãi ñaàu ñöôïc cheùp ñi
LapChuoi1:
lodsb ; nhaän trong chuoãi 1 kyù töï
and al,al ; baèng 0?
jz Chuoitiep ;ñuùng thì chuyeån sang chuoåi tieáp
stosb ; löu 1 kyù töï vaøo chuoãi
jmp LapChuoi1
Chuoitiep:
mov si,bx ; Cheùp chuoãi thöù hai
LapChuoi2:
lodsb ; laáy 1 kyù töï töø chuoãi 2


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 54 -

stosb ; giöõ kyù töï cuûa chuoãi 2 vaøo
; (keå caû soá 0 neáu coù)
and al,al ; baèng 0?
jnz LapChuoi2 ; khoâng, naïp kyù töï khaùc
ret ; xong
NoiChuoi ENDP

END

3. Laäp thö vieän - taïo vó leänh (macro)

Thay vì lieân keát caùc moñun ñoái töôïng rieâng bieät ñeå taïo thaønh

moät file .EXE , chuùng ta coù theå taïo ra moät file thö vieän cuûa caùc
moñun ñoái töôïng chöùa thuû tuïc. Khi thö vieän ñöôïc xaùc ñònh trong
quaù trình lieân keát, chöông trình LINK laáy ra baát kyø thuû tuïc naøo maø
chöông trình caàn thö vieän vaø taïo ra file EXE.


Chuùng ta coù daïng

Teân MACRO {thoâng soá [ ,thoâng soá] }

Leänh

ENDM

Taïo taäp tin vaên baûn ASCII laø thö vieän

Ví duï:

THUVIEN.MAC

Thoat MACRO

MOV

AH,4Ch

INT

21h

ENDM


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 55 -

HienCh MACRO Chuoi1

MOV

AH,9

LEA

DX,

Chuoi1

INT

21h

ENDM
Dockt MACRO

MOV

AH,1

INT

21h

ENDM
HienKt MACRO

MOV

AH,2

INT

21H

ENDM

ÖÙng duïng: Hieän soá nhò phaân

EXTRN HienSoNP: NEAR
.MODEL SMALL
.STACK 100H
.DATA

Thongbao1 DB 'Nhaäp vaøo moät kyù töï: $'

Thongbao2 DB 'Maõ ASCII soá nhò phaân: $'

.CODE
INCLUDE THUVIEN.MAC
Batdau PROC

MOV

AX,

@Data

MOV

DS,

AX

HienCh Thongbao1
DocKt
HienCh Thongbao2

Call

HienSoNP

Thoat
Batdau ENDP
END

Batdau


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 56 -

II. CAÙC KIEÅU ÑÒNH VÒ ÑÒA CHÆ

Chuùng ta ñaõ bieát, moãi leänh ñeàu coù 2 phaàn chính:

Phaàn pheùp toaùn thöïc hieän (coäng, tröø, dòch chuyeån,...)
Phaàn döõ lieäu lieân quan. Caùc döõ lieäu naøy naèm trong caùc thanh

ghi hoaëc trong boä nhôù.


Ñeå laáy döõ lieäu trong boä nhôù, boä vi xöû lyù phaûi bieát ñòa chæ vaø soá

byte duøng cho noù.


Sau ñaây laø caùc loaïi ñònh vò ñòa chæ khaùc nhau:

1. Kieåu ñònh vò ñòa chæ töùc thôøi

Thanh ghi <--- Giaù trò töùc thôøi


Moät giaù trò töùc thôøi (coù theå laø moät haèng) seõ ñöa vaøo noäi dung

cuûa thanh ghi


Ví duï: MOV AH,12

1- Kieåu ñònh vò ñòa chæ tröïc tieáp:

Thanh ghi <-- boä nhôù(ñòa chæ tröïc tieáp)

Noäi dung cuûa moät vuøng nhôù ñöôïc ñaët teân seõ ghi vaøo trong

thanh ghi 8 bit hoaëc 16 bit phuï thuoäc vaøo loaïi döõ lieäu vaø kích thöôùc
thanh ghi, neáu 2 yeáu toá naøy khoâng baèng nhau thì trình dòch hôïp ngöõ
seõ baùo loãi.


Ví duï:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 57 -


Id1 DB 2 ; 1 byte

Id2 DW 5

; 1 word = 2 byte

......
MOV

AH,Id1

MOV

BX,Id2


3. Kieåu ñònh vò ñòa chæ neàn:

Thanh ghi <-- [BX] ñòa chæ neàn döïa treân DS


Laáy noäi dung trong vuøng boä nhôù ñòa chæ DS:[BX] ñöa vaøo

trong thanh ghi. Trong tröôøng hôïp naøy [BX] cho bieát laø laáy noäi dung
cuûa oâ nhôù coù phaàn offset cuûa ñòa chæ laø . Coù theå thöïc hieän vôùi 8 hoaëc
16 bit.


duï:

MOV

BX,8

MOV

AX,

[BX]


AX <-- noäi dung cuûa vuøng nhôù coù ñòa chæ laø DS:0008

4. Kieåu ñònh vò ñòa chæ chæ soáù:

Thanh ghi <-- [SI] hoaëc [DI] ñòa chæ chæ soá


Kieåu ñònh vò ñòa chæ naøy thöôøng duøng cho chuoãi kyù töï hay caùc

phaàn töû cuûa maõng. Thöôøng neàn laø DS.


duï:

MOV

SI,

0

MOV

AX,

[SI]


AX <-- noäi dung cuûa vuøng boä nhôù ôû ñòa chæ DS:0

5- Kieåu ñònh vò ñòa chæ neàn-chæ soá:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 58 -


Thanh ghi <-- [BX][SI] ñòa chæ neàn-chæ soá döïa treân

DS

Thanh ghi <-- [BX][DI] ñòa chæ neàn-chæ soá döïa treân DS


Loaïi ñòa chæ naøy söû duïng BX vaø, SI hoaëc DI, neàn laø DS

Ghi chuù: ngöôøi ta coù theå duøng qui öôùc sau:
Thanh

ghi

<-- [BX+SI]


duï:

MOV

BX,

2

MOV

SI,

5

MOV

AH,

[BX]

[SI]


AH <-- noäi dung cuûa oâ nhôù coù ñòa chæ laø DS:7 nghóa laø DS:5+2

6- Kieåu ñònh vò ñòa chæ neàn-dòch chuyeån:

Thanh ghi <-- döõ lieäu[BX] ñòa chæ neàn döïa treân DS

Thanh ghi <-- döõ lieäu[BX] ñòa chæ neàn döïa treân SS


Loaïi ñònh vò ñòa chæ naøy laø toå hôïp cuûa caùc loaïi treân.

Ghi chuù: Coù theå söû duïng qui öôùc sau:

Thanh ghi <-- [BX+döõ lieäu]


Ví duï:

Id1

DW

5

DUP

(?)

....


MOV

BX,2

MOV

AX,

Id1[BX]


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 59 -

AX <-- phaàn töû thöù 3 cuûa maûng Id1


7. Ñònh vò ñòa chæ chæ soá-dòch chuyeån:

Thanh ghi <-- döõ lieäu[SI]

Thanh ghi <-- döõ lieäu[DI]


Loaïi ñònh vò naøy laø toå hôïp cuûa caùc loaïi treân.

Ghi chuù: Chuùng ta coù theå söû duïng qui öôùc sau:

Thanh ghi <-- [SI+döõ lieäu]


duï:

.....

MOV

SI,4

MOV

AX,

[SI+1]


AX <-- noäi dung cuûa vuøng nhôù taïi ñòa chæ DS:4+1
8- Kieåu ñònh vò ñòa chæ neàn-chæ soá-dòch chuyeån

Thanh ghi <-- döõ lieäu[BX][SI]

Thanh ghi <-- döõ lieäu[BX][DI]

Thanh ghi <-- döõ lieäu[BP][SI]

Thanh ghi <-- döõ lieäu[BP][DI]


Loaïi ñònh vò naøy laø toå hôïp cuûa caùc loaïi treân.

Ghi chuù: Coù theå söû duïng kyù hieäu sau:

Thanh ghi <-- [BX+SI+döõ lieäu]


Ví duï:

Id1 DB 15 DUP(?)

.....

MOV

BX,5


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 60 -

MOV

SI,4

MOV

AX,

Id1[BX][SI]

AX <-- phaàn töû thöù 9 cuûa maûng Id1

III. CHÖÔNG TRÌNH ÖÙNG DUÏNG

TAÄP TIN - THÖ MUÏC

Chuùng ta tham khaûo moät soá thuû tuïc lieân quan ñeán caùc taäp tin

baèng caùc goïi ngaét 21h:

Taïo moät taäp tin;
Môû moät taäp tin;
Ñoùng moät taäp tin;
Ñoïc moät taäp tin;
Vieát vaøo moät taäp tin....

a - Caàn bieát:
. Moät soá thuû tuïc söû duïng moät töø ñeå maõ hoaù thuoäc tính cuûa taäp

tin. Caùc bit cuûa töø naøy coù yù nghóa nhö sau:

Bit

nghóa

0

Chæ

ñoïc

1

AÅn

2

Heä

thoáng

5

Löu

. Moät soá thuû tuïc söû duïng theû (handle), ñoù laø moät soá do heä ñieàu

haønh MSDOS gaùn cho moät taäp tin khi môû hoaëc taïo taäp tin, con soá
naøy seõ caàn thieát trong quaù trình ñoïc, vieát, ñoùng .v.v... taäp tin.


Handle DW ?


Chuù yù: neáu moät chöông trình xöû lyù nhieàu taäp tin thì phaûi coù

nhieàu theû, moãi theû öùng vôùi moãi taäp tin.

b - Taïo, môû, ñoùng taäp tin ñeå coù theå ghi noâi dung vaøo taäp tin.

.MODEL SMALL
.STACK 100H


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 61 -

.DATA
TBAO1 DB 'Ñöa noâi dung vaên baûn vaøo: ',13,10,'$'

NOIDUNG DB 10000 DUP(?)

TENTT DB 'A:\THUCTAP.TXT',0
SO

DW ?

LFCR DB 13,10,'$'

.CODE
INCLUDE THUVIEN.MAC
MAIN PROC
PRODATA

HIENCH

TBAO1

XOR

BX,BX

MOV

AH,1 ;

LAP1:

INT

21H

;

CMP

AL,1AH ; CTRL+Z

JE

CONT

MOV NOIDUNG[BX],AL
CMP AL,13

;

ENTER

JNE

NHAY1

MOV NOIDUNG[BX],0Dh
INC

BX

MOV

NOIDUNG[BX],0Ah

LEA DX,LFCR
MOV AH,9
INT

21H

MOV AH,1
NHAY1:
INC

BX

JMP LAP1
TIEP: MOV

SO,BX

MOV

AH,3CH ;

LEA

DX,TENTT ; TAO MOT TAP TIN

MOV

CX,20H ; THUOÄC TI'NH


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 62 -

INT

21H ;

MOV BX,AX

LEA

DX,TENTT ;

MOV

AL,1 ;

MOV

AH,3DH ; MÔÛ TAÄP TIN

INT

21H ;

PUSH AX

;

GHI THEÛ ÑEÅ SÖÛ DUÏNG SAU NAØY

MOV

BX,AX

MOV

AH,40H ; GHI VAØO TAÄP TIN

LEA

DX,NOIDUNG; ÑEÄM

MOV

CX,SO ;SOÁ BYTE ÑOÏC

INT

21H ;

POP

BX ;

MOV

AH,3EH ;ÑOÙNG TAÄP TIN

INT

21H

THOAT
MAIN ENDP
END MAIN

c- Ñoïc noäi dung taäp tin

EXTRN WRITE_HEX:NEAR
.MODEL SMALL
.STACK 100H
.DATA
NOIDUNG

DB 10000 DUP(?)

TENTT

DB 50 DUP (?)

CAUHOI

DB 'NHAP DUONG DAÃN: '

LFCR

DB 10,13,'$'

.CODE
INCLUDE THUVIEN.MAC
MAIN PROC
PRODATA
HIENCH

CAUHOI


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 63 -

XOR

BX,BX

MOV

AH,1

LAP1:
INT

21H

MOV

TENTT[BX],AL

INC

BX

CMP

AL,13

JNE

LAP1

DEC

BX

MOV

TENTT[BX],'0'

HIENCH LFCR
LEA

DX,TENTT

MOV

AL,2

MOV

AH,3DH ; THEÛ

INT

21H ;

PUSH

AX ; LÖU THEÛ

MOV

BX,AX

; DÒCH VUÏ 3F : BX <-- THEÛ

MOV

AH,3FH ; ÑOÏC TAÄP TIN

LEA

DX,NOIDUNG;

MOV

CX,0FFFFH ; SO BYTE

INT

21H ;

POP

BX

PUSH

AX ;

CALL

DONG

XOR

BX,BX

POP

CX

TIEP1:
MOV

DL,NOIDUNG[BX]

CALL

HIENSOTLP

CALL TRONG

INC

BX

LOOP TIEP1
THOAT

MAIN ENDP


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 64 -

DONG PROC
MOV

AH,3Eh

INT

21h

RET
DONG ENDP

TRONG PROC
PUSH DX
PUSH AX
MOV

DL,'

'

MOV

AH,2

INT

21H

POP

AX

POP

DX

RET
TRONG ENDP

END MAIN

d-ÑOÅI TEÂN, XOAÙ TAÄP TIN

Ñoåi teân taäp tin: Haøm 56h - Ngaét 21h
Xoaù taäp tin: Haøm 41h - Ngaét 21h

.MODEL SMALL
.STACK 100H

.DATA
VUNGDEM DB 20
LOAI DB ?
TENTT DB 50 DUP (0),0,'$'
DUONG

DB

'[A:] <DUONG> TEN TAP TIN[.EXT] $'

LOI

DB

'KHOÂNG THEÅ XOAÙ TAÄP TIN NAØY$'

.CODE
INCLUDE THUVIEN.MAC

MAIN PROC


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 65 -

PRODATA

HIENCH DUONG

MOV

AH,0Ah

LEA

DX,VUNGDEM

INT

21h

XOR

BX,BX

MOV

BL,LOAI

ADD

BX,OFFSET

TENTT

MOV

BYTE PTR [BX],0

LEA

DX,TENTT

MOV

AH,41h

INT

21h

JNC

RA

HIENCH LOI

RA: THOAT
MAIN ENDP
END MAIN

e- THAY ÑOÅI THUOÄC TÍNH - CHEÙP TAÄP TIN:

THAY ÑOÅI THUOÄC TÍNH TAÄP TIN: Haøm 43h - Ngaét 21h

CHEÙP TAÄP TIN

.MODEL SMALL
.DATA
BUFFER DB 14
TYPE1 DB

0

FILE1

DB 12 DUP(00),0

FILE2

DB 8 DUP(00),".TXT",0

HANDLE1 DW

0

HANDLE2 DW 0

THONGBAO DB 'VAO TEN PHAI COPY : $'

DATA1

DB 10000 DUP(?)


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 66 -

.STACK 100H
.CODE
INCLUDE THUVIEN.MAC
MAIN PROC

PRODATA

HIENCH

THONGBAO

MOV

AH,0AH

LEA

DX,BUFFER

INT

21H

MOV

[FILE1+12],0

MOV

CX,08

LEA

SI,FILE1

MOV

DI,

SEG

FILE2

MOV

ES,

DI

LEA

DI,FILE2

REP

MOVSB

LEA

DX,FILE1

MOV

AX,3D02H

INT

21H

MOV

HANDLE1,AX

MOV

DX,OFFSET FILE2

MOV

AH,3CH

MOV

CX,0

INT

21H

MOV

HANDLE2,AX

MOV

AH,3FH

MOV

CX,10000

MOV

DX,OFFSET DATA1

MOV

BX,HANDLE1

INT

21H

MOV

CX,AX

MOV

AH,40H

MOV

BX,HANDLE2

INT

21H


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 67 -

MOV

AH,3EH

MOV

BX,HANDLE1

INT

21H

MOV

BX,HANDLE2

INT

21H

THOAT

MAIN ENDP

END

MAIN

f. CAÙC THÖ MUÏC:
Dòch vuï 39h cuûa ngaét 21h söû duïng ñeå taïo thö muïc môùi

(MKDIR)

Dòch vuï 3Ah cuûa ngaét 21h söû duïng ñeå xoaù thö muïc (RMDIR)
Dòch vuï 3Bh cuûa ngaét 21h söû duïng ñeå chuyeån thö muïc

(CHDIR)

IV. TAÏO TAÄP TIN .COM

Nhöõng chöông trình trong ñoù döõ lieäu vaø leänh ñeàu naèm trong

cuøng moät phaân ñoaïn ñeàu laø nhöõng chöông trình COM. Ñieàu naøy coù
nghóa laø dung löôïng cuûa chöông trình coù giôùi haïn laø 64KByte. Ngay
töø khi thöïc hieän chöông trình loaïi naøy, MSDOS ñöa vaøo boä nhôù
toaøn boä taäp tin naøy vaø ñaët giaù trò ban ñaàu cho caùc thanh ghi CS, DS,
SS, ES nhö nhau. Thanh ghi SP (Stack Pointer) ñöôïc ñaët laø FFFEh.
Thanh ghi IP ñöôïc ñaët laøø 0100h vì moãi chöông trình ñaët ôû ñaàu boä
nhôù moät vuøng100h byte (PSP), ñieàu naøy giaûi thích vì sao leänh thöù
nhaát cuûa chöông trình (ñieåm vaøo) phaûi ñaët ôû ñaàu cuûa chöông trình
vaø chuùng ta phaûi söû duïng ñònh höôùng bieân dòch ORG 100h. Vì vaäy
chuùng ta coù hình aûnh cuûa boä nhôù nhö sau:

Offset PSP

100h JMP

Batdau

Döõ lieäu


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 68 -

IP --->

Batdau:


SP=FFFE Ngaên

xeáp

1- Daïng cuûa moät chöông trình COM


.MODEL SMALL
.CODE
ORG

100h

BATDAU:
JMP

CHINH

; Ñaët döõ lieäu ôû ñaây
CHINH PROC
; Caùc leänh

MOV

AH,4Ch

INT

21h

CHINH ENDP
; Caùc thuû tuïc khaùc
END

BATDAU


Ví duï:

Taäp tin KIEMTRA.ASM

.MODEL SMALL
.CODE
ORG

100h

BATDAU:
JMP

CHINH

TBAO DB 'Chao cac ban! $'


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 69 -

CHINH PROC

LEA

DX,TBAO

MOV

AH,09

INT

21h

MOV

AH,4Ch

INT

21h

CHINH ENDP
END

BATDAU

Hôïp dòch chöông trình naøy:


MASM KIEMTRA;

LINK KIEMTRA;

Ñeå chuyeån taäp tin EXE sang COM söû duïng EXE2BIN

EXE2BIN KIEMTRA KIEMTRA.COM

2- Öùng duïng taäp tin .com

a- ÖÙng duïng 1:
Xem soá ñóa cöùng, soá ñaàu töø, soá töø truï, soá cung treân raõnh

.MODEL SMALL
.CODE
ORG

100h

BATDAU:

JMP DIACUNG

SODIA

DB 10,13,'Soá ñóa cöùng: $'

SODAU

DB 10,13,'Soá ñaàu töø : $'

SOTUTRU

DB 10,13,'Soá töø truï : $'

SOCUNG

DB 10,13,'Soá cung : $'


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 70 -

DIACUNG PROC

MOV

AH,8

MOV

DL,80H

INT

13H

PUSH CX
PUSH CX
PUSH DX
PUSH DX
LEA

DX,SODIA

CALL HIENCHUOI
POP

DX

AND

DX,00FFH

CALL HIENSOTP
LEA

DX,SODAU

CALL HIENCHUOI
POP

DX

AND

DX,0FF00H

MOV

DL,DH

MOV

DH,00

ADD

DL,1

CALL

HIENSOTP

LEA

DX,SOTUTRU

CALL HIENCHUOI
POP

CX

AND

CX,1111111111000000B

XCHG CH,CL
MOV

DX,CX

MOV

CX,2

ROL

DH,CL

ADD

DL,2

CALL

HIENSOTP

LEA

DX,SOCUNG

CALL HIENCHUOI
POP

CX


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 71 -

AND

CX,0000000000111111B

MOV

DX,CX

CALL

HIENSOTP

MOV

AH,4CH

INT

21H

DIACUNG ENDP
; Nhöõng thuû tuïc khaùc

END

BATDAU


b - ÖÙng duïng 2: Ñoïc noäi dung cuûa moät cung

DOS baét ñaàu ñoïc töø cung 1, töø truï 0, maët 1 goïi laø cung 0
moãi raõnh coù 17 cung
* Moãi taäp tin chieám nhieàu nhoùm cung do vaäy phaûi coù moät baûng
quaûn lyù taäp tin -> FAT File Allocation Table coù 16 BIT ->
2

16

=65536 nhoùm cung


* Vôùi ñóa meàm:
Maët 0, raõnh 0, cung 1 -> löu phaàn khôûi ñoäng DOS BOOT
RECORD (DBR)

* Vôùi ñóa cöùng:
Baét ñaàu laø phaàn MASTER BOOT RECORD (MBR)
PARTITION
sau ñoù maët 1, raõnh 0, cung 1 -> löu phaàn khôûi ñoäng DOS BOOT
RECORD (DBR)

Taäp tin DIACUNG.ASM

.MODEL SMALL
.CODE

ORG

100h


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 72 -

BATDAU:

JMP

DOCCUNG

VUNGDEM

DB 512 DUP (?)

DB

'$'

THONGBAO

DB 'Ñoïc toát ',13,10,'$'

BAOLOI

DB 'Khoâng theå ñoïc',13,10,'$'

TRONG

DB '

$'

GACH

DB ' - $'

DEM

DW ?

CHU

DW

?

HANG

DW ?

LFCR

DB

13,10,'$'


DOCCUNG PROC
MOV

DS,AX

XOR

AX,AX

MOV

AH,2

MOV

AL,1 ; 1 Cung

MOV

DL,1 ; Ñóa meàm B

MOV

DH,1 ; Ñaàu töø 1

MOV

CH,0 ; raõnh 0

MOV

CL,9 ; cung 9

LEA

BX,VUNGDEM

INT

13H

JNC

TOT

LEA

DX,BAOLOI

MOV

AH,9

INT

21H

JMP

RA

TOT:
LEA

DX,THONGBAO

MOV

AH,9

INT

21H

RA:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 73 -

MOV

CX,300

MOV

DEM,0

MOV

CHU,0

MOV

HANG,0

LAP9:
MOV

BX,DEM

MOV

DX,WORD PTR VUNGDEM[BX]

CALL

HIENSOTLP

LEA

DX,TRONG

CALL

HIENCHUOI

INC

DEM

INC

CHU

INC

HANG

CMP

CHU,10

JNE

TIEP1

MOV

CHU,0

CMP

HANG,10

JA

TIEP1

LEA

DX,GACH

CALL

HIENCHUOI

TIEP1:
CMP

HANG,20

JNE

TIEP2

MOV

HANG,0

LEA

DX,LFCR

CALL

HIENCHUOI

TIEP2:
LOOP

LAP9

CALL

THOAT

DOCCUNG ENDP

; Caùc thuû tuïc khaùc

END BATDAU


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 74 -



c - Öùng duïng 3:

Ghi 1 cung


.MODEL SMALL
.CODE

ORG 100h

BATDAU:

JMP GHICUNG


VUNGDEM

DB 512 DUP (00)

DB

'$'

THONGBAO

DB 13,10,'Ñoïc toát ',13,10,'$'

BAOLOI

DB 13,10,'Khoâng theå ñoïc ',13,10,'$'

NHAP

DB 'Goõ vaøo baøn phím :'

LFCR

DB

13,10,'$'

DEM

DW ?


GHICUNG PROC

LEA

DX,NHAP

CALL HIENCHUOI
MOV

DEM,0

MOV

AH,1

LAP9:
INT

21H

CMP

AL,1AH ; CTRL+Z

JE TIEP1
MOV

BX,DEM

MOV

VUNGDEM[BX],AL

INC

DEM

JNE

LAP9

TIEP1:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 75 -

XOR

AX,AX

MOV

AH,3

MOV

AL,1 ; 1 Cung

MOV

DL,1 ; Ñóa meàm B

MOV

DH,1 ; Ñaàu töø 1

MOV

CH,0 ; Raõnh 0

MOV

CL,9 ; Cung 9

LEA

BX,VUNGDEM

INT

13H

JNC

TOT

LEA

DX,BAOLOI

CALL

HIENCHUOI

JMP

THOATRA

TOT:
LEA

DX,THONGBAO

CALL HIENCHUOI
THOATRA:
CALL THOAT

GHICUNG ENDP

;Caùc thuû tuïc khaùc

END BATDAU












Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 76 -

CHÖÔNG 7: SÖÛ DUÏNG PHAÂN ÑOAÏN TOAØN PHAÀN

Phöông phaùp ñònh nghóa phaân ñoaïn ñôn giaûn hoaù maø chuùng ta vaãn

thöôøng söû duïng töø tröôùc ñeán nay ñaõ aùp duïng ñöôïc haàu heát caùc muïc tieâu.
Trong phaàn naøy chuùng ta xem xeùt caùch ñònh nghóa phaân ñoaïn toøn phaàn. Döôùi
ñaây laø nguyeân nhaân chính ñeå söû duïng phöông phaùp naøy:


. Vôùi caùc trình bieân dòch phieân baûn 5.0 trôû veà tröôùc chuùng ta chæ coù theå

söû duïng phöông phaùp ñònh nghóa phaân ñoaïn toaøn phaàn.


. Vôùi phöông phaùp ñònh nghóa phaân ñoaïn toaøn phaàn, laäp trình vieân coù

theå ñieàu khieån ñöôïc thöù töï caùc phaân ñoaïn , vieäc keát hôïp chuùng vôùi nhau vaø söï
lieân keát giöõa chuùng trong boä nhôù

I- SÖÛ DUÏNG CAÙC ÑÒNH HÖÔÙNG BIEÂN DÒCH

1. Segment

Teân SEGMENT lieân keát keát hôïp 'lôùp'
;
;
Teân ENDS

Ví duï:
D_SEG SEGMENT

; caùc döõ lieäu

D_SEG ENDS

a - Loaïi lieân keát (align):

PARA

Phaân ñoaïn baét ñaàu töø phaân ñoaïn tröôùc ñoù.

BYTE Phaân ñoaïn baét ñaàu töø byte tröôùc ñoù.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 77 -

WORD Phaân ñoaïn baét ñaàu töø töø tröôùc ñoù.
PAGE Phaân ñoaïn baét ñaàu töø trang tröôùc ñoù.


Maëc ñònh ngöôøi ta söû duïng loaïi PARA


Ví duï:


SEG1

SEGMENT

PARA

DB

11h

DUP

(1)

SEG1

ENDS


SEG2

SEGMENT

PARA

DB

10H

DUP

(2)

SEG2

ENDS

1010:0000 01

01

01

01

01

01 - 01

01

01

01

01

1010:0010 01 00 00 00 00 00

-

00 00 00 00 00

1010:0020 02 02 02 02 02 02

-

02 02 02 02 02


SEG1

SEGMENT

PARA

DB

11h

DUP

(1)

SEG1

ENDS

SEG2

SEGMENT

BYTE

DB

10H

DUP

(2)

SEG2

ENDS

1010:0000 01 01 01 01 01 01

-

01 01 01 01 01

1010:0010 01 02 02 02 02 02

-

02 02 02 02 02

1010:0020 02 00 00 00 00 00

-

00 00 00 00 00


b - Loaïi keát hôïp (combine):

PUBLIC:Nhöõng phaân ñoaïn coù cuøng teân ñeàu gom laïi trong cuøng moät

khoái nhôù keá tieáp nhau vaø thoáng nhaát.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 78 -

COMMON: Nhöõng phaân ñoaïn coù cuøng teân seõ gom laïi taïi moät vò trí

boä nhôù vaø xeáp choàng leân nhau.


STACK: Taùc duïng gaàn nhö PUBLIC ngoaïi tröø taát caû caùc ñòa chæ

nhaûy böôùc (offset) cuûa caùc leänh vaø caùc döõ lieäu ñöôïc tính
töông ñoái so vôùi thanh ghi SS. SP ñöôïc ñaët ban ñaàu troû
ñeán cuoái phaân ñoaïn.


AT paragraph: Phaân ñoaïn ñöôïc baét ñaàu töø moät phaân ñoaïn xaùc ñònh

Thöôøng ngöôøi ta söû duïng loaïi PUBLIC ñeå gom caùc phaân ñoaïn maõ
coù cuøng teân trong nhöõng moñun khaùc nhau ñeå taïo ra moät phaân ñoaïn
duy nhaát. Ñieàu naøy cuõng coù nghóa laø chuùng ta coù nhöõng thuû tuïc
NEAR trong chöông trình.

c - Loaïi lôùp (class):

Loaïi lôùp chuùng ta ñònh nghóa chæ ra thöù töï vò trí cuûa caùc phaân ñoaïn
trong boä nhôù. Chuùng ta caàn ñaët loaïi naøy vaøo trong daáu nhaùy ( ' ).

Ví duï:


Neáu chuùng ta ñònh nghóa THUNHAT.ASM:

C_SEG SEGMENT

'CODE'

; thuû tuïc chính
C_SEG ENDS

Vaø trong THUHAI.ASM

C1_SEG

SEGMENT

'CODE'

; caùc thuû tuïc khaùc
C1_SEG

ENDS


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 79 -


Sau khi thöïc hieän leänh

LINK THUNHAT+THUHAI
C1_SEG seõ naèm sau C_SEG trong boä nhôù.

2. Ñònh höôùng bieân dòch assume

Khi moät chöông trình ñöôïc hôïp dòch, trình hôïp dòch phaûi bieát phaân

ñoaïn naøo laø phaân ñoaïn maõ, phaân ñoaïn naøo laø phaân ñoaïn döõ lieäu, phaân ñoaïn
naøo laø phaân ñoaïn ngaên xeáp. Muïc tieâu cuûa ñònh höôùng bieân dòch ASSUME laø
lieân keát caùc thanh ghi CS, DS, SS vaø ngay caû ES vaøo caùc phaân ñoaïn ñaõ bieát.

II - DAÏNG CUÛA CHÖÔNG TRÌNH .EXE SÖÛ DUÏNG TRONG CAÙC
PHÖÔNG PHAÙP CUÕ:

S_SEG SEGMENT

STACK

DB

100h

S_SEG ENDS
D_SEG SEGMENT

; döõ lieäu

D_SEG ENDS
C_SEG SEGMENT

ASSUME

CS:C_SEG,

SS:S_SEG,

DS:

D_SEG

MAIN

PROC

;Xaùc ñònh ban ñaàu DS

MOV

AX,

D_SEG

MOV

DS,

AX

;

caùc

leänh

khaùc

MAIN

ENDP

; caùc thuû tuïc khaùc
C_SEG ENDS

END

MAIN

Moät ví duï chöông trình EXE


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 80 -


Ñoåi ra chöõ HOA:


* Taäp tin CTR11.ASM

EXTRN CONVERS:FAR
S_SEG SEGMENT

STACK

DB

100

DUP

(0)

S_SEG ENDS

D_SEG SEGMENT

MSG DB 'Nhaäp vaøo moät chöõ caùi thöôøng: $'
D_SEG ENDS

C_SEG SEGMENT

ASSUME CS:C_SEG, DS: D_SEG, SS: S_SEG


MAIN

PROC

MOV

AX,

D_SEG

MOV

DS,

AX

MOV

AH,

09

LEA

DX,

MSG

INT

21H

MOV

AH,

1

INT

21H

CALL

CONVERS

MOV

AH,4CH

INT

21H

MAIN

ENDP

C_SEG ENDS

END

MAIN



Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 81 -

Taäp tin CTR21.ASM

PUBLIC CONVERS

D_SEG SEGMENT

MSG

DB 0DH,0AH, 'Chöõ HOA laø: '

CARAC

DB -20h,' $'

D_SEG ENDS


C_SEG SEGMENT

ASSUME CS: C_SEG, DS: D_SEG

CONVERT

PROC

FAR

PUSH DS
PUSH DX
MOV

DX,

D_SEG

MOV

DS,

DX

ADD

CARAC,

AL

MOV

AH,

09

LEA

DX,

MSG

INT

21H

POP

DX

POP

DS

RET

CONVERS

ENDP

C_SEG ENDS

END


Coù theå toái öu hoaù chöông trình treân:

* CTR12.ASM

EXTRN CONVERS:NEAR
S_SEG SEGMENT

STACK

DB

100

DUP

(0)


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 82 -

S_SEG ENDS
D_SEG

SEGMENT BYTE

PUBLIC 'DATA'

MSG DB 'Nhaäp vaøo moät chöõ caùi thöôøng: $'
D_SEG ENDS
C_SEG

SEGMENT BYTE

PUBLIC 'CODE'

ASSUME CS:C_SEG, DS: D_SEG, SS: S_SEG

MAIN

PROC

MOV

AX,

D_SEG

MOV

DS,

AX

MOV

AH,

09

LEA

DX,

MSG

INT

21H

MOV

AH,

1

INT

21H

CALL

CONVERS

MOV

AH,4CH

INT

21H

MAIN

ENDP

C_SEG ENDS

END

MAIN


Taäp tin CTR22.ASM

PUBLIC CONVERS
D_SEG

SEGMENT BYTE

PUBLIC 'DATA'

MSG

DB 0DH,0AH, 'Chöõ HOA laø : '

CARAC

DB -20h,' $'

D_SEG ENDS

C_SEG

SEGMENT BYTE

PUBLIC 'CODE'

ASSUME CS: C_SEG, DS: D_SEG

CONVERT

PROC

NEAR

PUSH DX
ADD

CARAC,

AL

MOV

AH,

09


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 83 -

LEA

DX,

MSG

INT

21H

POP

DX

RET

CONVERS

ENDP

C_SEG ENDS

END


MASM CTR21;
MASM CTR22;
LINK CTR21+CTR22

III- VÍ DUÏ CHÖÔNG TRÌNH COM


MyProg SEGMENT
Org

100h

ASSUME

CS:MyProg,

DS:MyData

Start:

JMP

Main

Main

PROC

MOV

AH,9

LEA

DX,CS:MSG

INT

21h

INT

20h

Main

ENDP

MyProg ENDS
MyData SEGMENT
MSG

DB 'Chaøo caùc baïn, heïn gaëp laïi $'

MyData ENDS
END

Start


MASM CTCUOI;


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 84 -

LINK CTCUOI;
EXE2BIN CTCUOI CTCUOI.COM


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 85 -

CHÖÔNG 8: CHÖÔNG TRÌNH ÖÙNG DUÏNG

I. IN NOÄI DUNG VAÊN BAÛN RA MAÙY IN:

1. Söû duïng haøm 40h ngaét 21h (DOS) ñeå thöïc hieän

.MODEL SMALL
.STACK 100h
.DATA
HelloMessage DB 'Hello, world',13,10,12 ; 12 Form Feed
HELLO_MESSAGE_LENGTH EQU $ - HelloMessage
.CODE
mov ax,@data
mov ds,ax ;set DS to point to the data segment
mov ah,40h ;DOS write to device function #
mov bx,4 ;printer handle
mov cx,HELLO_MESSAGE_LENGTH ;number of characters to print
mov dx,OFFSET HelloMessage ;string to print
int 21h ;print "Hello, world"
mov ah,4ch ;DOS terminate program function #
int 21h ;terminate the program
END

2. Söû duïng haøm 01h ngaét 17h (ROMBIOS)

.model small
.stack 100h

.data

printe equ

17h

prin_first

equ

0


.code
printe_char proc
mov

ax,@data

mov

ds,ax

mov

dx,prin_first

mov

ah,01

int

printe

mov

cx,0ffh

conti:
mov

al,41h

call

pri

dec

cx

cmp

cx,0

jnz

conti

mov

al,0dh

call

pri

mov

ah,4ch


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 86 -

int

21h

printe_char endp
pri proc
mov

ah,0

int

printe

ret
pri endp
end

printe_char

II. ÑEÁM SOÁ TÖØ TRONG MOÄT TAÄP TIN


;
; Program to count the number of words in a file. Words are
; delimited by whitespace, which consists of spaces, tabs,
; carriage returns, and linefeeds.
.MODEL SMALL ;code and data each fit in 64K
.STACK 200h ;512-byte stack
.DATA
Count DW 0 ;used to count words
InWhitespace DB ? ;set to 1 when the last
; character read was whitespace
TempChar DB ? ;temporary storage used by
; GetNextCharacter
Result DB 'So tu la: ', 5 DUP (?)
;string printed to report the count
CountInsertEnd DB 0dh,0ah,'$'
;DOS fn #9 expects strings to end with
; a dollar sign
.CODE
ProgramStart:
mov ax,@data
mov ds,ax ;point DS to the .DATA segment
mov [InWhitespace],1 ;assume we're in whitespace, since
; the first non-whitespace we'll find
; will mark the start of a word
CountLoop:
call GetNextCharacter ;get next character to check
jz CountDone ;...if any
call IsCharacterWhitespace ;is it whitespace?
jz IsWhitespace ;yes
cmp [InWhitespace],0 ;character is not
; whitespace-are we currently in
; whitespace?
jz CountLoop ;we're not in whitespace, and the
; character isn't whitespace, so
; we're done with this character
inc [Count] ;we are in whitespace, and the
; character is not whitespace, so
; we just found the start of a new word
mov [InWhitespace],0 ;mark that we're no longer

;in whitespace

jmp CountLoop ;do the next character
IsWhitespace:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 87 -

mov [InWhitespace],1 ;mark that we're in whitespace
jmp CountLoop ;do the next character
;
; We're done counting--report the results.
CountDone:
mov ax,[Count] ;number to convert to a string
mov bx,OFFSET CountInsertEnd-1 ;point to the end of

; the string to put the number in

mov cx,5 ;number of digits to convert
call ConvertNumberToString ;make the number a string
mov bx,OFFSET Result ;point to result string
call PrintString ;print the count
mov ah,4ch ;DOS terminate program fn #
int 21h ;end the program
;
; Subroutine to get the next character from the standard input.
;
; Input: None
;
; Output:
; AL = character, if one was available
; Z flag = 0 (NZ) if character available,
; = 1 (Z) if end of file reached
;
; Registers destroyed: AH, BX, CX, DX
;
GetNextCharacter PROC
mov ah,3fh ;DOS read from file fn #
mov bx,0 ;standard input handle
mov cx,1 ;read one character
mov dx,OFFSET TempChar ;put the character in TempChar
int 21h ;get the next character
jc NoCharacterRead ;if DOS reports an error, then treat
; it as the end of the file
cmp [TempChar],1ah ;was it Control-Z?
; (marks end of some files)
jne NotControlZ ;no
NoCharacterRead:
sub ax,ax ;mark no character read
NotControlZ:
and ax,ax ;set Z flag to reflect whether a
; character was read (NZ), or the
; end of the file was reached (Z).
; Note that DOS fn #3fh sets AX to
; the number of characters read
mov al,[TempChar] ;return the character read
ret ;done
GetNextCharacter ENDP
;
; Subroutine to report whether a given character is whitespace.
;
; Input:
; AL = character to check
;


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

; Output:

background image

Hôïp Ngöõ

- 88 -

; Z flag = 0 (NZ) if character is not whitespace
; = 1 (Z) if character is whitespace
;
; Registers destroyed: none
;
IsCharacterWhitespace PROC
cmp al,' ' ;is it a space?
jz EndIsCharacterWhitespace ;if so, it's whitespace
cmp al,09h ;is it a tab?
jz EndIsCharacterWhitespace ;if so, it's whitespace
cmp al,0dh ;is it a carriage return?
jz EndIsCharacterWhitespace ;if so, it's whitespace
cmp al,0ah ;is it a linefeed? If so,
; it's whitespace, so return Z;
; if not, it's not whitespace,
; so return NZ as set by cmp
EndIsCharacterWhitespace:
ret
IsCharacterWhitespace ENDP
;
; Subroutine to convert a binary number to a text string.
;
; Input:
; AX = number to convert
; DS:BX = pointer to end of string to store text in
; CX = number of digits to convert
;
; Output: None
;
; Registers destroyed: AX, BX, CX, DX, SI
;
ConvertNumberToString PROC
mov si,10 ;used to divide by 10
ConvertLoop:
sub dx,dx ;convert AX to doubleword in DX:AX
div si ;divide number by 10. Remainder is in
; DX--this is a one-digit decimal
; number. Number/10 is in AX
add dl,'0' ;convert remainder to a text character
mov [bx],dl ;put this digit in the string
dec bx ;point to the location for the
; next most-significant digit
loop ConvertLoop ;do the next digit, if any
ret
ConvertNumberToString ENDP
;
; Subroutine to print a string on the display.
;
; Input:
; DS:BX = pointer to string to print
;
; Output: None
;
; Registers destroyed: None


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

;

background image

Hôïp Ngöõ

- 89 -

;
;
PrintString PROC
push ax
push dx ;reserve registers in this subroutine
mov ah,9 ;DOS print string function #
mov dx,bx ;point DS:DX to the string to print
int 21h ;invoke DOS to print the string
pop dx ;restore registers we changed
pop ax
ret
PrintString ENDP
END ProgramStart

III- ÑOÅI NGÖÔÏC CHUOÃI


.MODEL SMALL
.STACK 100h
.DATA
MAXIMUM_STRING_LENGTH EQU 1000
StringToReverse DB MAXIMUM_STRING_LENGTH DUP(?)
ReverseString DB MAXIMUM_STRING_LENGTH DUP(?)
.CODE
mov ax,@data
mov ds,ax ;set DS to point to the data segment
mov ah,3fh ;DOS read from handle function #
mov bx,0 ;standard input handle
mov cx,MAXIMUM_STRING_LENGTH ;read up to maximum

;number of characters

mov dx,OFFSET StringToReverse ;store the string here
int 21h ;get the string
and ax,ax ;were any characters read?
jz Done ;no, so you're done
mov cx,ax ;put string length in CX, where
; you can use it as a counter
push cx ;save the string length
mov bx,OFFSET StringToReverse
mov si,OFFSET ReverseString
add si,cx
dec si ;point to the end of the
; reverse string buffer
ReverseLoop:
mov al,[bx] ;get the next character
mov [si],al ;store the characters in reverse order
inc bx ;point to next character
dec si ;point to previous location in reverse buffer
loop ReverseLoop ;move next character, if any
pop cx ;get back the string length
mov ah,40h ;DOS write from handle function #
mov bx,1 ;standard output handle
mov dx,OFFSET ReverseString ;print this string
int 21h ;print the reversed string
Done:


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 90 -

mov ah,4ch ;DOS terminate program function #
int 21h ;terminate the program
END




IV. CHÖÔNG TRÌNH HIEÅN THÒ THÔØI GIAN


Chöông trình bao goàm caùc böôùc sau ñaây:


1- Laáy thôøi gian
2- Ñoåi giôø, phuùt, giaây sang daïng chöõ soá ASCII
3- Hieån thò caùc chöõ soá ASCII


Taäp tin thöù 1: PGM1_1.ASM

EXTRN GET_TIME:NEAR
.MODEL SMALL
.STACK 100h
.DATA
TIME_BUF

DB '00:00:00$' ; boä ñeäm thôøi gian

;hr:min:sec

.CODE
MAIN PROC
MOV

AX,@DATA

MOV

DX,AX

; khôûi taïo DS

;laáy vaø hieån thò thôøi gian
LEA

BX,TIME_BUF

CALL

GET_TIME

;

ñöa thôøi gian

;

hieän taïi vaøo DX

LEA

DX,TIME_BUF

MOV

AH,09H

INT

21H


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 91 -

;trôû veà DOS
MOV

AH,4CH

INT

21H

MAIN ENDP
END

MAIN




Taäp tin thöù 2: PGM1_2.ASM

PUBLIC GET_TIME
.MODEL SMALL
.CODE
GET_TIME PROC
;laáy thôøi gian trong ngaøy vaø chöùa caùc chöõ soá ASCII ;trong boä
ñeäm thôøi gian
MOV

AH,2CH

INT

21H

;ñoåi giôø sang daïng ASCII vaø löu tröõ
MOV

AL,CH

CALL

CONVERT

MOV

[BX],AX

;ñoåi phuùt sang daïng ASCII vaø löu tröõ
MOV

AL,CL

CALL

CONVERT

MOV

[BX+3],AX

;ñoåi giaây sang daïng ASCII vaø löu tröõ
MOV

AL,CH

CALL

CONVERT

MOV

[BX+6],AX

RET
GET_TIME ENDP
;
;


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 92 -

CONVERT PROC
;
; ñoåi soá kieåu byte (0-59) sang caùc chöõ soá ASCII
; vaøo:

AL = soá

; ra:AX = caùc chöõ soá ASCII, AL = chöõ soá haøng chuïc
; AH = chöõ soá haøng ñôn vò
;
MOV

AH,0

MOV

DL,10

DIV

DL

OR

AX, 0303H

; ñoåi sang daïng ASCII

RET

CONVERT END
END

Chöông trình hieån thò thôøi gian vaø keát thuùc

* Ñeå taïo chöông trình thôøi gian thuù vò hôn, chuùng ta cho hieån thò thôøi

gian vaø caäp nhaät laïi sau moãi giaây

Thuû tuïc SETUP_INT trong chöông trình PGM2_2.ASM caát vectô ngaét

cuõ vaø thieát laäp vectô ngaét môùi. Noù nhaän soá hieäu ngaét trong AL, boä ñeäm ñeå caát
vectô cuõ taïi DS:DI vaø boä ñeäm chöùa vectô ngaét môùi taïi DS:SI. Baèng vieäc hoaùn
ñoåi hai boä ñeäm, SET_INT coù theå ñöôïc duøng ñeå phuïc hoài laïi vectô cuõ.

Taäp tin PGM2_2.ASM

PUBLIC

SETUP_INT

.MODEL SMALL
.CODE
SETUP_INT PROC
;caát vectô cuõ
MOV

AH,35H

INT

21H ;ES:BX=vectô ngaét


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 93 -

MOV

[DI],BX ; caát offset

MOV

[DI+2],ES

;

caát ñòa chæ phaân ñoaïn

; thieát laäp vectô môùi

MOV

DX,[SI] ;DX chöùa offset

PUSH DS

;caát DS

MOV

DS,[SI+2];DS chöùa soá hieäu ñoaïn

MOV

AH,25H

INT

21H

POP

DS ; phuïc hoài DS

RET
SETUP_INT END
END

Ñieàu khieån con troû:

Moãi khi hieån thò thôøi gian baèng haøm 9 ngaét 21h, con troû bò dòch ñi.

Laàn hieån thò sau seõ xuaát hieän taïi moät vò trí khaùc treân maøn hình. Nhö vaäy
ñeå thaáy thôøi gian caäp nhaät laïi ôû cuøng moät vò trí treân maøn hình, chuùng ta
phaûi phuïc hoài con troû taïi vò trí nguyeân thuûy cuûa noù tröôùc khi hieån thò thôøi
gian. Muoán thöïc hieän ñieàu naøy, tröôùc heát chuùng ta phaûi xaùc ñònh vò trí
hieän taïi cuûa con troû, tieáp ñoù sau moãi thao taùc in chuoãi chuùng ta laïi
chuyeån con troû troû veà vò trí ban ñaàu cuûa noù.


Chuùng ta söû duïng caùc haøm 3 vaø 2 cuûa ngaét 10h ñeå caát vò trí cuûa

con troû vaø di chuyeån con troû ñeán vò trí ban ñaàu cuûa noù sau moãi thao taùc in
chuoãi.

Thuû tuïc ngaét:

Khi moät thuû tuïc ngaét ñöôïc kích hoaït, khoâng theå xem thanh ghi DS

chöùa ñòa chæ phaân ñoaïn döõ lieäu cuûa chöông trình. Vì theá neáu muoán söû
duïng baát cöù bieán naøo, phaûi khôûi taïo thanh ghi DS. Thanh ghi DS phaûi
ñöôïc phuïc hoài laïi tröôùc khi keát thuùc trình phuïc vuï ngaét vôùi leänh IRET
(Interrupt Return)


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 94 -

PGM2_1.ASM chöùa thuû tuïc MAIN vaø thuû tuïc ngaét TIME_INT.

Caùc böôùc cuûa thuû tuïc MAIN goàm:

Caát vò trí con troû hieän taïi

Thieát laäp vectô ngaét cho TIME_INT

Ñôïi vaøo 1 phím

phuïc hoài laïi ngaét cuõ vaø keát thuùc

Thöïc hieän böôùc thöù 2, chuùng ta söû duïng toaùn töû giaû OFFSET vaø

SEG ñeå laáy offset vaø ñòa chæ phaân ñoaïn cuûa thuû tuïc TIEME_INT, vectô
naøy sau ñoù ñöôïc löu vaøo trong boä ñeäm NEW_VEC. Thuû tuïc SETUP_INT
ñöôïc goïi ñeå thieát laäp vectô cho ngaét nhòp thôøi gian 1Ch. Ngaét 16h, haøm 0
ñöôïc duøng trong böôùc 3 ñeå vaøo 1 phím. Thuû tuïc SETUP_INT laïi ñöôïc
goïi moät laàn nöõa trong böôùc 4, laàn naøy SI troû ñeán vectô cuõ vaø DI troû ñeán
vectô cuûa thuû tuïc TIME_INT.

Caùc böôùc cuûa thuû tuïc TIME_INT goàm

(1) Thieát laäp DS
(2) Laáy thôøi gian môùi
(3) Hieån thò thôøi gian
(4) phuïc hoài vò trí con troû
(5) Phuïc hoài DS

Chöông trình ñöôïc tieán haønh nhö sau: sau khi thieát laäp con troû vaø

caùc vectô ngaét, thuû tuïc MAIN ñôïi 1 phím nhaán. Khi aáy thuû tuïc ngaét
TIME_INT caäp nhaät thôøi gian môùi moãi khi coù xung nhòp cuûa maïch thôøi
gian. Sau khi moät phím ñöôïc nhaán, vectô cuõ ñöôïc phuïc hoài vaø chöông
trình keát thuùc.


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 95 -

PGM2_1.ASM

EXTRN GET_TIME:NEAR, SETUP_INT:NEAR

.MODEL SMALL

.STACK 100H

.DATA

TIME_BUF DB

'00:00:00$'

CURSOR_POS DW

?

NEW_VEC DW

?,?

OLD_VEC DW

?,?

;

.CODE

MAIN PROC

MOV

AX,@DATA

MOV

DS,AX

;Khôûi

taïo

DS

;caát vò trí con troû

MOV

AH,3

MOV

BH,0

;trang

0

INT

10H

MOV

CURSOR_POS,DX; caát vò trí con troû

;thieát laäp thuû tuïc ngaét baèng caùch

; ñöa segment:offset cuûa TIME_INT vaøo NEW_VEC

MOV

NEW_VEC,

OFFSET

TIME_INT

MOV

NEW_VEC+2,SEG

TIME_INT

LEA DI, OLD_VEC ;DI troû ñeán boä ñeäm vectô

LEA SI, NEW_VEC ;SI troû ñeán vectô môùi

MOV

AL,1CH ; ngaét thôøi gian

CALL

SETUP_INT

; thieát laäp vectô môùi

; ñoïc baøn phím

MOV

AH,0

INT

16H

;phuïc hoài vectô ngaét cuõ

LEA

DI,NE_VEC

LEA

SI,OLD_VEC


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 96 -

MOV

AL,1CH

CALL

SETUP_INT

;trôû veà DOS

MOV

AH,4CH

INT

21H

MAIN ENDP

;

TIME_INT PROC

;thuû tuïc ngaét

;kích hoaït bôûi maïch thôøi gian

PUSH

DS; caát giaù trò töùc thôøi cuûa DS

MOV

AX,@DATA

MOV

DS,AX

;DS troû ñeán ñoaïn döõ lieäu

;laáy thôøi gian môùi

LEA

BX, TIME_BUF ; BX troû ñeán boä ñeäm

;thôøi

gian

CALL

GET_TIME ; caát thôøi gian trong boäñeäm

;hieån thò thôøi gian

LEA

DX,TIME_BUF

MOV

AH,09H

INT

21H

;phuïc hoài vò trí con troû

MOV

AH,2

MOV

BH,0

MOV

DX,CURSOR_POS

INT

10H

IRET

TIME_INT ENDP

;

END

MAIN

Leänh LINK goàm caùc moñun PGM2_1.ASM, PGM1_2.ASM,

PGM2_2.ASM


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 97 -

V. CHÖÔNG TRÌNH THÖÔØNG TRUÙ BOÄ NHÔÙ.

Cuõng vaãn hieån thò giôø nhöng baây giôø laø ôû thöôøng truù trong boä nhôù

(terminate and stay resident)

Thoâng thöôøng khi keát thuùc moät chöông trình, boä nhôù maø noù chieám

giöõ ñöôïc DOS söû duïng ñeå naïp chöông trình khaùc. Tuy nhieân khi moät
chöông trình TSR keát thuùc, boä nhôù khoâng bò thu hoài laïi. Chính vì theá moät
chöông trình TSR coøn ñöôïc goïi laø chöông trình thöôøng truù boä nhôù
(memory resident program)

Ñeå trôû veà DOS, moät chöông trình TSR keát thuùc baèng caùch söû duïng

ngaét 27h hay ngaét 21h (haøm 31h)


Chuùng ta seõ taïo moät chöông trình .COM vì ñeå söû duïng ngaét 27h

chuùng ta caàn xaùc ñònh soá byte ñöôïc ôû laïi thöôøng truù trong boä nhôù. Caáu
truùc cuûa moät chöông trình .COM khieán vieäc tính toaùn deã daøng hôn vì noù
chæ coù moät phaân ñoaïn chöông trình.


Moät khi muoán keát thuùc hoaøn toaøn nghóa laø chöông trình TSR

khoâng hoaït ñoäng. Chöông trình naøy phaûi ñöôïc kích hoaït bôûi caùc taùc ñoäng
ngoaøi nhö moät toå hôïp phím naøo ñoù (Ví duï:Ctrl+Shift). Öu ñieåm cuûa
chöông trình thöôøng truù laø chuùng coù theå ñöôïc kích hoaït khi ñang chaïy
moät chöông trình naøo khaùc.


Chöông trình goàm 2 phaàn: Phaàn khôûi taïo thieát laäp vectô ngaét vaø

phuïc vuï ngaét

Taäp tin PGM3_1.ASM

EXTRN MAIN:NEAR,

SETUP_INT:NEAR

EXTRN NEW_VEC:DWORD,

OLD_VEC:DWORD

PUBLIC INITIALIZE


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 98 -

C_SEG SEGMENT PUBLIC
ASSUME

CS:C_SEG

INITIALIZE PROC
;thieát laäp vectô ngaét
MOV

NEW_VEC,OFFSET

MAIN;

löu ñòa chæ

MOV

NEW_VEC+2,CS

LEA DI, OLD_VEC ;

DI troû veà vectô cuõ

LEA SI, NEW_VEC ;

SI troû veà vectô môùi

MOV

AL,09H ;

ngaét baøn phím

CALL

SETUP_INT

; thieát laäp vectô ngaét

;trôû veà DOS
LEA

DX,

INITIALIZE

INT 27H ;

Keát thuùc vaø ôû laïi thöôøng truù

INITIALIZE ENDP
C_SEG ENDS
END

INITIALIZE

Caùch ñôn giaûn ñeå nhaän bieát caùc phím ñieàu khieån laø kieåm tra caùc

côø phím (haøm 2- ngaét 16h). Chuùng ta seõ söû duïng toå hôïp phím Ctrl vaø
Shift phaûi ñeå kích hoaït vaø keát thuùc söï hieån thò ñoàng hoà. Khi kích hoaït,
thôøi gian hieän taïi seõ ñöôïc hieån thò taïi goùc phaûi treân cuûa maøn hình . Ñaàu
tieân phaûi cheùp laïi döõ lieäu maøn hình ñeå sau khi keát thuùc hieån thò ñoàng hoà
ta coù theå phuïc hoài laïi maøn hình cuõ.


Thuû tuïc SET_CURSOR thieát laäp vò trí con troû taïi haøng 0 vaø coät

trong DL

Thuû tuïc SAVE_SCREEN cheùp döõ lieäu maøn hình vaøo boä ñeäm
Thuû tuïc RESTOR_SCREEN traû laïi döõ lieäu cho boä ñeäm maøn hình

Taäp tin PGM3_2.ASM

EXTRN SS_BUF:BYTE

PUBLIC SAVE_SCREEN,RESTOR_SCREEN, SET_CURSOR

C_SEG SEGMENT

PUBLIC

ASSUME

CS:C_SEG


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 99 -

;

SAVE_SCREEN PROC

;löu giöõ 8 kyù töï ôû goùc phaûi treân cuûa maøn hình

LEA

DI,SS_BUF ; Boä ñeäm maøn hình

MOV

CX,8

MOV DL,72 ;coät 72

CLD ; xoaù DF cho thao taùc chuoãi

SS_LOOP:

CALL SET_CURSOR;thieát laäp con troû

MOV AH,08H ; ñoïc kyù töï treân maøn hình

INT

10H ;AH=thuoäc tính/AL=kyù töï

STOSW ; caát kyù töï vaø thuoäc tính

INC

DL ; coät tieáp theo

LOOP

SS_LOOP

RET

SAVE_SCREEN ENDP

;

RESTOR_SCREEN PROC

;phuïc hoài maøn hình ñaõ caát

LEA

SI,SS_BUF ;SI troû ñeán boä ñeäm

MOV DI,8

;laëp 8 laàn

MOV

DL,72

;coät

72

MOV CX,1

; moãi laàn 1 kyù töï

RS_LOOP:

CALL SET_CURSOR ;di chuyeån con troû

LODSW

;AL=kyù töï/AH=thuoäc tính

MOV

BL,AH

MOV AH,9 ; vieát kyù töï vaø thuoäc tính

MOV

BH,0

;trang

0

INT

10h

INC

DL ;vò trí kyù töï tieáp theo

DEC

DI

JG

RS_LOOP

RET


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 100 -

RESTOR_SCREEN END
;
SET_CURSOR PROC
;chuyeån con troû ñeán haøng 0, coät DL
; vaøo DL=soá hieäu coät
MOV

AH,2

MOV

BH,0

MOV

DH,0

INT

10H

SET_CURSOR END
;
C_SEG ENDS
END

Baây giôø chuùng ta ñaõ saün saøng ñeå vieát thöôøng trình ngaét. Ñeå xaùc

ñònh xem söï hieån thò thôøi gian coù ñöôïc kích hoaït hay khoâng ta söû duïng côø
bieán ñoåi ñöôïc ON_FLAG. Côø naøy ñöôïc thieát laäp baèng 1 khi thôøi gian
ñöôïc hieån thò. MAIN laø thuû tuïc ngaét

Taäp tin PGM3_3.ASM

;chöông trình thöôøng truù boä nhôù chæ thôøi gian
; kích hoaït baèng toå hôïp phím Ctrl+Shift phaûi
EXTRN INITIALIZE:NEAR,SAVE_SCREEN:NEAR
EXTRN RESTOR_SCREEN:NEAR,SET_CURSOR:NEAR
EXTRN GET_TIME:NEAR
PUBLIC MAIN
PUBLIC NEW_VEC,OLD_VEC,CURSOR_POS
C_SEG SEGMENT

ASSUME CS:C_SEG, DS:C_SEG, SS:C_SEG

ORG

100H

START:
JMP

MAIN

;


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 101 -

SS_BUF

DB

16DUP(?) ;boä ñeäm löu giöõ maøn hình

TIME_BUF DB '00:00:00$'
CURSOR_POS

DW ?

;vò trí con troû

ON_FLAG DB

0

;1=chaïy thuû tuïc ngaét

NEW_VEC DW ?,?

; chöùa vectô môùi

OLD_VEC DW ?,?

;chöùa vectô cuõ

;
MAIN

PROC

;thuû tuïc ngaét
; caát caùc thanh ghi
PUSH

DS

PUSH

ES

PUSH

AX

PUSH

BX

PUSH

CX

PUSH

DX

PUSH

SI

PUSH

DI

MOV

AX,CS

;

thieát laäp DS

MOV

DS,AX

MOV

ES,AX

;Goïi thuû tuïc ngaét baøn phím cuõ
PUSHF
CALL

INITIALIZE

;laáy caùc côø baøn phím
MOV

AX,CS

;

thieát laäp laïi DS

MOV

DS,AX

MOV

ES,AX

;

ES cho phaân ñoaïn hieän haønh

MOV

AH,02

;

xem côø baøn phím

INT

16H

;

AL chöùa caùc côø baøn phím

TEST

AL,1

;

Shift phaûi

?

JE

I_DONE

;

khoâng, thoaùt

TEST

AL,100B

;

Ctrl?

JE

I_DONE

;

khoâng, thoaùt


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 102 -

;ñuùng, xöû lyù

CMP

ON_FLAG,1;

thuû tuïc ñang ñöôïc kích hoaït?

JE

RESTOR

;

ñuùng, khöû kích hoaït

MOV

ON_FLAG,1

;

khoâng, kích hoaït

;caát vò trí con troû vaø thoâng tin maøn hình

MOV

AH,03

;

laáy vò trí con troû

MOV

BH,0

;

trang 0

INT

10H

;

DH=haøng,DL=coät

MOV

CURSOR_POS,DX

;

löu vò trí con troû

CALL

SAVE_SCREEN

;

löu maøn hình

;

hieån thò thôøi gian

;

ñònh vò con troû ñeán goùc treân beân phaûi

MOV

DL,72

;

coät 72

CALL

SET_CURSOR

LEA

BX,TIME_BUF

CALL GET_TIME ;

laáy thôøi gian hieän taïi

;

hieån thò thôøi gian

LEA

SI,TIME_BUF

MOV

CX,8

;

8kyù töï

MOV

BH,0

; trang 0

MOV

AH,0EH

;

vieát kyù töï

M1:
LODSB

;

kyù töï trong AL

INT

10H

;

con troû ñöôïc chuyeån

;

ñeán haøng tieáp theo

LOOP

M1

; laëp laïi 8 laàn

JMP

RES_CURSOR

RESTOR:

;phuïc hoài maøn hình

MOV

ON_FLAG,0

;

xoaù côø

CALL

RESTOR_SCREEN

;phuïc hoài vò trí con troû löu tröõ

RES_CURSOR:
MOV

AH,02

;

thieát laäp con troû


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 103 -

MOV

BH,0

MOV

DX,CURSOR_POS

INT

10H

;phuïc hoài caùc thanh ghi

I_DONE: POP DI
POP

SI

POP

DX

POP

CX

POP

BX

POP

AX

POP

ES

POP

DS

IRET

;

trôû veà töø ngaét

MAIN ENDP
C_SEG ENDS
END

START

Taäp tin PGM3_4.ASM

PUBLIC GET_TIME,SETUP_INT
C_SEG SEGMENT

PUBLIC

ASSUME

CS:C_SEG

;
GET_TIME PROC
MOV

AH,2CH

INT

21H

MOV

AL,CH

CALL

CONVERT

MOV

[BX],AX

MOV

AL,CL

CALL

CONVERT

MOV

[BX+3],AX

MOV

AL,DH

CALL

CONVERT

MOV

[BX+6],AX


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 104 -

RET
GET_TIME ENDP
;
CONVERT PROC
MOV

AH,0

MOV

DL,10

DIV

DL

OR

AX,0303H

RET
CONVERT ENDP
;
SETUP_INT PROC
MOV

AH,35H

INT

21H

MOV

[DI],BX

MOV

[DI+2],ES

MOV

DX,[SI]

PUSH

DS

MOV

DS,[SI+2]

MOV

AH,25H

INT

21H

POP

DS

RET
SETUP_INT ENDP
;
C_SEG ENDS
END

LINK PGM3_3+PGM3_2+PGM3_4+PGM3_1.
Chuù yù PGM3_1 ñöôïc lieân keát cuoái cuøng ñeå thuû tuïc INITIALIZE

ñöôïc ñöa vaøo cuoái chöông trình. Vieát caùc chöông trình TSR raát phöùc taïp,
neáu nhö ñaõ coù moät chöông trình TSR khaùc trong heä thoáng, chöông trình
hieän coù coù theå khoâng coøn thöïc hieän ñuùng nöõa


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 105 -

PHUÏ LUÏC A: MOÄT SOÁ CHÖÔNG TRÌNH PHUÏC VUÏ CUÛA DOS

Chöùc naêng

Ngaét

(Hex)

TG vaøo

Keát thuùc chöông trình

20

Keát thuùc nhöng naèm
thöôøng tröïc (max 64KB)

27

DS:DX=ñòachæ byte sau vuøng ñöôïc giöõ
laïi thöôøng truù


CAÙC CHÖÔNG TRÌNH PHUÏC VUÏ CUÛA DOS (NGAÉT 21h)

Chöùc naêng

Soá (Hex)

TG vaøo

TG ra

Ñöa vaøo töø baøn phím

01

AH=01
AL=kyù töï vaøo 8 bit

Ñöa ra maøn hình moät kyù
töï

02

AH=02
DL=kyù töï ra 8 bit

Ñöa ra maùy in

05

AH=05
DL=kyù töï

Ñöa vaøo tröïc tieáp töø baøn
phím vaø khoâng hieän

07

AH=07
AL=kyù töï vaøo 8 bit

Ñöa ra maøn hình moät
chuoãi

09

AH=09
DS:DX = troû ñeán
chuoãi keát thuùc baèng
'$'

Ñöa vaøo ñeäm baøn phím

0A

AH=0A
DS:DX=troû ñeán ñeäm
baøn phím

Thieát laäp vectô ngaét

25

AH=25
AL= soá hieäu ngaét
DS:DX= troû tôùi
chöông trình xöû lyù
ngaét

Laáy ngaøy thaùng naêm

2A

AH=2A

AL=thöù trong tuaàn
CX=naêm (1980-2099
DH=thaùng
DL=ngaøy


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 106 -


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

Chöùc naêng

Soá (Hex)

TG vaøo

TG ra

Ñaët ngaøy thaùng naêm

2B

AH=2B
CX=naêm (1980-2099
DH=thaùng
DL=ngaøy

AL=maõ traû veà

Laáy thôøi gian

2C

AH=2C CL=phuùt

CH=giôø
DL=phaàn traêm giaây
DH=giaây

Ñaët thôøi gian

2D

AH=2D
CL=phuùt
CH=giôø
DL=phaàn traêm giaây
DH=giaây

Keát thuùc chöông trình vaø
thöôøng truù

31

AH=31
AL=maõ traû veà
DX=ñòa chæ ñoaïn
chöông trình treân boä
nhôù ñeå giaûi phoùng

AX=maõ traû veà

Laáy vectô ngaét

35

AH=35
AL=soá hieäu ngaét

ES:BX=vectô ngaét
AX=maõ traû veà

Taïo thö muïc

39

AH=39
DS:DX = troû ñeán
chuoãi ASCII teân
ñöôøng

Neáu sai CF=01,
AX= maõ loãi
Neáu toát: CF=00

Xoaù thö muïc

3A

AH=3A
DS:DX = troû ñeán
chuoãi ASCII teân
ñöôøng

Neáu sai CF=01,
AX= maõ loãi

Ñoåi thö muïc hieän thôøi

3B

AH=3B
DS:DX = troû ñeán
chuoãi ASCII teân
ñöôøng

Neáu sai CF=01,
AX= maõ loãi

Taïo file

3C

AH=3C
CX=ñaëc tính file
DS:DX= troû ñeán

AX=theû file hoaëc maõ
traû veà
CF=00 (toát), 01 (sai)

background image

Hôïp Ngöõ

- 107 -


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

Chöùc naêng

Soá (Hex)

TG vaøo

TG ra

chuoãi ASCII teân file

Môû theû

3D

AH=3D
CX=maõ truy nhaäp
DS:DX = troû ñeán
chuoãi ASCII teân file

AX=theû file hoaëc maõ
traû veà

Ñoùng theû

3E

AH=3E
BX=theû file

AX=theû file hoaëc maõ
traû veà

Ñoïc file hoaëc töø thieát bò

3F

AH=3F
BX=theû file
CX=soá byte caàn ñoïc
DS:DX= troû ñeán
vuøng ñeäm döõ lieäu

AX=soá byte ñoïc ñöôïc
hoaëc maõ traû veà

Ghi file hoaëc ra thieát bò

40

AH=40
BX=theû file
CX=soá byte caàn ghi
DS:DX= troû ñeán
vuøng ñeäm döõ lieäu

AX=soá byte ghi ñöôïc
hoaëc maõ traû veà

Xoaù file

41

AH=41
DS:DX = troû ñeán
chuoãi ASCII teân file

Neáu sai CF=01, AX=
maõ traû veà

Keát thuùc quaù trình

4C

AH=4C
AL= maõ traû veà

Ñoåi teân file

56

AH=56
DS:DX = troû ñeán
chuoãi ASCII teân cuõ
ES:DI = troû ñeán
chuoãi ASCII teân môùi

Neáu sai CF=01, AX=
maõ traû veà








background image

Hôïp Ngöõ

- 108 -

PHUÏ LUÏC B: MOÄT SOÁ CHÖÔNG TRÌNH PHUÏC VUÏ CUÛA ROM-

BIOS



Chöùc naêng

Ngaét

(Hex)

TG vaøo

TG ra

Di chuyeån con troû

10

AH=2
BH=soá hieäu trang
DH=soá hieäu doøng
DL=soá hieäu coät

Laáy vò trí con troû

10

AH=3
BH=soá hieäu trang

DH=soá hieäu coät
DL=soá hieäu doøng
CH=doøng queùt ñaàu
cuûa con troû
CL=doøng queùt cuoái
cuûa con troû

Ñoïc moät kyù töï vaø thuoäc
tính

10

AH=8
BH=trang maøn hình

AH=thuoäc tính
AL=kyù töï

Ghi 1 kyù töï

10

AH=0E
AL=kyù töï
BL=maøu trong kieåu
ñoà thò

Ñoïc moät cung

13

AH=02
AL= soá cung
CH=raõnh
CL=cung
DL=oå ñóa
ES:BX=con troû ñeán
ñeäm

CF=baùo keát quaû
toát/hoûng
AH=maõ traïng thaùi
AL=soá cung ñöôïc
ñoïc

Ghi moät cung

13

AH=03
AL= soá cung
CH=raõnh
CL=cung
DL=oå ñóa
ES:BX=con troû ñeán
ñeäm

CF=baùo keát quaû
toát/hoûng
AH=maõ traïng thaùi
AL=soá cung ñöôïc ghi


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

background image

Hôïp Ngöõ

- 109 -


Nguyeãn Höõu Loäc

Khoa Vaät Lyù

Chöùc naêng

Ngaét

(Hex)

TG vaøo

TG ra

Laáy caùc tham soá hieän
thôøi cuûa oå ñóa

13

AH=08
DL=soá hieäu ñóa

DL=soá oå ñóa
DH=soá löôïng maët
max
CL[0,5]=soá hieäu
cung max
CL[6,7]=2 bit cao
cuûa soá löôïng töø truï
max
CH=ca'c bit thaáp cuûa
soá löôïng töø truï max
CF=côø baùo keát quaû
toát/hoûng
AH=maõ traïng thaùi

Ñoïc kyù töï tieáp töø baøn
phím

16

AH=00

AH=maõ queùt baøn
phím
AL=maõ ASCII

Laáy côø baøn phím

16

AH=02 AL=côø

caùc

phím

bit 0=1: Shift phaûi
bit 1=1: Shift traùi
bit 2=1: Ctrl
bit 3=1: Alt
bit 4=1: Scroll lock
bit 5=1: Num Lock
bit 6=1:Caps lock
bit 7=1: Cheá ñoä cheøn

Göûi moät byte ra maùy in

17

AH=00
AL=kyù töï
DX=soá maùy in

Giaù trò caùc bit:
0: quaù thôøi gian
1: khoâng söû duïng
2: khoâng söû duïng
3=1:loái vaøo/ra
4=1: ñaõ ñöôïc choïn
5=1:heát giaáy
6=1:xaùc nhaän
7=1:khoâng baän

background image

Hôïp Ngöõ

- 110 -

TAØI LIEÄU THAM KHAÛO



1. Ngoân ngöõ laäp trình Assembly vaø maùy vi tính IBM-PC - Ytha Yu vaø

Charles Marut (Quaùch Tuaán Ngoïc-Ñoã Tieán Duõng- Nguyeãn Quang
Khaûi bieân dòch) - Nhaø xuaát baûn Giaùo duïc


2. Laäp trình Hôïp ngöõ Turbo Assembler 2.0 - Phan Tröông Daàn - Nhaø xuaát

baûn Giaùo duïc

3. Caåm nang laäp trình - Peter Norton (Nguyeãn Minh San dòch) - Nhaø xuaát

baûn Giaùo Duïc

4. Caåm nang cho ngöôøi laäp trình treân maùy vi tính IBM- Peter Norton -

Nhaø xuaát baûn Thoáng keâ - Vieän Ñieän töû - Tin hoïc

5. Assembleur facile - PhMercier- Marabout

6. Hardware Reference Manual 8088 - Intel

7. Macro Assembler Programmer's Guide 5.0 - Microsoft










Nguyeãn Höõu Loäc

Khoa Vaät Lyù


Document Outline


Wyszukiwarka

Podobne podstrony:
BCVT Bài Giảng Lập Trình Hướng Đối Tượng (NXB Hồ Chí Minh 2002) Nguyễn Việt Cường, 384 Trang
Giám Sát Công Tác Trắc Địa Xây Dựng Công Trình Đường Ks Nguyễn Tấn Lộc, 32 Trang
ĐHĐL Giáo Trình Kỹ Thuật Lập Trình Pascal (NXB Đà Lạt 2001) Nguyễn Danh Hưng, 135 Trang
ĐHĐL Giáo Trình Kỹ Thuật Lập Trình Nâng Cao (NXB Đà Lạt 2002) Trần Hoàng Thọ, 108 Trang
ĐHTN Giáo Trình Môn Chương Trình Dịch (NXB Thái Nguyên 2007) Nhiều Tác Giả, 157 Trang
BCVT Giám Sát Thi Công Kết Cấu Bê Tông Cốt Thép (NXB Giao Thông Vận Tải 2004) Nguyễn Viết Trung, 54
Cơ Học Lý Thuyết (Tóm Tắt Lý Thuyết & Bài Tập Mẫu) Trịnh Anh Ngọc, 71 Trang
ĐHĐL Giáo Trình Điện Tử Căn Bản Phan Văn Nghĩa, 177 Trang
Slide Áp Dụng Tiêu Chuẩn Quản Lý Chất Lượng ISO 9000 Trong Thi Công Xây Lắp, 76 Trang
Wpływ reklamy na zakup leków, parafarmaceutyków i preparatów witaminowych w opiniach klientów aptek
co läczy faceta z kotem
budownictwo ogólne łączenie dachu ze ścianą
ĐHĐN Chuyên Đề Bê Tông Xi Măng Ths Nguyễn Dân, 55 Trang
Giám Sát Thi Công Và Nghiệm Thu Lắp Đặt Thiết Bị Trong Công Trình Dân Dụng (NXB Hà Nội 2002) Lê Kiề
ĐHBK Bài Giảng Hệ Điều Hành (NXB Hà Nội 2001) Lê Tiến Dũng, 96 Trang
ĐHCT Giáo Trình Thực Hành Lập Trình Hệ Thống (NXB Cần Thơ 2008) Nguyễn Hứa Duy Khang, 39 Trang
KC 01 01 Công Nghệ Cứng Hóa Các Thuật Toán Mật Mã (NXB Hà Nội 2004) Nguyễn Hồng Quang, 71 Trang
ĐHHH Bài Giảng Hệ Điều Hành Mã Nguồn Mở (NXB Hải Phòng 2010) Ngô Quốc Vinh, 93 Trang
Giáo Trình Ngôn Ngữ Lập Trình C (NXB Hồ Chí Minh 2007) Nguyễn Hữu Tuấn, 143 Trang

więcej podobnych podstron