Professional Documents
Culture Documents
Tap Lenh 8086
Tap Lenh 8086
Ngaøy nay, treân theá giôùi khoa hoïc kyõ thuaät phaùt trieån nhanh choùng, ñaëc bieät laø
ngaønh ñieän_ñieän töû. Nhöõng tieán boä naøy ngaøy caøng ñöôïc öùng duïng roäng raõi trong
coâng nghieäp cuõng nhö trong ñôøi soáng sinh hoaït haèng ngaøy cuûa con ngöôøi. Heä thoáng
vi xöû lyù hay coøn goïi laø maùy tính ñieän töû laø moät trong nhöõng öùng duïng ñoù, noù laø thieát
bò xöû lyù thoâng tin, ñieàu khieån caùc thieát bò beân ngoaøi hay caùc thieát bò coâng nghieäp
moät caùch töï ñoäng.
Tröôùc nhu caàu thöïc teá, kit vi xöû lyù laø moät coâng cuï daïy vaø hoïc khoâng nhöõng
giuùp cho sinh vieân nghieân cöùu hoïc taäp, maø coøn coù theå öùng duïng moâ phoûng hoaït ñoäng
cuûa moät maùy tính ñieän töû, ñöa nhöõng tieán boä cuûa khoa hoïc kyõ thuaät daãn vaøo ñôøi
soáng hieän ñaïi. Trong khaû naêng vaø kieán thöùc ñaõ hoïc, toâi quyeát taâm thöïc hieän ñeà taøi:
“THIEÁT KEÁ – THI COÂNG KIT VI XÖÛ LYÙ 8086” ñeå ñaùp öùng nhu caàu treân.
Vi xöû lyù laø moät heä thoáng soá döïa treân cô sôû linh kieän chuû yeáu laø boä vi xöû lyù
(CPU). Tuøy thuoäc vaøo caáu truùc cuûa boä vi xöû lyù rieâng bieät vaø phaàn ñieàu khieån maø ta
coù theå bao goàm nhieàu loaïi vi maïch. Döôùi söï ñieàu khieån baèng chöông trình moät boä vi
xöû lyù thöïc hieän caùc pheùp tính soá hoïc vaø logic, ñoàng thôøi taïo ra nhöõng tín hieäu ñieàu
khieån cho boä nhôù vaø thieát bò vaøo ra. Nhöõng meänh leänh naøy goïi laø chöông trình
nguoàn vaø ñöôïc chöùa trong boä nhôù chæ ñoïc (ROM), khi maát ñieän döõ lieäu trong boä nhôù
naøy khoâng bò maát, khi Reset maùy chöông trình naøy seõ thi haønh tröôùc tieân khôûi taïo
cho maùy laøm vieäc. Khi laøm vieäc CPU ñoïc nhöõng leänh ñoù ra roài thöïc hieän chuùng. Do
ñoù ta coù theå noùi boä vi xöû lyù laø caáu truùc phaàn cöùng ñöôïc xöû lyù baèng phaàn meàm.
Ñeà taøi naøy khoâng chæ giuùp cho sinh vieân hoøan thaønh luaän vaên toát nghieäp maø
coøn hình thaønh trong moãi sinh vieân nhöõng kinh nghieäm, saùng taïo vaø naêng ñoäng. Sau
naøy ñeà taøi seõ keát hôïp vôùi caùc ngaønh chuyeân moân khaùc ñeå phaùt trieån moâ hình naøy
ñöôïc hoaøn thieän hôn.
S
AH AL 6 Haøng
BH BL 5 ñôïi
CH CL 4 leänh
DH DL CS 3
ES Caùc thanh 2
BP ghi ñoaïn
SS 1
DI
DS
SI
IP
SP
Arithmetic logic
unit (ALU)
Caùc côø
Boä vi xöû lyù thöïc hieän caùc leänh theo caùc böôùc sau:
¨ Caùc thanh ghi chæ soá vaø con troû (Index & Pointer Register):
SP Con troû Stack (Stack Pointer)
BP Con troû neàn (Base Pointer)
SI Chæ soá nguoàn (Source Index)
DI Chæ soá ñích (Destnation Index)
¨ Caùc thanh ghi traïng thaùi vaø ñieàu khieån (Status & Control Register):
IP Con troû leänh (Intruction Pointer)
Flag Côø
CL, DH & DL. Nhôø ñieàu naøy maø ta coù nhieàu thanh ghi hôn khi laøm vieäc vôùi caùc soá
lieäu coù kích thöôùc byte daøi. Trong ña soá leänh caùc thanh ghi döõ lieäu ñöôïc choïn tuøy yù
nhöng caùc thanh ghi naøy laïi coù chöùc naêng rieâng coá ñònh trong moät soá ít leänh.
· Thanh ghi tích luõy AX (Accumulator):
Laø thanh ghi ñöôïc söû duïng nhieàu nhaát trong caùc leänh soá hoïc – logic vaø truyeàn
döõ lieäu bôûi vì vieäc söû duïng thanh ghi naøy taïo ra maõ maùy ngaén nhaát.
Trong caùc thao taùc nhaân hoaëc chia moät trong caùc soá haïn tham gia phaûi chöùa
trong AH hoaëc AL, caùc thao taùc vaøo/ra cuõng söû duïng thanh ghi AH hoaëc AL.
· Thanh ghi cô sôû BX (Base):
Thanh ghi BX ñöôïc duøng cho tính toaùn ñòa chæ trong phöông phaùp ñònh ñòa chæ
giaùn tieáp.
· Thanh ghi ñeám CX (Count):
Vieäc thöïc hieän caùc chöông trình laäp ñöôïc thöïc hieän deã daøng nhôø thanh ghi CX,
trong ñoù CX ñoùng vai troø laø boä ñeám voøng laäp. Moät thí duï khaùc cuûa vieäc söû duïng
thanh ghi CX ñoù laø leänh REP (Repeat) leänh naøy ñieàu khieån moät lôùp caùc leänh chuyeân
veà caùc thao taùc chuoãi. CL cuõng ñöôïc söû duïng laø moät bieán ñeám trong caùc leänh dòch
hay quay caùc bit.
· Thanh ghi döõ lieäu DX (Data):
DX duøng ñeå ñònh ñòa chæ giaùn tieáp trong caùc thao taùc vaøo ra, noù cuõng coøn ñöôïc
söû duïng chöùa toaùn haïn, keát quaû trong pheùp nhaân vaø chia.
· Thanh ghi con troû vaø chæ soá:
Caùc thanh ghi SP, BP, SI, DI thöôøng troû tôùi caùc oâ nhôù (töùc laø chöùc caùc ñòa chæ
offset cuûa caùc oâ nhôù ñoù). Khaùc vôùi thanh ghi ñoaïn, caùc thanh ghi con troû vaø ngaên
xeáp ñöôïc söû duïng trong caùc thao taùc soá hoïc vaø moät soá thao taùc khaùc nhau.
· Thanh ghi con troû – ngaên xeáp SP (Stack Pointer):
Di chuyeån töø ñòa chæ cao ñeán ñòa chæ thaáp, duøng ñeå keát hôïp vôùi thanh ghi ñoaïn
Stack SS (Stack Segment) ñeå löu tröõ ñòa chæ trôû veà hoaëc döõ lieäu vaøo trong ngaên xeáp.
· Thanh ghi con troû cô sôû BP (Base Pointer):
Thanh ghi naøy ñöôïc duøng ñeå truy caäp döõ lieäu trong ngaên xeáp maø khoâng laøm
thay ñoåi SP. Tuy nhieân, khaùc vôùi SP thanh ghi BP cuõng coøn ñöôïc söû duïng ñeã truy
caäp döõ lieäu ôû caùc ñoaïn khaùc.
· Thanh ghi chæ soá nguoàn SI (Source Index):
Thanh ghi SI ñöôïc söû duïng ñeå troû tôùi caùc oâ nhôù trong ñoaïn döõ lieäu ñöôïc ñònh
bôûi thanh ghi ñoaïn döõ lieäu DS (Data Segment), coù theå truy caäp deã daøng caùc oâ nhôù
lieân tieáp baèng caùch taêng SI.
· Thanh ghi chæ soá ñích DI (Destination Index):
Thanh ghi DI coù chöùc naêng töông töï nhö thanh ghi SI vaø ñöôïc duøng keát hôïp vôùi
thanh ghi ñoaïn theâm ES (Extra Segment). Caû hai DI vaø SI thích hôïp trong caùc thao
taùc sao cheùp, di chuyeån hoaëc so saùnh caùc khoái döõ lieäu coù dung löôïng ñeán 64KB.
8086 khoâng thöïc hieän leänh tröïc tieáp trong boä nhôù maø leänh ñöôïc laáy ôû haøng ñôïi
leänh coù caáu taïo gioáng nhö moät thanh ghi dòch (FIFO: First In First Out: vaøo tröôùc ra
tröôùc) chöùa caùc maõ leänh cung caáp bôûi khoái BIU. Thanh ghi IP chæ ñeán leänh tieáp theo
chöa ñöôïc nhaäp vaøo haøng ñôïi leänh vaø ñöôïc duøng keát hôïp vôùi thanh ghi CS. Thanh
ghi IP ñöôïc caäp nhaät moãi khi coù moät leänh ñöôïc thöïc hieän xong, khaùc vôùi caùc thanh
ghi khaùc, IP khoâng bò taùc ñoäng tröïc tieáp bôûi caùc leänh.
· Thanh ghi côø (Flag Register):
Thanh ghi côø cuûa 8086 coù ñoä daøi 16bit (2byte) byte thaáp chöùa caùc bit traïng thaùi
gioáng nhö trong 8085 phaûn aùnh traïng thaùi cuûa vi xöû lyù, byte cao chöùa 1bit traïng thaùi
ñoù laø bit 11 vaø 3 bit ñieàu khieån duøng ñeå ñieàu khieån hoaït ñoäng cuûa vi xöû lyù. Sau ñaây
laø caáu taïo cuûa thanh ghi côø trong 8086:
15 8 7 0
O D I T S Z A P C
Thanh ghi côø cuûa 8086:
C: carry flag.
P: parity flag.
A: auxiliary flag.
Z: zero flag.
S: sign flag.
T: trap flag.
I: interrupt enable flag.
D: direction flag.
O: overflow flag.
+ Côø nhôù CF:
Côø nhôù CF ñöôïc thieát laäp khi coù soá nhôù töø bit MSB. Trong pheùp coäng hoaëc soá
thieáu trong pheùp tröø (MSB trong caùc leänh byte laø bit 7 vaø trong caùc leänh word laø bit
15) côø CF cuõng bò aûnh höôûng bôûi caùc leänh quay vaø dòch.
+ Côø chaún leû PF:
Sau caùc leänh soá hoïc hoaëc logic ñoái vôùi caùc leänh byte neáu soá löôïng soá ‘1’ trong
byte keát quaû laø chaún thì côø PF ñöôïc thieát laäp laø ‘1’ ngöôïc laïi laø ‘0’neáu laø leû, ñoái vôùi
caùc leänh word chæ xeùt caùc byte thaáp.
+ Côø nhôù phuï AF:
Côø nhôù phuï ñöôïc thieát laäp neáu coù nhôù (coäng) hoaëc coù thieáu (tröø) töø phaân nöûa
döôùi ñeán phaân nöûa treân cuûa toaùn haïn (ñoái vôùi leänh byte ñoù laø bit 3 vaø ñoái vôùi leänh
word laø bit 7) côø AF ñöôïc söû duïng trong caùc thao taùc vôùi soá BCD.
+ Côø zero ZF:
Côø zero ñöôïc thieát laäp khi keát quaû baèng 0.
+ Côø daáu SF:
Côø daáu laø ‘1’ khi bit MSB cuûa keát quaû baèng ‘1’ töùc laø soá aâm, ñoái vôùi leänh byte
MSB laø bit 7 vaø trong leänh word laø bit 15.
+ Côø baãy TF:
Taïo khaû naêng thöïc hieän chöông trình theo töøng böôùc, khi TF baèng ‘1’ 8086
phaùt sinh ngaét loaïi 1 (ngaét cöùng). Chöông trình DEBUG söû duïng khi thi haønh leänh T
(trace) ñeå chaïy töøng böôùc moät leänh. Ñaàu tieân DEBUG thieát laäp côø TF roài môùi
chuyeån ñieàu khieån cho leänh ñoù. Sau khi leänh ñöôïc thi haønh vi xöû lyù seõ phaùt sinh moät
ngaét do TF ñöôïc laäp DEBUG söû duïng chính phuïc vuï ngaét naøy ñeå laáy quyeàn ñieàu
khieån töø vi xöû lyù.
+ Côø ngaét IF:
Côø ngaét ñöôïc söû duïng ñeå ñieàu khieån caùc ngaét phaàn cöùng beân ngoaøi, neáu côø
naøy ñöôïc thieát laäp caùc ngaét phaàn cöùng coù theå ngaét 8086. Khi xoùa IF, caùc ngaét beân
ngoaøi khoâng coøn taùc duïng nöõa (bò che). Thöïc ra vaãn coøn moät ngaét cöùng khoâng che
ñöôïc NMI (Non Maskable Interrupt).
Tröôùc khi vi xöû lyù trao quyeàn ñieàu khieån cho moät phuïc ngaét noù xoùa caû IF vaø
TF, nhö vaäy phuïc ngaét ñoù seõ khoâng bò ngaét. Taát nhieân moät phuïc vuï ngaét coù theå ñoåi
côø ñeå cho pheùp ngaét khi noù ñang thi haønh.
+ Côø traøn OF:
Côø traøn laø ‘1’ khi coù hieän töôïng traøn vaø ngöôïc laïi noù baèng ‘0’. Hieän töôïng traøn
cho thaáy moät söï thaät laø phaïm vi bieåu dieãn caùc soá trong maùy tính laø coù giôùi haïn.
Phaïm vi bieåu dieãn caùc soá coù daáu trong moät word töø –32768 ñeán +32767 vaø
trong moät byte töø –126 ñeán +127.
Ñoái vôùi caùc soá khoâng daáu töø 0 ñeán 65535 cho moät word vaø töø 0 ñeán 255 cho
moät byte. Neáu keát quaû cuûa moät pheùp tính vöôït ra ngoaøi phaïm vi naøy thì hieän töôïng
traøn seõ xaûy ra vaø keát quaû nhaän ñöôïc bò caét bôùt seõ khoâng phaûi laø keát quaû ñuùng.
+ Côø ñieàu khieån DF:
Laø moät trong ba côø ñieàu khieån duøng ñieàu khieån caùc thao taùc cuûa vi xöû lyù coâng
duïng cuûa DF laø dòch höôùng cho caùc thao taùc chuoãi, caùc thao taùc naøy ñöôïc thöïc hieän
bôûi hai thanh ghi chæ soá SI & DI, noäi dung cuûa hai thanh ghi naøy seõ töï ñoäng taêng leân
khi DF = 0 vaø giaûm xuoáng khi DF =1.
2). Khoái giao tieáp (BIU):
Khoái giao tieáp laøm ñôn giaûn vieäc lieân laïc giöõa EU vaø boä nhôù hoaëc caùc vi maïch
vaøo ra. Noù coù nhieäm vuï gôûi caùc ñòa chæ, soá lieäu vaø tín hieäu ñieàu khieån vaøo caùc bus,
BIU & EU lieân heä vôùi nhau baèng caùc bus noäi boä, khi EU ñang thi haønh moät leänh,
BIU naïp 6 byte maõ leänh tieáp theo vaøo vaø ñaët chuùng vaøo haøng ñôïi leänh, muïc ñích
cuûa vieäc naøy laø laøm taêng toác ñoä cuûa vi xöû lyù. Neáu EU caàn lieân laïc vôùi boä nhôù hay
thieát bò ngoaïi vi, BIU seõ treo caùc leänh nhaän tröôùc vaø thöïc hieän thöïc hieän caùc thao taùc
caàn thieát. BIU caáu taïo goàm caùc thanh ghi ñoaïn vaø con troû leänh duøng ñeå chöùa ñòa chæ
caùc oâ nhôù.
Boä nhôù laø taäp hôïp caùc byte oâ nhôù, moãi byte coù moät ñòa chæ xaùc ñònh baét ñaàu töø
0. 8086 gaùn cho moãi oâ nhôù moät ñòa chæ vaät lyù 20 bit. Nhö vaäy, noù coù theå ñònh ñòa chæ
ñeán 220 byte (töông ñöông 1MB) oâ nhôù, caùc byte ñaàu tieân cuûa boä nhôù coù ñòa chæ nhö
sau:
0000 0000 0000 0000 0000
0000 0000 0000 0000 0001
0000 0000 0000 0000 0010
0000 0000 0000 0000 0011
0000 0000 0000 0000 0100
Ñeå ñôn giaûn, caùc ñòa chæ treân thöôøng ñöôïc bieåu dieãn baèng soá thaäp luïc phaân nhö
sau:
00000H
00001H
00002H
………… H
vaø cöù tieáp tuïc cho ñeán giaù trò lôùn nhaát laø FFFFFH
Do caùc ñòa chæ quaù lôùn (20 bit) khoâng theå chöùa trong moät thanh ghi cuûa 8086
(16 bit) neân 8086 chia boä nhôù thaønh caùc ñoaïn boä nhôù (Memory Segment).
Moät ñoaïn boä nhôù laø moät khoái goàm 216 (64K) oâ nhôù lieân tieáp nhau, moãi ñoaïn
ñöôïc xaùc ñònh baèng moät ñòa chæ ñoaïn baét ñaàu töø ñòa chæ 0, ñòa chæ ñoaïn laø moät soá 16
bit neân ñòa chæ ñoaïn lôùn nhaát laø FFFF. Beân trong moãi ñoaïn soá oâ nhôù ñöôïc xaùc ñònh
baèng ñòa chæ töông ñoái (offset), ñoù laø soá byte tính töø ñaàu ñoaïn, vôùi moät ñoaïn 64K thì
offset cuõng laø moät soá 16 bit, byte ñaàu tieân trong ñoaïn coù offset baèng 0 vaø byte cuoái
cuøng baèng FFFF.
Moät oâ nhôù coù theå ñöôïc xaùc ñònh baèng ñòa chæ ñoaïn:ñòa chæ töông ñoái trong ñoaïn
(segment:offset) vaø ñöôïc goïi laø ñòa chæ logic.
Thí duï: oâ nhôù A4FB:4872 coù ñòa chæ ñoaïn laø A4FB vaø ñòa chæ offset laø 4872.
Ñeå tìm ñòa chæ vaät lyù cuûa oâ nhôù tröôùc tieân ta dòch ñòa chæ ñoaïn veà beân traùi 4 bit vaø
sau ñoù coäng vôùi ñòa chæ offset, nhö vaäy ñòa chæ vaät lyù cuûa oâ nhôù A4FB:4872 ñöôïc
tính nhö sau: A4FB0
4872
A9822
b). Saép xeáp ñoaïn:
Trong boä nhôù ñoaïn 0 baét ñaàu töø ñòa chæ 0000:0000 = 00000 vaø keát thuùc ôû
0000:FFFF = 0FFFF, ñoaïn 1 baét ñaàu töø ñòa chæ 0001:0000 = 00010 vaø keát thuùc ôû ñòa
chæ 0001:FFFF = 1000F. Nhö vaäy, coù raát nhieàu söï choàng nhau giöõa caùc ñoaïn. Caùc
ñoaïn baét ñaàu töø caùc ñòa chæ caùch nhau 16byte vaø ñòa chæ ñaàu cuûa moãi ñoaïn luoân keát
thuùc baèng caùc soá 0. 16byte ñöôïc goïi laø moät khuùc (Paragraph), caùc ñòa chæ chia heát
cho 16 (caùc ñòa chæ keát thuùc baèng 0) laø caùc bieân giôùi khuùc (Paragraph Boundary)
c). Caùc ñoaïn cuûa chöông trình:
Moãi ñoaïn chöông trình ngoân ngöõ maùy bao goàm caùc leänh vaø döõ lieäu, coøn moät
vuøng ñaëc bieät trong RAM goïi laø ngaên xeáp (stack). Maõ leänh, döõ lieäu vaø ngaên xeáp cuûa
chöông trình ñöôïc naïp vaøo caùc ñoaïn boä nhôù khaùc nhau ñoù laø ñoaïn maõ (code
segment), ñoaïn döõ lieäu (data segment), ñoaïn ngaên xeáp (stack segment).
Ñeå theo doõi caùc ñoaïn khaùc nhau cuûa chöông trình 8086 ñöôïc cung caáp 4 thanh
ghi ñoaïn ñeå chöùa caùc ñòa chæ ñoaïn, caùc thanh ghi CS, DS, SS laàn löôïc chöùa caùc ñòa
chæ ñoaïn maõ, ñoaïn döõ lieäu, vaø ñoaïn ngaên xeáp. Neáu chöông trình muoán truy caäp ñeán
moät döõ lieäu thöù hai noù coù theå söû duïng thanh ghi ñoaïn theâm ES (extra segment).
Moät chöông trình khoâng phaûi bao giôø cuõng caàn chieám heát moät ñoaïn 64KB, do
ñaëc ñieåm choàng nhau giöõa caùc ñoaïn cho pheùp caùc ñoaïn cuûa moät chöông trình nhoû
hôn 64KB coù theå ñaët gaàn laïi vôùi nhau. Taïi moät thôøi ñieåm, chæ coù caùc oâ nhôù ñöôïc
ñònh ñòa chæ bôûi 4 thanh ghi ñoaïn môùi coù theå truy caäp, nghóa laø chæ coù 4 ñoaïn boä nhôù
laø taùc ñoäng. Tuy nhieân noäi dung cuûa caùc thanh ghi ñoaïn coù theå thay ñoåi bôûi chöông
trình ñeå truy caäp ñeán caùc ñoaïn khaùc nhau.
d). Haøng ñôïi leänh:
Nhö ta ñaõ bieát, ñeå taêng toác ñoä vi xöû lyù, khoái BIU tieáp nhaän caùc leänh vaø ñöa
vaøo haøng ñôïi leänh (Queue) trong khi ñoù khoái EU ñang thi haønh leänh. Haøng ñôïi leänh
coù theå nhaän 6 byte maõ leänh, caùc leänh cuûa 8086 coù ñoä daøi töø 1 ñeán 6 byte, neáu leänh
chöa vaøo ñaày ñuû trong haøng ñôïi leänh thì khoái EU seõ chôø cho ñeán khi leänh naïp heát
vaøo haøng ñôïi leänh.
II. CHÖÙC NAÊNG CUÛA 8086:
1). Sô ñoà chaân cuûa 8086:
8086 laø vi xöû lyù 16 bit noù goàm 16 ñöôøng döõ lieäu vaø 20 ñöôøng ñòa chæ, caùc
ñöôøng döõ lieäu töø D0 ñeán D15 vaø caùc ñöôøng ñòa chæ töø A0 ñeán A15 hoaït ñoäng theo
phöông phaùp ña loä thôøi gian.
8086 coù theå laøm vieäc ôû hai cheá ñoä:
- Cheá doä Minimum.
- Cheá ñoä Maximum.
Trong cheá ñoä minimum, 8086 ñieàu khieån caùc thieát bò baèng caùc tín hieäu ñieàu
khieån cuûa chính noù, trong cheá ñoä naøy hoã trôï boä xöû lyù toaùn hoïc 8087.
Trong cheá ñoä maximum caàn thieát phaûi keát hôïp vôùi vi maïch ñieàu khieån bus
8288 ñeå taïo ra caùc tín hieäu ñoïc – ghi cho boä nhôù vaø caùc thieát bò ngoaïi vi vaø cheá ñoä
naøy cho pheùp laøm vieäc vôùi 8087.
Sau ñaây laø sô ñoà chaân cuûa 8086 ôû caû hai cheá ñoä minimum vaø maximum:
GND 1 40 Vcc
AD14 2 39 AD15
AD13 3 38 A16 /S3
AD12 4 37 A17 /S4
AD11 5 36 A18 /S5
AD10 6 35 A17 /S6
GVHD: NGUYEÃN ÑÌNH PHUÙ
AD 7 9 34 BHE/S7 SVTH: NGOÂ VAÊN BÌNH
8086
AD8 8 33 MN/MX
AD7 9 32 RD
Luaän vaên toát nghieäp trang11
Gioáng nhö trong 8085, caùc ñöôøng ñòa chæ - döõ lieäu naøy laøm vieäc theo nguyeân
taéc ña loä thôøi gian, laø ñòa chæ trong chu kyø T1 vaø laø döõ lieäu trong chu kyø T2, T3, Tw,
T4, taùc ñoäng ôû möùc cao, coù caáu taïo ba traïng thaùi vaø ôû traïng thaùi toång trôû cao trong
luùc vi xöû lyù ‘Interrup acknowlegde’ vaø ‘Hodl acknowleagde’
· A16/S3 …… A19/S 6 – Addres/Status (output):
Trong chu kyø T1 laø 4 bit ñòa chæ cao khi thao taùc vôùi boä nhôù, trong luùc thao taùc
vôùi thieát bò vaøo-ra chaân naøy coù gía trò thaáp. Trong caû hai thao taùc cuõng nhö vaøo – ra
caùc bit naøy laø traïng thaùi trong caùc chu kyø T2, T3, Tw, T4. Traïng thaùi bit cao cho pheùp
ngaét, S5 ñöôïc caäp nhaät taïi moãi thôøi ñieãm baét ñaàu cuûa moãi chu kyø ñoàng hoà. S3 & S4
cho bieát thanh ghi ñoaïn ñang ñöôïc söû duïng, thoâng tin naøy caàn thieát cho Co-processor
xaùc ñònh vò trí cuûa toaùn haïng. Coù caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi
vi xöû lyù ‘Hold acknowlegde’.
S3 S4 Thanh ghi ñoaïn ñöôïc choïn
0 0 Thanh ghi ñoaïn theâm.
0 1 Thanh ghi ñoaïn ngaên xeáp.
1 0 Thanh ghi ñoaïn leänh.
1 1 Thanh ghi ñoaïn döõ lieäu .
Hai bit S3 & S4 ñeå choïn caùc thanh ghi ñoaïn.
· BHE/S7 – Bus high enable / status (output):
Keát hôïp vôùi bit ñòa chæ A0 ñeå xaùc ñònh cheá ñoä truyeàn döõ lieäu, BHE ôû möùc thaáp
trong chu kyøT1 cuûa caùc thao taùc ñoïc – ghi vaø chaáp nhaän ngaét khi moät byte ñöôïc
truyeàn trong byte cao cuûa bus döõ lieäu. S7 coù hieäu löïc trong caùc chu kyø T2, T3 & T4,
caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold’.
BHE A0 Kieåu truyeàn döõ lieäu
0 0 Truy xuaát 16 bit
0 1 Truy xuaát byte cao töø ñòa chæ leû
1 0 Truy xuaát byte thaáp ñòa chæ chaün.
1 1 Khoâng söû duïng .
Caùc kieåu truy xuaát döõ lieäu.
· RD – Read (output):
Tín hieäu ra ñieàu khieån vieäc ñoïc boä nhôù hoaëc khoái vaøo ra phuï thuoäc vaøo bit
traïng thaùi S2, möùc thaáp taïi T2, T3 vaø Tw trong moãi chu kyø ñoïc, caáu taïo ba traïng thaùi
vaø toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’.
· Test (input):
Tín hieäu vaøo ñöôïc kieãm tra bôûi leänh ‘WAIT’ vi xöû lyù seõ khoâng laøm gì caû khi
ñieän aùp chaân naøy coù giaù trò thaáp, ñoàng boä taïi caïnh leân cuûa moãi xung ñoàng hoà.
· MN-MX – Minimum-Maximum (input):
Chaân choïn cheá ñoä laøm vieäc cuûa 8086, cheá ñoä laøm vieäc laø minimum töông öùng
vôùi möùc cao vaø cheá ñoä laøm vieäc laø maximum öùng vôùi möùc thaáp. Bus ñieàu khieån ôû
hai cheá ñoä coù chöùc naêng khaùc nhau.
· M/IO (output):
Ngoû ra traïng thaùi gioáng nhö bit S0 ôû cheá ñoä maximum duøng ñeå baùo vò trí ñang
truy xuaát döõ lieäu. Möùc cao laø boä nhôù vaø möùc thaáp laø khoái vaøo-ra. Caáu taïo ba traïng
thaùi, toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’.
· WR – write (output):
Tín hieäu ra ñieàu khieån thao taùc ghi vaøo boä nhôù hoaëc khoái vaøo-ra tuøy theo giaù
trò cuûa ngoõ M/IO. Taùc ñoäng möùc thaáp ôû T2, T3 vaø Tw cuûa moãi chu kyø ghi, caáu taïo ba
traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’.
· INTRA – Interrup Acknowlegde (output):
Tín hieäu chaáp thuaän ngaét, taùc ñoäng möùc thaáp taïi T2, T3 vaø Tw duøng ñeå ñöa ñòa
chæ cuûa ngaét leân bus döõ lieäu.
· ALE – Adress Latch Enable
Tín hieäu ñieàu khieån choát ñòa chæ 74LS373 hoaëc 8282/8283 taùc ñoäng möùc cao
trong khoaûng T1 cuûa moãi chu kyø bus :
+ Khi ALE = 1 caùc bit AD0 … AD15 laø ñòa chæ.
· Hold (input):
Tín hieäu vaøo cho bieát moät linh kieän ñoøi quyeàn söû duïng bus, taùc ñoäng ôû möùc
cao.
· HLDA – Hold acknowlegde (output):
Tín hieäu ra ôû möùc cao cho bieát yeâu caàu Hold ñöôïc chaáp thuaän, vi xöû lyù seõ treo
bus noäi boä vaø caùc ñöôøng ñieàu khieån cuûa noù ôû traïng thaùi toång trôû cao.
· DT/R – Data Transmit/Receive (output):
Tín hieäu ra duøng ñeå ñieàu khieån höôùng truyeàn döõ lieäu cuûa vi maïch thu - phaùt.
Caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold
acknowlegde’.
· DEN – Data enable (output):
Tín hieäu ra ôû möùc thaáp cho moãi chu kyø thao taùc boä nhôù vaø I/O vaø caû INTRA
ñieàu khieån ngoõ ra cho pheùp cuûa 8286/8287 trong hoaït ñoäng thu – phaùt döõ lieäu. Caáu
taïo ba traïng thaùi, traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’.
· S0, S1, S2 (thoâng tin traïng thaùi):
Vi maïch 8288 döïa treân caùc thoâng tin naøy ñeå thöïc hieän caùc thao taùc ñieàu khieån.
Caáu taïo ba traïng thaùi, traïng thaùi toång trôû cao khi ‘Hold acknowlegde’. Taùc ñoäng
trong caùc chu kyø T4, T1 & T2 vaø trôû veà traïng thaùi thuï ñoäng ôû T3 hoaëc Tw khi Ready ôû
möùc cao. Moät söï thay ñoåi baát kyø cuûa tín hieäu naøy trong chu kyø T4 ñöôïc duøng ñeå
ñaùnh daáu thôøi ñieåm baét ñaàu cuûa chu kyø bus vaø trôû veà thuï ñoäng ôû trong T3 hoaëc Tw
xaùc ñònh ñieåm keát thuùc cuûa chu kyø bus.
1 0 Naïp byte maõ leänh ñaàu tieân vaøo thanh ghi leänh.
1 1 Naïp byte maõ leänh tieáp theo cuûa leänh nhieàu byte
MN/ MX Vcc
+Vcc
M/ IO
INTA
CLK
RES RD
READY
WR
828 RESET
DT/ R
RDY
DEN
ALE STB
8086 CPU GND OE
Wait AD0¸AD15
ADDR/DATA 73LS373 ÑÒA CHÆ
State A16 ¸A19 OCTAL
Genarator LATCH
BHE
T
OE
8286 DÖÕ LIEÄU
Transceiver
BHE
CSO H CSO L WE OD CE OE CS RD WR
RAM ROM PERIPHERAL
Hình 1.3: Moâ phoûng keát noái heä thoáng vi xöû lyù 8086
- ÔÛ hai cheá ñoä neâu treân toâi thöïc hieän chæ nghieân cöùu cheá ñoä minimum.
CLK
ALE
M/IO
RD
Chu kyø
DT/R ñoïc
DEN
WR
Chu kyø
ghi
DT/R
DEN
Hình 1.4: Giaûn ñoà thôøi gian ñoïc vaø ghi cuûa mP8086
a). Giaûi thích giaûn ñoà thôøi gian ñoïc vaø ghi:
+ ÔÛ chu kyø T1:
Trong chu kyø naøy ñòa chæ cuûa boä nhôù hay thieát bò ngoaïi vi ñöa ra treân caùc
ñöôøng ñòa chæ hoaëc ñòa chæ döõ lieäu vaø ñòa chæ traïng thaùi. Caùc tín hieäu ñieàu khieån
ALE, DT/R, M/IO cuõng ñöôïc ñöa ra ñeå giuùp hoaøn taát vieäc giöõ thoâng tin ñòa chæ naøy.
+ ÔÛ chu kyø T2:
Trong chu kyø naøy CPU ñöa ra caùc tín hieäu ñieàu khieån RD hoaëc WR, DEN vaø
tín hieäu döõ lieäu treân D0 ¸ D15 neáu laø leänh ghi. DEN thöôøng duøng ñeå môû caùc boä ñeäm
cuûa bus döõ lieäu neáu chuùng ñöôïc duøng trong heä thoáng. Taïi cuoái chu kyø T2 CPU laáy
maãu tín hieäu Ready ñeå xöû lyù trong chu kyø tieáp theo khi noù phaûi laøm vieäc vôùi boä nhôù,
thieát bò ngoaïi vi chaäm.
+ ÔÛ chu kyø T3:
Trong chu kyø naøy CPU daøng thôøi gian cho boä nhôù hay thieát bò ngoaïi vi truy caäp
döõ lieäu. Neáu laø chu kyø ñoïc döõ lieäu thì taïi cuoái T3 CPU seõ laáy maãu tín hieäu cuûa bus
döõ lieäu. Neáu taïi cuoái chu kyø T2 maø CPU phaùt hieän ra tín hieäu Ready = 0 thì CPU töï
xen vaøo T3 moät chu kyø T ñeå taïo chu kyø ñôïi Tw = n * T nhaèm keùo daøi thôøi gian ñeå
thöïc hieän leänh, taïo ñieàu kieän cho boä nhôù vaø thieát bò ngoaïi vi chaäm coù ñuû thôøi gian
hoaøn taát coâng vieäc ñoïc-ghi döõ lieäu.
+ ÔÛ chu kyø T4:
Trong chu kyø naøy caùc tín hieäu treân bus ñöôïc giaûi hoaït (ñöa veà traïng thaùi khoâng
tích cöïc) ñeå chuaån bò cho chu kyø bus môùi. Tín hieäu WR trong khi chuyeån traïng thaùi
töø ‘0’ leân ‘1’ seõ kích hoïat traïng thaùi ghi vaøo boä nhôù hay thieát bò ngoaïi vi.
b). Nguyeân taéc thöïc hieän chöông trình cuûa vi xöû lyù 8086:
Caùc chæ thò cuûa 8086 coù ñoä daøi 1 byte ñeán 6 byte, töøng chæ thò ñöôïc khoái thöïc
hieän laáy ra töø haøng ñôïi leänh sau ñoù giaûi maõ vaø thöïc hieän. Caùc maõ leänh khaùc tieáp
theo laïi ñöôïc naïp vaøo haøng ñôïi leänh bôûi khoái BIU:
Bus Interface unit Boä nhôù
CS 2890 28A00 BB
DS 0000 1 00
SS 0000 IP 2 02
ES 0000 0106 3 8B
4 07
+ 5
28A06
43
03
7 07
BB 00 02 6B 07 43
Hình 1.5: Quaù trình naïp haøng ñôïi leänh cuûa BIU
c). Truy xuaát boä nhôù vaø söï saép xeáp caùc ñoaïn:
8086 coù theå quaûn lyù ñeán 1MB boä nhôù, ñeå ñaùnh ñòa chæ ñöôïc 1MB (1.048.576
byte) caàn phaûi coù 20 ñöôøng ñòa chæ. BIU xaùc ñònh ñòa chæ vaät lyù naøy baèng caùch coäng
ñòa chæ segment vôùi ñòa chæ offset. Tröôùc tieân nhaân ñòa chæ segment vôùi 16 (vì dòch
sang traùi 4bit) vaø sau ñoù coäng vôùi offset, toång soá nhaän ñöôïc chính laø ñòa chæ vaät lyù
cuûa oâ nhôù vaø seõ ñöôïc ñöa vaøo bus ñòa chæ.
AX 00 00 0000 CS
BX 12 80 3400 DS
CX 00 00 0000 SS
DX 00 00 0000 ES
1280 3400
+
35280
8B 07
35280 34
1 12
Ñòa chæ offset ñöôïc laáy ra töø moät thanh ghi cuûa khoái EU (thanh ghi döõ lieäu, chæ
soá hoaëc boä ñeám leänh). Thanh ghi naøy ñöôïc BIU saép xeáp coá ñònh thaønh töøng caëp.
Hình treân seõ moâ taû vieäc saép xeáp caùc thanh ghi ñeå xaùc ñònh ñòa chæ vaät lyù.
Thì bit ñaàu (opcode) naøy luoân laø ‘100010’ (ñoái vôùi thanh ghi ñoaïn thì khaùc).
Ñoái vôùi bit ‘D’ duøng ñeå chæ höôùng ñi cuûa döõ lieäu.
D = 0 thì döõ lieäu ñi töø thanh ghi cho bôûi 3 bit cuûa REG.
D = 1 döõ lieäu ñi ñeán thanh ghi cho bôûi 3 bit REG.
Ñoái vôùi bit W duøng ñeå chæ raèng moät byte (W = 0) hoaëc moät töø (W = 1) seõ ñöôïc
chuyeån.
II. CAÙC PHÖÔNG PHAÙP ÑÒNH ÑÒA CHÆ CUÛA VI XÖÛ LYÙ 8086:
Phöông phaùp ñònh ñòa chæ (Addressing Mode) laø caùch ñeå CPU tìm thaáy toaùn
haïng cho caùc leänh cuûa noù khi hoaït ñoäng. Moät boä vi xöû lyù coù theå coù nhieàu cheá ñoä
ñònh ñòa chæ.
Caùc cheá ñoä ñònh ñòa chæ naøy ñöôïc xaùc ñònh ngay töø khi cheá taïo ra boä vi xöû lyù
vaø sau naøy ngöôøi ta laáy ñoù ñeå laøm chuaån maø khoâng thay ñoåi.
Ngoaøi caùc phöông phaùp ñònh ñòa chæ: töùc thôøi, tröïc tieáp, giaùn tieáp gioáng nhö cuûa
8085, vi xöû lyù 8086 coøn coù theâm caùc caùch ñònh ñòa chæ khaùc vaø ñöôïc phaân loaïi nhö
sau:
- Ñònh ñòa chæ baèng thanh ghi.
Tröôùc
2300
AX SP CS 2300
0100 B8
BX BP DS
PC 0100 00
CX SI SS
12
DX DI ES
O D I T S Z A P C
FI
Sau
2300
AX 1200 SP CS 2300 B8
BX BP DS PC 0103 00
CX SI SS 12
DX DI ES 0103
O D I T S Z A P C
FI
Trong chæ thò bao goàm ñòa chæ offset cuûa toaùn haïng, ñòa chæ ñoaïn ñöôïc quy ñònh
laø noäi dung cuûa thanh ghi DS.
Thí duï: Mov ax, [0230]
Mov ax, [0230] CPU Boä nhôù
Tröôùc
AX SP CS 2300
2300
BX BP DS 2780
PC 0100 010 B8 2080 00
CX SI SS
00 12
DX DI ES
12
O D I T S Z A P C
FI
Sau
2300
AX 1200 SP CS 2300
B8 208 00
BX BP DS 2780 PC 1003
00 12
CX SI SS
12
DX DI ES
010
FI
AX SP CS 2300
2780 2300
BX 0280 BP DS PC 0100 010 8B 2080 00
CX SI SS 07 12
DX DI ES
O D I T S Z A P C
FI
Sau
2300
AX 1200 SP CS 2300
8B 208 00
BX 0280 BP DS 2780 PC 1002
07 12
CX SI SS
DX DI ES 010
O D I T S Z A P C
FI
Chuù yù: neáu söû duïng AL hoaëc AX trong caùc leänh truyeàn töø thanh ghi vaøo oâ nhôù
vaø ngöôïc laïi seõ nhaän ñöôïc maõ coâng taùc ngaén hôn khi söû duïng caùc thanh ghi khaùc.
¨ Truyeàn töùc thôøi vaøo thanh ghi:
Mov (Reg), (Data)
Trong leänh naøy, döõ lieäu ñöôïc truyeàn töùc thôøi vaøo thanh ghi.
Thí duï: Mov BL, 20
Giaù trò 20 ñöôïc ñöa vaøo thanh ghi BL.
¨ Truyeàn töùc thôøi vaøo boä nhôù:
Mov (Mem), (Data)
Trong leänh byte döõ lieäu ñöôïc truyeàn töùc thôøi vaøo oâ nhôù coù ñòa chæ (Mem).
Trong leänh word döõ lieäu ñöôïc truyeàn töùc thôøi vaøo 2 oâ nhôù coù ñòa chæ (Mem) vaø
(Mem + 1).
Thí duï: Mov [1200], 50
Giaù trò 50 ñöôïc ñöa vaøo oâ nhôù coù ñòa chæ 1200.
Mov Word PTR [1200], 50
Giaù trò Word 0050 ñöôïc ñöa vaøo 2 oâ nhôù baét ñaàu taïi ñòa chæ 1200, 50 (LSB) vaøo
ñòa chæ 1200, 00 (MSB) vaøo ñòa chæ 1201.
- Truy xuaát tröïc tieáp coång:
IN (Reg), (Port)
Ñoïc noäi dung cuûa coång vaøo thanh ghi. thanh ghi söû duïng laø AL (daïng byte) vaø
AX (daïng Word), ñòa chæ coång laø moät soá 8 bit.
OUT (Reg), (Port)
Xuaát noäi dung cuûa thanh ghi ra coång.
- Truy xuaát giaùn tieáp coång:
IN (Reg), DX
Ñoïc noäi dung cuûa coång coù ñòa chæ chöùa trong DX vaøo thanh ghi. Thanh ghi söû
duïng laø AL hoaëc AX, ñòa chæ coång laø soá 16 bit.
OUT DX, (Reg)
Gôûi noäi dung thanh ghi ra coång coù ñòa chæ chöùa trong DX
2.2). Nhoùm leänh soá hoïc:
Bao goàm caùc pheùp tính cô baûn (coäng, tröø, nhaân vaø chia) vaø pheùp so saùnh, toaùn
haïng coù theå laø döõ lieäu 8 bit hoaëc 16 bit, keát quaû coù theå laø 8 bit, 16 bit hoaëc 32 bit.
Caùc toaùn haïng ñöôïc chöùa trong thanh ghi boä nhôù töùc thôøi. Tuøy theo thao taùc, keát quaû
coù theå ñöôïc chöùa trong 1 hoaëc 2 thanh ghi trong boä nhôù.
· Pheùp coäng:
Vi xöû lyù 8086 thöïc hieän pheùp coäng coù löu yù soá nhôù hoaëc khoâng löu yù soá nhôù 8
bit hoaëc 16 bit.
+ Soá haïng ñaàu tieân ñöôïc chöùa trong caùc thanh ghi döõ lieäu (AX, BX, CX,
DX, AH, AL, BH …), trong moät thanh ghi chæ soá hoaëc moät oâ nhôù. Soá haïng thöù hai coù
theå laø töùc thôøi trong thanh ghi hoaëc trong boä nhôù. Hai soá haïng khoâng theå cuøng ôû
trong boä nhôù, keát quaû pheùp coäng ñöôïc chöùa trong toaùn haïng thöù nhaát. Sau ñaây laø
baûng lieät keâ leänh coäng döôùi daïng gôïi nhôù:
Coäng khoâng löu yù soá nhôù Coäng coù löu yù soá nhôù Thí duï
ADD (accu), (data) ADC (accu), (data) ADD AX, 1250
ADD (mem), (data) ADC (mem), (data) ADD Byte PTR [0900],50
ADD (reg), (data) ADC (reg), (data) ADD BL, 50
ADD (reg1), (reg2) ADC (reg1), (reg2) ADC AL, AH
ADD (reg), (mem) ADC (reg), (mem) ADD CX, [0800]
ADD (mem), (reg) ADC (mem), (reg) ADC [0600], DL
· Pheùp tröø:
8086 coù theå thöïc hieän pheùp tröø vôùi 8 bit hoaëc 16 bit, leänh SBB coù löu yù soá thieáu
vaø leänh SUB khoâng löu yù soá thieáu. Sau ñaây laø baûng lieät keâ leänh tröø döôùi daïng gôïi
nhôù:
Tröø coù soá thieáu Tröø khoâng coù soá thieáu Thí duï
SUB (accu), (data) SBB (accu), (data) SUB AX, 1230
SUB (mem), (data) SBB (mem), (data) SBB Byte PTR [5000], 90
SUB (reg), (data) SBB (reg), (data) SUB BL, 50
SUB (reg1), (reg2) SBB (reg1), (reg2) SBB AL, DL
SUB (reg), (mem) SBB (reg), (mem) SUB CX, [1230]
SUB (mem), (reg) SBB (mem), (reg) SBB [0300], DL
· Pheùp so saùnh
Trong pheùp so saùnh hai toaùn haïng caàn so saùnh ñöôïc tröø vôùi nhau nhöng noäi
dung cuûa caùc thanh ghi vaø oâ nhôù khoâng bò thay ñoåi, keát quûa so saùnh chæ aûnh höôûng
ñeán thanh ghi côø seõ ñöôïc minh hoïa ôû hình sau:
CPU Boä nhôù
Tröôùc
AX SP CS
2300
BX BP DS PC 0100 010 39
CX SI SS 08
DX DI ES
O D I T S Z A P C
FI
Sau
2300
AX 0123 SP CS 2300
39
BX 0246 BP DS PC 0102
08
CX SI SS
DX DI ES 010
O D I T S Z A P C
0 1 0 1 1 1
FI
Hình 2.5: Phöông phaùp ñònh ñòa chæ töông ñoái
O D I T S Z A P C
FI 0 0 0 0 1 0
AX SP CS 2300
B8
BX BP DS PC 0105
00
CX SI SS
12
DX DI ES
010
O D I T S Z A P C
FI
Phaàn 2
THIEÁT KEÁ PHAÀN CÖÙNG KIT 8086
Chöông I:
CAÙC LINH KIEÄN BAÙN DAÃN COÙ LIEÂN QUAN
oOo
Trong thieát keá toâi ñaõ phaûi tính toaùn löïa choïn qua caùc coâng ñoïan:
- Linh kieän phaûi coù saün treân thò tröôøng.
- Linh kieän phaûi phuø hôïp vôùi heä thoáng.
- Heä thoáng ñôn giaûn tieát kieäm.
- Keát noái sao cho phaàn meàm ñôn giaûn nhaát, maø phaàn cöùng khoâng quùa
phöùc taïp, coàng keành.
- IC 8086 ña hôïp caùc ñöôøng ñòa chæ vaø döõ lieäu töø AD0 – AD15 vôùi nhau,
neân muoán söû duïng ñöôïc phaûi keát hôïp vôùi IC giaûi ña hôïp caùc ñöôøng ñòa
chæ vaø döõ lieäu rieâng bieät.
I . IC choát 74LS373:
1). Toång quaùt:
Trong thieát keá toâi choïn IC choát 74LS373 laøm nhieäm vuï taùch rieâng töøng
ñöôøng ñòa chæ vaø döõ lieäu, ñaây laø IC choát 8 bit vôùi 8 traïng thaùi ngoõ ra theo
Bus, nhöõng öùng duïng cuûa heä thoáng ñöôïc toå chöùc FLIP-FLOP (F-F) cho döõ
lieäu qua. Ngoõ cho pheùp choát (LE) ôû möùc cao khi LE laø thaáp döõ lieäu ñöôïc
choát, döõ lieäu xuaát treân Bus khi ngoõ ra cho pheùp OE laø thaáp. Khi OE cao thì
Bus ngoõ ra seõ ôû traïng thaùi cao .
IC 74LS373 laø IC choát toác ñoä cao, coâng suaát thaáp, 8D FF vôùi ñaëc ñieåm
nhöõng ngoõ vaøo D cho moãi FF vaø ba traïng thaùi ngoõ ra cuûa nhöõng Bus öùng
duïng ñaõ ñònh höôùng. Xung Clock ñeäm vaøo ngoõ ra OE laø chung cho taát caû
caùc FF.
2). Sô ñoà chaân 74LS373:
D0 – D7 : Data input
LE : Cho pheùp
OE : Cho pheùp xuaát
O0 – O7 : Ngoõ ra
A15 – A0
8086
74LS373
74LS373
Hình II.2: Sô ñoà moâ phoûng keát noái 74LS373 vôùi 8086
74LS244
1A2 4 17 2A4
2Y3 5 16 1Y2
1A3 6 15 2A3
2Y2 7 14 1Y3
1A4 8 13 2A2
2Y1 9 12 1Y4
GND 10 11 2A1
Hình II.3: Sô ñoà chaân 74LS244
Baûng söï thaät:
INPUT H: möùc ñieän theá cao
1G 2G D OUTPUT L: möùc ñieän theá thaáp
X: khoâng quan taâm
L L L
Z: toång trôû cao
L H H
H X Z
Thoâng soá ngöôõng:
Kyù hieäu Thoâng soá Min Type Max Ñôn vò
Vcc Nguoàn cung caáp 4,45 5,0 5,25 V
o
TA Nhieät ñoä hoaït ñoäng 0 2,5 70 C
IOH Doøng ra cao -1,5 mA
IOL Doøng ra thaáp 24 mA
III. MAÏCH TAÏO XUNG NHÒP 8284:
Cho duø laøm vieäc ôû cheá ñoä naøo ñi nöûa CPU 8086 luoân caàn xung nhòp ñeå hoaït
ñoäng, maïch taïo xung nhòp 8284 seõ ñaûm nhaän vieäc taïo xung nhòp clock cho CPU
8086. Maïch taïo xung nhòp khoâng nhöõng cung caáp xung clock vôùi taàn soá thích hôïp
cho toaøn boä maø noù coøn coù aûnh höôûng tôùi vieäc ñoàng boä tín hieäu Reset vaø tín hieäu
Ready cuûa CPU.
CSYN 1 18 Vcc
C2 17 X1
PCLK 3 16 X2
AEN1 4 15 ASYN
RDY1 5 8284 14 C
READ 6 13 EFI
Y7 12 F/C
RDY2 8 11 OSC
AEN2 9 10 RES
¨ CSYNC: loái vaøo cho xung ñoàng boä chung khi trong heä thoáng coù caùc 8284
duøng dao ñoäng ngoaøi taïi chaân EFI. Khi duøng maïch dao ñoäng trong thì phaûi noái mass
chaân naøy.
X
+5V CL CLK
1
8284 8086
RE RESE RESE
K
F/ CSYN
Khôûi ñoäng heä
Hình II.5: Sô ñoà caùc ñöôøng tín hieäu chính cuûa 8284
Hình treân bieåu dieãn caùc ñöôøng noái tín hieäu chính cuûa 8284. Maïch 8284 nhaän
xung khôûi ñoäng töø beân ngoaøi thoâng qua maïch RC, khi baét ñaàu baät ñieän hoaëc xung
khôûi ñoäng laïi khi baám coâng taéc K töø xung naøy 8284 coù nhieäm vuï ñöa ra xung khôûi
ñoäng ñoàng boä cho CPU cuøng vôùi taát caû caùc thaønh phaàn khaùc cuûa heä thoáng.
IV. TOÅNG QUAN VEÀ BOÄ NHÔÙ:
Tröôùc khi noùi veà keát noái boä nhôù vôùi vi xöû lyù 8086 nhoùm thöïc hieän noùi qua veà
boä nhôù baùn daãn thöôøng duøng ñeå keát noái vôùi vi xöû lyù. Bao goàm:
- Boä nhôù coá ñònh ROM (Read Only Memory – Boä nhôù chæ ñoïc), thoâng tin
trong boä nhôù seõ khoâng maát ñi khi maïch bò maát ñieän nguoàn cung caáp.
- Boä nhôù baùn coá ñònh EPROM (Erasable Programnable ROM) laø boä nhôù
ROM coù theå laäp trình ñöôïc baèng xung ñieän vaø xoùa ñöôïc baèng tia cöïc tím.
- Boä nhôù khoâng coá ñònh RAM (Random Access Memory – Boä nhôù truy
caäp ngaãu nhieân). Trong noäi dung ñeà taøi nhoùm thöïc hieän duøng SRAM (Static RAM –
RAM tónh, trong ñoù moãi phaàn töû nhôù laø moät maïch laät hai traïng thaùi oån ñònh) vaø
DRAM (Dynamic RAM – RAM ñoäng, trong ñoù moãi phaàn töû nhôù laø moät tuï ñieän raát
nhoû ñöôïc cheá taïo baèng coâng ngheä MOS) ñeå keát noái vôùi vi xöû lyù.
Moãi boä nhôù thöôøng ñöôïc cheá taïo neân töø nhieàu vi maïch nhôù. Moät vi maïch nhôù
thöôøng coù caáu truùc tieâu bieåu nhö sau:
A0 D0
A1 D1
Tín hieäu A2 D2 Tín hieäu WR: Write – ghi
ñòa chæ . . döõ lieäu WE: Write Enable-cho
. . pheùp ñoïc.
. .
Am Dn OE: Output Enable-ñaàu
CS
WE OE vaøo ñieàu khieån.
CS: Chip Select- chaân
Chaân choïn RD choïn.
Hình II.6: Sô ñoà moät vi maïch nhôù RD: Read – ñoïc.
Theo sô ñoà treân ta thaáy moät vi maïch nhôù coù caùc nhoùm tín hieäu sau:
21
OE
A10
A1 9 10 CE
A0 10 19 D7
D0 11 18 D6
D1 12 17 D5
D2 13 16 D4
GND 14 15 D3
OE D8 ¸ D15
CS
MEMR
OE
D0 ¸ D7
CS töø boä giaõi maõ CS
Hình II.8: Moâ hình keát noái boä giaûi maõ vôùi boä nhôù
A
EVE
CS MEM
W D0 ¸ D7
W
E
MEM
OE
Hình II.10: Sô ñoà keát noái RAM vôùi vi xöû lyù
Thöïc hieän vieäc giaûi maõ baèng caùc vi maïch giaõi maõ: 74LS138, 74LS139,
74LS145, 74LS154.
Khi muoán coù nhieàu ñaàu ra choïn töø boä giaûi maõ maø vaãn duøng caùc maïch logic ñôn
giaûn thì vieäc thieát keá trôû neân raát coàng keành do soá löôïng caùc maïch taêng leân. Trong
tröôøng hôïp nhö vaäy ta thöôøng söû duïng caùc maïch giaûi maõ coù saün. Moät trong caùc maïch
giaõi maõ coù saün hay söû duïng laø caùc IC 74138, 74139, 74154, 74145…
74LS138
C 3 14 O1
E1 4 13 O2
E2 5 12 O3
E3 6 11 O4
O7 7 10 O5
GND 8 9 O6
Bus A A1 ¸ A13
Bus B D0 ¸ D7
OE
Y0 CS0
CE
A16 A Y1 CS1
A17 B Y2 CS2
A18 C Y3 CS3
Y4 CS4
Y5 CS5
G1 Y6 CS6
Y7 CS7
Chöông II
VI MAÏCH GIAÕI MAÕ HIEÅN THÒ 8279
___ oOo ___
RESET Vcc
Control and
CLK 16 byte GND
timing registers
IRQ display OUT A2 ¸ A0
memory
Data buffer
DB1 DB0 register OUT B2 ¸ B0
Hình III.1: Sô ñoà khoái vi maïch giaûi maõ hieån thò 8279
- 8279 coù moät boä nhôù RAM 16 byte duøng ñeå hieån thò vaø moät boä nhôù
RAM duøng ñeå chöùa maõ cuûa phím nhaán. Trong 8279 coù moät thanh ghi ñeäm döõ lieäu,
khi döõ lieäu ñöôïc vi xöû lyù gôûi tôùi thì noù ñöôïc chuyeån tôùi thanh ghi naøy. Ngoaøi ra 8279
coøn chöùa thanh ghi traïng thaùi ñeå chæ traïng thaùi cuûa 8279 taïi moät thôøi ñieåm.
RL2 1 40 Vcc
RL3 2 39 RL1
CLK 3 38 RL0
IRO 4 37 CNTL/ST
RL4 5 36 B
RL5 6 35 SHIFT
RL6 7 34 SL3
RL7 8 33 SL2
RESE 9 32 SL1
T 10
RD 11
8279 31 SL0
30 OUT B0
WR 12 29 OUT B1
DB0 13 28 OUT B2
DB1 14 27 OUT B3
DB2 15 26 OUT A0
DB3 16 25 OUT A1
DB4 17 24 OUT A2
DB5 18 23 OUT A3
DB6 19 22 BD
DB7 20 21 CS
VSS A0
Hình III.2: Sô ñoà chaân 8279
RL7-
RL0 Key
DAT SHIFT data
CNTR/S
RD
CPU SL0-SL3 Scan
WR
Interface
CS
OUT A3-
A0 Display
A0
RESE data
T
B
8279 coù 16 byte RAM beân trong do con troû 4 bit AAAA quaûn lyù, 16 byte RAM
naøy duøng ñeå chöùa döõ lieäu caàn hieån thò do vi xöû lyù gôûi tôùi, ñeå ñoïc döõ lieäu ôû 8 oâ nhôù
naøo trong vuøng nhôù RAM naøy ta coù theå ñieàu chænh caùc bit AAAA töông öùng.
AI (Automatically Increment): ôû möùc cao laøm con troû töï ñoäng taêng leân keá ñeå
saün saøng ñoïc byte döõ lieäu. Neáu AI = 0 con troû seõ khoâng thay ñoåi, do ñoù, byte döõ lieäu
sau seõ ghi ñeø leân byte döõ lieäu tröôùc ñoù.
¨ Leänh Clear:
+ Maõ :
1 1 0 CD CD CD CF CA
+ Nhöõng Bit CD trong leänh naøy duøng ñeå xoùa taát caû caùc haøm cuûa RAM hieån
thò ñeán moät maõ xoùa ñöôïc choïn loïc nhö sau:
CD CD CD
Taát caû laø 0 ( X : khoâng quan taâm )
0 X AB = Hex 20 ( 0010 0000)
1 0 Taát caû laø 1
1 1 Cho pheù xoùa hieån thò khi =1 ( hoaëc bôûi CA = 1)
+ Trong suoát thôøi gian RAM hieån thò ñang xoùa noù khoâng ñöôïc vieát vaøo, Bit
lôùn nhaát cuûa töø traïng thaùi FIFO ñöôïc ñaët leân 1 trong suoát thôøi gian naøy. Khi
maø RAM hieån thò ñöôïc söû duïng laïi thì Bit naøy ñöôïc Reset veà 0.
+ Neáu nhö Bit CF tích cöïc (CF =1), töø traïng thaùi FIFO seõ bò xoùa vaø ngoõ ra
Interrupt bò Reset.
+ Bit CA coù chöùc naêng xoùa taát caû caùc Bit, noù coøn aûnh höôûng bôûi Bit CD vaø
CF. Noù duøng Bit CD ñeå xoùa maõ treân RAM hieån thò vaø noù cuõng xoùa luoân
traïng thaùi FIFO.
III. ÖÙNG DUÏNG CUÛA 8279:
8279 laø IC chuyeân veà giaûi maõ hieån thò Led 7 ñoaïn vaø queùt phím theo nhieàu
phöông phaùp khaùc nhau.
Döõ lieäu caàn hieån thò töø vi xöû lyù gôûi ñeán seõ ñöôïc chöùa trong 16 byte RAM beân
trong ñöôïc goïi laø boä nhôù hieån thò. Caùc tín hieäu naøy laàn löôït gôûi ra treân 8 ñöôøng tín
hieäu töø A3-0 ñeán B3-0.
Caùc ñöôøng tín hieäu SL3-0 duøng ñeå queùt, döõ lieäu treân ñöôøng naøy coù theå ñöôïc
thieát laäp theo kieåu Encode vaø Decode tuøy thuoäc vaøo kieåu thieát keá phaàn cöùng. Caùc
ñöôøng naøy coù hai chöùc naêng vöøa queùt hieän thò vöøa queùt giaûi maõ baøn phím.
Caùc ñöôøng tín hieäu RL7-0 laø caùc ñöôøng tín hieäu input keát hôïp vôùi caùc ñöôøng
tín hieäu queùt SL3-0 taïo thaønh ma traän phím, phím ñöôïc nhaán seõ laøm cho moät hoaëc
nhieàu ngoõ RL xuoáng möùc 0, keát hôïp vôùi caùc ñöôøng tín hieäu queùt seõ cho bieát maõ cuûa
phím nhaán. Chuù yù caùc ñöôøng SL3-0 phaûi ôû cheá ñoä Decode.
Caùc ngoû vaøo SHIFT vaø CNTL ñöôïc duøng ñeå môû roäng caùc phím toå hôïp.
Soá löôïng caùc phím thieát keá coù theå leân tôùi 64 phím rôøi.
8279 gôûi döõ lieäu trong vuøng nhôù RAM hieån thò ra caùc Led vaø töï ñoäng queùt baøn
phím ñeå tìm phím bò taùc ñoäng vaø töï choáng doäi vaø sau ñoù thieát laäp maõ cuûa phím bò
nhaán, tröôùc khi söû duïng 8279 ngöôøi thieát keá cuõng nhö ngöôøi söû duïng caùc töø ñieàu
khieån gôûi ra 8279 khi bit A0 = 1. Döõ lieäu ñoïc vaøo hoaëc gôûi ra 8279 khi bit A0 = 0.
Khi coù phím bò nhaán, 8279 seõ töï ñoäng choáng doäi sau 10,3 ms vaø kieåm tra laïi
moät laàn nöõa ñeå xem phím ñoù coù bò nhaán hay khoâng, neáu coøn thì 8279 seõ thieát laäp maõ
cho phím naøy vaø löu tröõ maõ cuûa phím vaøo boä nhôù RAM beân trong. Sau ñoù seõ baùo
cho vi xöû lyù bieát ñaõ coù moät phím taùc ñoäng vaø yeâu caàu vi xöû lyù nhaän maõ cuûa phím
naøy baèng caùch taùc ñoäng ñeán tín hieäu ngaét IRQ. Tín hieäu IRQ ñöôïc keát noái ñeán moät
ngoõ vaøo ngaét cuûa vi xöû lyù vaø chöông trình phuïc vuï cho ngaét naøy laø chöông trình ngaét
phím. Nhieäm vuï cuûa vi xöû lyù laø ñoïc maõ cuûa phím bò aán vaøo ñeå xöû lyù vaø Reset ngaét
cuûa 8279 veà möùc logic ñeå chuaån bò cho phím tieáp theo.
Khung maõ döõ lieäu cuûa phím bò nhaán nhö sau:
CNTL SHIFT SCAN RETUNE
Treân ñaây nhoùm thöïc hieän vöøa trình baøy caáu truùc phaàn cöùng, phaàn meàm vaø öùng
duïng cuûa vi maïch giaûi maõ hieån thò 8279.
Chöông III
VI MAÏCH GIAO TIEÁP NGOAÏI VI 8255A
___ oOo ___
GROUP
GROUP
A A IO
POWER +5V CONTROL PORT A PA7 – PA0
SUPPLIES
GND
GROUP
DATA A IO
BUS PORT C PC7 – PC4
BUFFER UPPER
GROUP
B IO
PORT C PC3 – PC0
LOWER
READ
WRITE
WR\ CONTROL GROUP
GROUP IO
LOGIC B
RD\ B PB7 – PB0
PORT B
A1 CONTROL
A0
RESET
CS\
Hình IV.1: Sô ñoà khoái 8255A
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
RD\ 5 36 WR\
CS\ 6 35 RESET
GND 7 34 D0
A1 8 33 D1
A0 9 32 D2
PC7
PC6
10
8255A 31 D3
11 30 D4 PA7-PA0
D7-D0
PC5 12 29 D5
PC4 13 28 D6 PC7-PC4
PC0 14 27 D7 RD
PC1 15 26 VCC WR
PC2 16 25 PB7 RESE PC3-PC0
PC3 17 24 PB6 T
PB0 18 23 PB5 PB7-PB0
PB1 19 22 PB4 A0
PB2 20 21 PB3 A1
Hình IV.3: Sô ñoà Logic 8255A
Hình IV.2: Sô ñoà chaân 8255A
3). Teân caùc chaân:
D7 - D0 Data bus (Bi-Direction)
RESET Reset input (noái vôùi tín hieäu Reset toaøn boä heä)
CS\ Chip Select
WR\ Write input
RD\ Read input
A0, A1 Port Address
PA7 – PA0 Port A
PB7 – PB0 Port B
PC7 – PC0 Port C
8255A giao tieáp vôùi vi xöû lyù thoâng qua 3 bus: bus döõ lieäu 8 bit D7-D0, bus ñòa
chæ, bus ñieàu khieån RD\; WR\; CS\; Reset.
· Maõ leänh, thoâng qua traïng thaùi vaø vaø döõ lieäu ñeàu ñöôïc truyeàn treân 8 ñöôøng
döõ lieäu D7-D0. Vi xöû lyù gôûi döõ lieäu ñeán 8255A hoaëc vi xöû lyù ñoïc döõ lieäu töø 8255A
tuøy thuoäc vaøo leänh ñieàu khieån. Caùc ñöôøng tín hieäu RD\, WR\ cuûa 8255A ñöôïc keát
noái vôùi caùc ñöôøng RD\, WR\ cuûa vi xöû lyù.
· Tín hieäu Reset duøng ñeå khôûi ñoäng 8255A khi caáp ñòeän, khi bò Reset caùc
thanh ghi caùc thanh ghi beân trong 8255A ñeàu bò xoùa vaø 8255A ôû traïng thaùi saün saøng
laøm vieäc. Khi giao tieáp vôùi vi xöû lyù ngoû vaøo tín hieäu Reset naøy ñöôïc keát noái vôùi tín
hieäu Reset Out cuûa vi xöû lyù.
· Tín hieäu Chip Select (CS\) duøng ñeå löïa choïn 8255A khi vi xöû lyù giao tieáp
vôùi nhieàu 8255A.
8255A coù 3 port xuaát nhaäp (I/O) coù teân port A, port B, port C, moãi port 8 bit.
Port A goàm caùc bit PA0-PA7, port B goàm caùc bit PB0-PB7 vaø port C goàm PC0-PC7.
Caùc port naøy coù theå laø caùc port input hoaëc output tuøy thuoäc vaøo leänh ñieàu khieån,
leänh ñieàu khieån do vi xöû lyù gôûi tôùi chöùa trong thanh ghi (coøn goïi laø thanh ghi ñieàu
khieån) ñeå ñieàu khieån 8255A.
Caùc ñòa chæ A1-A0 cuûa 8255A duøng ñeå löïa choïn caùc port vaø thanh ghi,
A1A0=002 duøng ñeå choïn Port A, A1A0 = 012 duøng ñeå choïn Port B, A1A0 = 102 duøng
ñeå choïn Port C, A1A0 = 112 duøng ñeå choïn thanh ghi ñieàu khieån. Trong sô ñoà khoái
8255A, caùc port I/O chia laøm hai nhoùm: nhoùm A goàm port A vaø 4 bit cao cuûa port C,
nhoùm B goàm port B vaø 4 bit thaáp cuûa port C. Ñeå söû duïng caùc port cuûa 8255A ngöôøi
laäp trình phaûi gôûi töø ñieàu khieån ra thanh ghi ñieàu khieån ñeå 8255A ñònh caáu hình cho
caùc port ñuùng theo yeâu caàu maø ngöôøi laäp trình mong muoán.
4). Caáu truùc töø ñieàu khieån cuûa 8255A:
D7 D6 D5 D4 D3 D2 D1 D0
GROUP B
PORT C (LOWER)
1 = INPUT
0 = OUTPUT
PORT B
1 = INPUT
0 = OUTPUT
MODE
SELECTION
GROUP A
PORT C (UPPER)
1 = INPUT
0 = OUTPUT
PORT A
1 = INPUT
0 = OUTPUT
MODE
SELECTION
00 = MODE 0
MODE SET
FLAG
INT PA7-
Töø ñieàu khieån :
E
1 0 1 1 D3 X X X PC4 STBA
PC5 IBFA
PC3 INTRA
RD
PC6,7 I/O
Caùc ñöôøng tín hieäu cuûa port C trôû thaønh caùc ñöôøng ñieàu khieån/döõ lieäu cuûa port A.
Bit PC4 trôû thaønh bit STBA (Stroble Input, taùc ñoäng möùc thaáp), ñöôïc duøng ñeå
choát döõ lieäu ôû caùc ngoû vaøo PA7 – PA0 vaøo maïch choát beân trong 8255A.
Bit PC5 trôû thaønh bit IBTA (Input Bufer Full, taùc ñoäng möùc cao), duøng ñeå baùo
cho thieát bò beân ngoaøi bieát döõ lieäu ñaõ ñöôïc choát beân trong.
Bit PC3 trôû thaønh bit INTRA (Interrupt Request, taùc ñoäng ôû möùc cao), bit naøy
coù möùc Logic 1 khi hai bit STBa = 1, IBF = 1 vaø bit INTEa (Interrupt Enable) ôû beân
trong 8255Abaèng 1. Bit INTEa ñöôïc thieát laäp möùc Logic 1 hay 0 döôùi söï ñieàu khieån
cuûa phaàn meàm duøng caáu truùc Set/Reset cuûa 8255A. ÔÛ hình veõ treân, bit INTEa = 1
duøng ñeå cho pheùp tín hieäu IBF xuaát hieän taïi ngoõ ra INTRA cuûa coång AND. Tín hieäu
INTA taùc ñoäng ñeán ngoõ vaøo cuûa ngaét vi xöû lyù ñeå baùo cho vi xöû lyù bieát: döõ lieäu môùi
ñaõ xuaát hieän ôû port A chöông trình phuïc vuï ngaét seõ ñoïc döõ lieäu vaøo xoùa yeâu caàu
ngaét.
Caùc bit coøn laïi cuûa port C: PC6, PC7 laø caùc bit xuaát/nhaäp bình thöôøng tuøy thuoäc
vaøo bit D3 trong töø ñieàu khieån hình treân. Caùc bit XXX ñöôïc duøng ñeå thieát laäp cho
nhoùm B.
¨ Port A ñöôïc caáu hình laø port xuaát döõ lieäu:
Chöùc naêng cuûa ñöôøng tín hieäu ñöôïc trình baøy ôû hình sau:
Töø ñieàu khieån :
INT PA7-
1 0 1 0 D3 X X X
E
PC7 OBFA
PC6 ACKA
PC3 INTRA
W
PC4,5 I/O
Bit PC7 trôû thaønh bit OBFa (Output Buffer Full, taùc ñoäng möùc thaáp), khi coù döõ
lieäu töø vi xöû lyù gôûi ra port A, tín hieäu OBFa seõ yeâu caàu thieát bò beân ngoaøi nhaän döõ
lieäu.
Bit PC6 trôû thaønh bit ACKa (Acknowledge Input, taùc ñoäng möùc thaáp) thieát bò
nhaän döõ lieäu duøng tín hieäu naøy ñeå baùo cho 8255A bieát tín hieäu ñaõ ñöôïc nhaän vaø saún
saøng nhaän döõ lieäu tieáp theo.
Bit PC3 trôû thaønh bit INTRa (Interrupt Request, taùc ñoäng möùc cao), bit naøy coù
möùc Logic khi hai bit OBF a = 1, ACKa = 1 vaø bit INTEa (Interrupt Enable) ôû beân
trong 8255A ôû möùc 1. Tín hieäu INTRa taùc ñoäng ñeán ngoõ vaøo ngaét cuûa vi xöû lyù ñeå
baùo cho vi xöû lyù bieát: thieát bò beân ngoaøi ñaõ nhaän döõ lieäu ôû port A.
Caùc bit coøn laïi cuûa port C: PC4, PC5 laø caùc bit xuaát/nhaäp bình thöôøng tuøy thuoäc
vaøo bit D3 trong töø ñieàu khieån hình treân. Caùc bit XXX duøng ñeå thieát laäp cho nhoùm B.
r Nhoùm B laøm vieäc ôû Mode 1:
¨ Port B ñöôïc caáu hình laø port nhaäp döõ lieäu :
Chöùc naêng cuûa caùc ñöôøng tín hieäu ñöôïc trình baøy ôû hình sau:
PC0 INTRB
RD
Chöùc naêng cuûa caùc bit ñieàu khieån gioáng nhö nhoùm A hoaït ñoäng ôû Mode 1.
¨ Port B ñöôïc caáu hình laø port xuaát döõ lieäu:
Chöùc naêng cuûa caùc ñöôøng tín hieäu ñöôïc trình baøy ôû hình sau:
PC0 INTRB
W
Chöùc naêng cuûa caùc bit ñieàu khieån gioáng nhö nhoùm A hoaït ñoäng ôû Mode 1.
Caùc bit XXX ñöôïc duøng thieát laäp cho nhoùm A, bit D0 khoâng coù taùc duïng trong
tröôøng hôïp caû hai nhoùm cuøng laøm vieäc ôû Mode 1.
3). Nhoùm A cuûa 8255A laøm vieäc ôû Mode 2:
Mode 2 laø kieåu hoaït ñoäng Stoble Bi-directional IO, söï khaùc bieät vôùi Mode 1 laø
port coù hai chöùc naêng xuaát – nhaäp döõ lieäu.
Töø ñieàu khieån khi hai nhoùm A hoaït ñoäng ôû Mode 2:
1 1 X X X X X X
Chöùc naêng cuûa caùc ñöôøng tín hieäu ñöôïc trình baøy ôû hình sau:
Töø ñieàu khieån:
1 0 1 1 D3 X X X
PC3 INTR
PA7-PA0
PC7 OBFA
PC6 ACK
INTE
1
INTE
RD 2 PC4 STBA
PC5 IBFA
WR
PC2,1,0 I/O
Caùc ñöôøng tín hieäu cuûa port C trôû thaønh caùc ñöôøng ñieàu khieån/döõ lieäu cuûa port
A.
Bit PC7 trôû thaønh bit OBFa, PC6 trôû thaønh bit ACKa, PC4 trôû thaønh bit STBa,
PC5 trôû thaønh IBFa vaø bit PC3 trôû thaønh bit INTRa. Chöùc naêng cuûa caùc ñöôøng tín
hieäu gioáng nhö Mode 1, chæ khaùc laø tín hieäu ngoû ra INTRa =1, INTE1 = 1 hoaëc IBFa
= 1, INTE2 = 1.
Caùc bit PC 2,1,0 coøn laïi coù theå laø caùc bit I/O tuøy thuoäc vaøo bit ñieàu khieån c3
nhoùm B.
Chuù yù khi nhoùm A laøm vieäc ôû Mode 2, nhoùm B chæ ñöôïc pheùp hoaït ñoäng ôû
Mode 0.
Caáu hình cuûa töø ñieàu khieån Set/Reset bit INTE khi 8255A hoaït ñoäng ôû Mode 1
hoaëc Mode 2 ñöôïc trình baøy ôû hình sau:
D7 D6 D5 D4 D3 D2 D1 D0
X X X
BIT SET / RESET
Don’t care 1 = SET
0 = RESET
BIT SELECT
0 1 2 3 4 5 6 7
0 1 0 1 0 1 0 1 B0
0 0 1 1 0 0 1 1 B1
0 0 0 0 1 1 1 1 B2
Caáu hình naøy coøn cho pheùp Set/Reset töøng bit cuûa port C. Töø ñieàu khieån naøy
khaùc vôùi töø ñieàu khieån caáu hình laø bit D7 = 0.
Bit D0 duøng ñeã Set/Reset bit INTE, khi D0 = 1 thì INTE = 1 (cho pheùp ngaét),
khi D0 = 0 thì INTE = 0 (khoâng cho pheùp ngaét). Ba bit D1, D2, D3 duøng ñeå choïn moät
bit cuûa port C, gaùn möùc Logic cuûa bit D0 cho bit cuûa port ñaõ choïn.
Trong thöïc teá port A vaø port B thöôøng ñöôïc caáu hình vôùi nhieàu Mode khaùc
nhau. Ví duï nhoùm A hoaït ñoäng ôû Mode 2 nhoùm B laøm vieäc ôû Mode 0.
III. THIEÁT KEÁ GIAO TIEÁP VI XÖÛ LYÙ VÔÙI 8255A:
Giao tieáp giöõa 8255A vôùi vi xöû lyù gaàn gioáng nhö vi xöû lyù vôùi boä nhôù, chæ coù vaøi
ñieåm khaùc bieät laø:
Dung löôïng giao tieáp IO cuûa vi xöû lyù thaáp hôn so vôùi boä nhôù, vôùi vi xöû lyù
8255A coù 16 ñöôøng ñòa chæ A0 – A15 ñeå giao tieáp vôùi boä nhôù, khi giao tieáp vôùi IO vi
xöû lyù chæ söû duïng 8 ñöôøng ñòa chæ A0 – A7.
Caùc IC giao tieáp IO coù theå thieát keá theo hai kieåu: kieåu IO vaø kieåu boä nhôù.
1). Kieåu IO:
Khi thieát keá caùc IC giao tieáp IO theo kieåu IO thì vi xöû lyù giao tieáp vôùi IO thoâng
qua hai leänh IN Add – port vaø Out Add – port. Döõ lieäu giao tieáp luoân chöùa trong
thanh ghi A ñòa chæ port (Add – Port) coù ñoä daøi 8 bit.
Khi thieát keá giao tieáp vôùi vi xöû lyù, ngöôøi thieát keá phaûi ñaët ra moät yeâu caàu cuï
theå laø soá löôïng IC giao tieáp laø bao nhieâu. 8255A duøng 8 bit ñòa chæ thaáp ñeå giao tieáp
vôùi IO, neáu moãi moät ñòa chæ truy xuaát moät oâ nhôù IO thì 8255A coù khaû naêng truy xuaát
256 oâ nhôù IO.
8255A coù hai ñöôøng ñòa chæ ñeã choïn ba port vaø moät thanh ghi ñieàu khieån vaø coù
toång coäng laø 4 oâ nhôù thì soá löôïng IC 8255A coù theå giao tieáp vôùi vi xöû lyù laø 64.
Chöông IV:
VIMAÏCH GIAO TIEÁP NOÁI TIEÁP 8251
1. Sô ñoà khoái:
D0-D7
TxD
Reset Bieán ñoåi
Logic
CLK song song-
ñieàu
C/D\ noái tieáp
khieån
RD\ ñoïc TxRDY
WR\ ghi Ñieàu TxE
CS\ khieån TxC\
phaùt
RxRDY
Syndet/Brk
DTR\ Ñieàu RxC\
DSR\ Ñieàu khieån thu
RTS\ khieån
CTS\ modem Bieán ñoåi RxD
noái tieáp-
song song
Hình 4.1
TxD\
CS\
Thanh ghi truyeàn
RD\
WR\
C/D\ Thanh ghi ñeäm truyeàn
D0
D1 RXD\
D2 Thanh ghi nhaän
D3
D4
D5 Thanh ghi ñeäm nhaän
D6
D7
CLK
Thanh ghi cheá ñoä
RST
RxRDy
TxRDy Thanh ghi leänh
TxEMTy
VCC
GND
D D D D D D D D
toác ñoä truyeàn
00 ñoàng boä
01 khoâng ñoàng boä x1
10 khoâng ñoàng boä x16
11khoâng ñoàng boä x64
Ñieàu khieån
00 khoâng gía trò
01 moät bit döøng
10 1.5 bit döøng
11 2bit döøng
Hình 43a
+ lôøi leänh:
D7 D6 D5 D4 D3 D2 D1 D0
E I RT ER SB RxE DT Tx
H R S N
RK R E
Ngaét meàm
1= xoaù caùc thanh ghi
Hình
Giaûi
A 1 – A 11 maõ CS \ GND
GN
D 0 –D 7 D
CRTTxD
Reset D 0 – D7
TxD CRTRxD
CLK Rest
RxD
A0 CLK
DT
RD \ R CRT
C/D\
WR \
RD \
XöûLyùùngaét DS
(8259A hai R\
möùc) WR\
INTR
VXL 8251
TxD TxD
RxD RxD
DTR\ DTR\
V 8251 8251 V
XL1 DSR\ DSR\ XL2
RTS\ RTS\
Chöông V:
THIEÁT KEÁ VAØ LÖÏA CHOÏN LINH KIEÄN
___ oOo ___
Sau khi phaân tích moâ hình heä thoáng kit 8086. Nhoùm thöïc hieän baét ñaàu tính toaùn
caùc giaù trò thöïc teá ñeå heä thoáng coù theå hoaït ñoäng ñöôïc. Vieäc tính toaùn döïa treân cô sôû
lyù thuyeát vaø caùc loaïi linh kieän thoâng duïng treân thò tröôøng.
Nhö ta ñaõ bieát kit 8086 laø heä thoáng phaàn cöùng khoâng theå thay ñoåi ñöôïc moät
caùch deå daøng nhöng phaàn meàm coù theå thay ñoåi ñöôïc cho heä thoáng hoaït ñoäng moät
caùch toái öu. Do ñoù, vieäc thieát keá phaûi caân ñoái sao cho phaàn meàm khoâng phöùc taïp vaø
taän duïng ñöôïc heát chöùc naêng.
1). Boä vi xöû lyù trung taâm vaø maïch choát:
Boä vi xöû lyù 8086 coù taàn soá hoaït ñoäng 8Mhz, coù 20 ñöôøng ñòa chæ neân coù theå
quaûn lyù ñöôïc 1Mbyte boä nhôù vaø coù 16 ñöôøng döõ lieäu.
Do vi xöû lyù söû duïng phöông phaùp ña hôïp 20 bit ñòa chæ vôùi 16 bit döõ lieäu vaø 4
tín hieäu ñieàu khieån. Vì vaäy nhoùm thöïc hieän choïn IC 74LH573 laø IC choát ñòa chæ
thaáp.
2). Thieát keá boä nhôù vaø giaõi maõ boä nhôù:
Do 8086 coù khaû naêng quaûn lyù 1Mbyte boä nhôù nhöng do öùng duïng thöïc teá nhoùm
chæ choïn vuøng nhôù töø 80000 ñeán FFFFF ñeå choïn vuøng nhôù RAM, caùc IC ngoaïi vi vaø
chöông trình heä thoáng.
O0 CS\ RAM
A16 A CS\ 8255
CS\ 8279
A17 B
A18 C
Vcc E3
8086
CS\ ROM
E1 O7
\
E2
Hình V.1: Sô ñoà keát noái vi xöû lyù vôùi giaûi maõ boä nhôù
theå thieát laäp theo hai kieåu Encode vaø Decode. Neáu thieát laäp theo kieåu Decode thì 4
ñöôøng SL3 ¸ SL0 coù theå queùt hieån thò 4 led 7 ñoaïn maø yeâu caàu cuûa 4 ñöôøng
SL3¸SL0 phaûi ôû cheá ñoä Decode neân ta phaûi choïn 8279 ôû cheá ñoä Encode sau ñoù môùi
giaõi maõ 4 ñöôøng SL3 ¸ SL0 thaønh cheá ñoä Decode luùc naøy giaõi maõ töø 4 ñöôøng sang
16 ñöôøng ñeå coù khaû naêng hieån thò ra 16 Led. Do yeâu caàu cuûa ñeà taøi laø hieån thò ra 8
Led neân ta choïn IC 74LS138 ñeå giaõi maõ cho vi maïch 8379.
Caùc ngoõ SHIFT vaø CNTL duøng ñeå môû roäng caùc toå hôïp phím. Do heä thoáng
khoâng söû duïng heát phím neân 2 ngoõ nay ñöôïc noái Mass.
· Nguyeân lyù laøm vieäc cuûa 8279 trong vieäc queùt phím:
Ñeå 8279 laøm coâng vieäc queùt phím ta choïn cheá ñoä KKK = 100 (Encode Scan
Sensor Matrix) vaø gôûi caùc töø ñieàu khieån naøy 8279 ñeå khôûi taïo cheá ñoä queùt phím.
Caùc ñöôøng SL3 ¸ SL0 queùt lieân tuïc qua 74138 ñeå hieån thò vaø phím aán. Khi coù moät
phím aán, 8279 töï ñoäng choáng doäi sau 10,3 ms vaø kieåm tra moät laàn nöõa ñeå xem phím
ñoù coù aán nöõa hay khoâng, neáu coù thì 8279 thieát laäp maõ cho phím naøy vaø löu tröõ maõ
cuûa phím vaøo RAM beân trong, sau ñoù baùo cho vi xöû lyù bieát coù moät phím taùc ñoäng vaø
yeâu caàu vi xöû lyù nhaäp maõ cho phím naøy baèng caùch taùc ñoäng ñeán tín hieäu ngaét IRQ
hoaëc baèng caùch ñoåi thanh ghi traïng thaùi FiFo laøm cho 3bit NNN seõ khaùc möùc 000
khi coù moät phím ñöôïc aán.
SL0 A
SL1 B
C
SL2
SL3 74138
Multile
OB0
8279 Digital
Display
RL0 OB3
OA0
RL7 OA3
Haøng
7 traän queùt phím
Hình V.2: Sô ñoà ma
R1
a
b
c
d
e
f
g
Ñeå cho Led ñöôïc saùng thì doøng qua noù khoaûng 10mA. Do ñoù, ñeå 7 ñoaïn saùng
thì doøng qua Transistor phaûi laø 80mA
I E max = I C max = 8 ´ 10mA = 80mA
vì vaäy ta coù theå choïn Transistor naøy laø A564 hoaëc A1015. Trong heä thoáng kit
8086 nhoùm choïn A564 coù heä soá khueách ñaïi b ôû cheá ñoä ñoùng ngaét khoaûng 40 ñeán
200 laàn. Do ñoù, doøng IBmax khoaûng:
I C max 80
I B max = = = 1mA
b 80
· Tính toaùn choïn R1: khi Transistor baûo hoøa VBE=0,7v
Do ñoù: R 1 =
U R1
=
(Vcc - 0,7 ) = (5 - 0,7) = 4,7 kW
IB IB 1
Ñeå tính toaùn cho transistor sôùm baûo hoøa ta choïn R1 nhoû hôn tính toaùn. Vaäy
R1=3,9kW
· Tính toaùn R2: khi Transistor daån baûo hoøa ta coù Vcc=0,2v vaø ñeå Led saùng
thì ñoøi hoûi ñieän aùp rôi treân Led laø 2,5v.
Phaàn 3
XAÂY DÖÏNG PHAÀN MEÀM HEÄ THOÁNG
___ oOo ___
I. KHAÙI NIEÄM:
Nhö ñaõ bieát, caáu taïo cuûa maùy tính ñöôïc chia laøm hai phaàn: phaàn cöùng vaø phaàn
meàm, phaàn meàm laø caùc chöông trình ñieàu khieån maùy tính ñeå giaûi quyeát caùc yeâu caàu
ñaët ra trong thöïc teá.
Kyõ thuaät xaäy döïng phaàn meàm laø kyõ thuaät laäp trình, ñaây laø moät ngheä thuaät ñoøi
hoûi kyõ naêng vaø saùng taïo nhöng daàn daàn noù ñöôïc kyõ thuaät hoùa nhaèm ñôn giaûn vaø
naâng cao hieäu suaát xaây döïng phaàn meàm.
Laäp trình laø taïo moät chöông trình ñieàu khieån thieát bò baèng moät ngoân ngöõ naøo
ñoù ñeå ñieàu khieån caùch xöû lyù döõ lieäu theo töøng yeâu caàu cuï theå cuûa baøi toaùn. Vì vaäy,
beân caïnh söï hieåu bieát veà cô cheá hoaït ñoäng cuûa maùy tính ngöôøi laäp trình coøn phaûi
naém vöõng caùch toå chöùc döõ lieäu vaø caùch xöû lyù (thuaät giaûi) döõ lieäu ñoù ñeå ñaït ñöôïc keát
quaû mong muoán. Coù theå noùi chöông trình laø caùch toå chöùc döõ lieäu coäng vôùi thuaät giaûi,
treân thöïc teá coù nhieàu phöông phaùp laäp trình khaùc tuøy thuoäc vaøo:
- Coâng cuï söû duïng: maùy tính thoâng thöôøng, maùy chuyeân duøng, thieát bò ñieàu
khieån trong coâng nghieäp.
- Möùc ñoä chuyeân saâu: laäp trình heä thoáng, laäp trình öùng duïng.
- Ngoân ngöõ söû duïng: ngoân ngöõ maùy, ngoân ngöõ caáp cao.
- Lónh löïc öùng duïng: khoa hoïc kyõ thuaät, quaûn lyù, ñieàu khieån.
1). Thuaät giaûi:
Laø caùch giaûi quyeát vaán ñeà baèng nhöõng thao taùc cuï theå ñöôïc saép xeáp theo moät
trình töï nhaát ñònh.
Trong kyõ thuaät maùy tính, thuaät giaûi laø coát loõi mang tính saùng taïo vieäc laäp trình.
Thuaät giaûi thöôøng ñi keøm vôùi toå chöùc döõ lieäu, baûn thaân thuaät giaûi laø moät chuyeân
ngaønh ñöôïc nghieân cöùu chuyeân saâu vaø khoâng ngöøng phaùt trieån.
2). Thao taùc:
Coøn goïi laø taùc vuï, leänh hoaëc chæ thò laø moät haønh ñoäng caàn ñöôïc thöïc hieän bôûi
cô cheá thöïc hieän thuaät giaõi. Thao taùc ñöôïc dieãn giaûi bôûi moät nhoùm töø maø chuû yeáu laø
moät ñoäng töø, caàn choïn ñoäng töø chæ daãn chính xaùc vaø xuùc tích.
Moãi moät thao taùc caàn moät thôøi gian vaø tieâu hao vaät chaát ñeå thöïc hieän. Thôøi
gian vaø tieâu hao phuï thuoäc vaøo töøng thao taùc.
Moãi thao taùc coù theå phaân thaønh caùc thao taùc nhoû hôn. Vaán ñeà laø choïn thao taùc
ôû möùc ñoä chi tieát naøo ñeå trình baøy laø hôïp lyù nhaát. Neáu thao taùc toång quaùt thì seõ khoù
hieåu ngöôïc laïi neáu quaù chi tieát thì seõ raéc roái deã nhaàm laãn. Caàn choïn thao taùc ôû möùc
ñoä toång quaùt nhaát maø ñoái töôïng söû duïng coù theå hieåu ñöôïc.
Cuøng moät thao taùc nhöng saép ñaët theo trình töï khaùc nhau seõ cho keát quaû khaùc
nhau. Cô caáu trình töï caàn theå hieän trong thao taùc goïi laø caáu truùc ñieàu khieån.
S
C?
Laëp laïi A voâ ñieàu kieän khi cho ñeán khi coù leänh thoaùt.
Neáu ñieàu kieän C ñuùng thì thöïc hieän A (tuøy theo giaù trò cuûa C thao taùc A coù theå
thöïc hieän 0, 1 hoaëc nhieàu laàn).
S
A C?
S
A C?
Ñ S
C?
A B
Toùm laïi moät thuaät giaûi toát toái thieåu caàn coù nhöõng ñieàu kieän sau:
- Coâng vieäc phaûi cuï theå vaø thöïc hieän ñöôïc treân maùy tính.
- Soá böôùc thöïc hieän phaûi roõ raøng vaø höõu haïn.
- Coù soá lieäu vaøo.
- Coù soá lieäu ra.
II. XAÂY DÖÏNG CHÖÔNG TRÌNH HEÄ THOÁNG:
1). Giaûi thuaät cuûa heä thoáng kit vi xöû lyù 8086:
Löu ñoà chöông trình chính ñieàu khieån kit 8086:
Begin
Phím chöùc
naêng
Löu ñoà chöông trình con khôûi taïo 8279 vaø chuyeån oâ nhôù sang oâ nhôù taïm
Begin
RET
Begin
00h àAL
Delay
03h à CL
SoSo
saùnsaù
h nh
CL=03h
Cl = 00h
Delay
Delay
Ret
Laáy laïi DS
So saùnh
= 40
Ret
Jmp X4
Coù phaûi
phím Down khoâng
Laáy data
Jmp x4
Laáy data
Jmp X8
Jmp X9
Begin
Coù phaûi
phím go
Thoaùt khoûi
chöông trình Jmp X4
Caát CX 72E3 ® CX
Laáy CX laïi
Ret
Löu ñoà chöông trình con xöû lyù phím chöùc naêng
Löu ñoà phím key 16
Begin
Call key 23
AL ® AH
[FE41] ® AL
AL and [FE41]
Keát quaû = 0
Ret
Call key 47
Keát quaû = 0
[FE41] ® AL
[FE41] and AL
Ret
Begin
AL and 0Fh
Call Delay
Laáy DS laïi
Ret
Begin
Call 4 - X
Caát AX
Call 4 - X
Kieåm tra
BL = 40h
Call delay
Ret
Laáy laïi BX
Laáy laïi DS
Ret
JMP X4
ORG 0200H
X10:
;=========================================
;CHUONG TRINH CON CHUYEN O NHO SANG O NHO TAM
ORG 0300H
CONVERT PROC NEAR
PUSH CX
PUSH AX
MOV DI,0FE32H
MOV AL,[DI]
AND AL,0FH ;XOA 4BIT CAO
MOV CL,04H
ROL AL,CL ;XOAY 4BIT THAP SANG 4 BIT CAO
MOV AH,AL
INC DI ;DI = 0033H
MOV AL,[DI]
MOV CL,04H
ROL AL,CL
MOV [DI],AL ;4 BIT THU 2
DEC DI ;DI = 0032
AND AL,0FH ;SU LY DIGIT THU 2
OR AL,AH
MOV [DI],AL
INC DI ;
MOV AL,[DI] ;
AND AL,0F0H ;XOA LSD
MOV [DI],AL
POP AX ;LAY MA PHIM
POP CX
RET
CONVERT ENDP
Phaàn 4
THI COÂNG
šl›
Ñöôïc söï höôùng daãn cuûa thaày Nguyeãn Ñình Phuù, trong suoát thôøi gian thi
coâng toâi thöïc hieän ñöôïc moät soá phaàn vaø traûi qua caùc böôùc sau:
- Thieát keá vaø veõ maïch in baèng phaàn meàm veõ maïch Eagle.
Qua quaù trình thi coâng maïch toâi caûm nhaän ñöôïc söï lyù thuù vaø töø ñoù cuõng ruùt ra
Cuøng vôùi söï tieán boä cuûa khoa hoïc kyõ thuaät, lónh vöïc ñieän töû coù nhieàu böôùc tieán
nhaûy voït vaø coâng ngheä ñoåi môùi lieân tuïc. Ngöôøi thöïc hieän ñeà taøi thaáy raèng:
- Heä thoáng maø toâi ñaõ thöïc hieän, vi xöû lyù 8086 chöa hoaït ñoäng heát chöùc
- Vôùi vieäc giao tieáp qua coång RS232 thì khoaûng caùch truyeàn ñi xa.
- Coù theå keát noái vôùi thieát bò ngoaïi vi thoâng qua giao tieáp 8255A.
Sau 8 tuaàn laøm vieäc khaån tröông cuøng vôùi söï höôùng daãn nhieät tình cuûa thaày
Nguyeãn Ñình Phuù. Ñeà taøi “THIEÁT KEÁ VAØ THI COÂNG KIT VI XÖÛ LYÙ 8086” ñaõ
hoaøn thaønh ñuùng thôøi gian qui ñònh. Ñaây laø ñeà taøi mang tính toång hôïp, keát hôïp giöõa
kyõ thuaät ñieän töû vaø kyõ thuaät laäp trình.
Vôùi söï quyeát taâm vaø noã löïc khoâng ngöøng, taäp luaän vaên naøy ñaõ giuùp cho toâi
böôùc ñaàu laøm quen vôùi ñeà taøi khoa hoïc vaø toâi ñaõ thaät söï tích luõy khaù nhieàu veà kieán
thöùc vi xöû lyù, thieát keá maïch vaø kyõ thuaät laäp trình.
Do kieán thöùc coøn haïn cheá neân luaän vaên chaéc chaén seõ coù sai soùt nhöng qua quaù
trình thöïc hieän luaän vaên toâi nhaän thaáy raèng ñaõ hoïc hoûi ñöôïc nhieàu ñieàu hay maø trong
quaù trình hoïc taäp khoâng caûm nhaän heát ñöôïc. Qua ñoù, toâi caàn boå sung raát nhieàu veà
kieán thöùc nhaát laø moân kyõ thuaät vi xöû lyù.
Toâi xin chaân thaønh caûm ôn söï giuùp ñôõ taän tình vaø quyù baùu cuûa caùc thaày-coâ ñaõ
taïo nhieàu ñieàu kieän cho toâi hoaøn thaønh toát nhieäm vuï ñöôïc giao ñuùng thôøi gian qui
ñònh.
Toâi raát mong söï ñoùng gôùp yù kieán cuûa quyù thaày – coâ cuøng caùc baïn sinh vieân
thaân meám ñeå taäp ñeà taøi ñöôïc hoaøn haûo hôn.
PHUÏ LUÏC
MOÂ TAÛ TAÄP LEÄNH CUÛA VI XÖÛ LYÙ 8086
šl›
Coù nhieàu caùch trình baøy taäp leänh cuûa moät vi xöû lyù: trình baøy caùc leänh theo
nhoùm hoaëc theo thöù töï A, B, C. Ñeå tieän cho vieäc tìm kieáp vaø tra cöùu cuï theå ta choïn
caùch trình baøy theo thöù töï A, B, C.
v AAA – ASCII Adjust after Addition (Chænh sau khi coäng hai soá ôû daïng
ASCII):
Döõ lieäu truyeàn töø caùc thieát bò ñaàu cuoái ñeán maùy tính thöôøng ôû daïng maõ ASCII.
Khi ñaõ truyeàn ñi caùc soá ASCII roài, ñoâi khi ta muoán coäng luoân caùc soá ñoù. Boä vi xöû lyù
8086 cho pheùp ta laøm ñieàu naøy vôùi ñieàu kieän phaûi chænh laïi keát quaû coù trong AL
baèng leäng AAA ñeå thu ñöôïc keát quaû laø soá BCD khoâng goùi.
Caäp nhaät: AF, CF.
Khoâng xaùc ñònh: OF, PF, SF, ZF.
v AAD – ASCII Adjust before Division (Chænh tröôùc khi chia hai soá ôû daïng
ASCII)
Leänh naøy ñoåi hai soá BCD khoâng goùi ôû Ah vaø Al sang soá heä hai töông ñöông ñeå
taïi AL. Vieäc naøy phaûi thöïc hieän tröôùc khi laøm pheùp chia moät soá BCD khoâng goùi
(goàm hai chöõ soá) ñeå trong AX cho moät soá BCD khoâng goùi khaùc. Keát quaû vaø soá dö
cuõng laø caùc soá BCD khoâng goùi.
Khoâng xaùc ñònh taát caû caùc côø.
v AAM – ASCII Adjust after Multiplication (Chænh sau khi nhaân hai soá
daïng ASCII).
Leänh naøy duøng ñeå ñoåi moät soá heä hai, laø tích cuûa hai soá BCD khoâng goùi, coù
trong AL sang soá BCD khoâng goùi ñeå taïi AX.
Caäp nhaät: PF, SF, ZP
Khoâng xaùc ñònh: AF, CF, OF.
v AAS – ASCII Adjust after Subtraction (Chænh sau khi tröø hai soá daïng
ASCII)
Leänh naøy duøng ñeå ñoåi soá heä hai, laø hieäu cuûa 2 soá BCD khoâng goùi, coù ôû Al sang
soá BCD khoâng goùi.
Caäp nhaät: AF, CF.
Khoâng xaùc ñònh: OF, PF, SF, ZF.
v ADC – Add With Carry (coäng coù nhôù)
Cuù phaùp: ADC Ñích, Goác
Moâ taû: Ñích ¬ Ñích + Goác + CF
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø hai
oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Ñieàu haïn cheá naøy cuõng ñöôïc aùp duïng
cho caùc leänh khaùc coù ngöû phaùp töông töï.
v ADD – Add (Coäng 2 toaùn haïng)
Cuù phaùp: ADD Ñích, Goác
Moâ taû: Ñích ¬ Ñích + Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñònh ñòa chæ
khaùc nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi
laø hai oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn.
Caäp nhaät: AF, CF, OF, PF, SF, ZF
v AND – And Corresponding Bits of Two Operands (Vaø 2 toaùn haïng)
Cuù phaùp: AND Ñích, Goác
Moâ taû: Ñích ¬ Ñích Ù Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñònh ñòa chæ
khaùc nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi
laø hai oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Pheùp AND thöôøng duøng ñeå che
ñi/giöõ laïi moät vaøi bit naøo ñoù cuûa moät toaùn haïng baèng caùch nhaân logic toaùn haïng ñoù
vôùi toaùn haïng töùc thì coù caùc bit 0 – 1 ôû caùc choå caàn che ñi/giöõ nguyeân töông öùng
(toaùn haïng töùc thì luùc naøycoøn ñöôïc goïi laø maët naï).
Xoùa: CF, OF
Caäp nhaät: PF, SF, ZP.PF chæ coù nghóa khi toaùn haïng laø 8 bit.
Khoâng xaùc ñònh: AF.
v CALL – Call a Procedure (Goïi chöông trình con)
Moâ taû:
Leänh naøy duøng ñeå chuyeån hoaït ñoäng cuûa boä vi xöû lyù töø chöông trình chính sang
chöông trình con. Neáu chöông trình con ôû trong cuøng moät ñoaïn maõ vôùi chöông trình
chính thì ta coù goïi gaàn (near call). Neáu chöông trình chính vaø chöông trình con ôû hai
ñoaïn maõ khaùc nhau thì ta coù goïi xa (far call). Goïi gaàn vaø goïi xa khaùc nhau veà caùch
taïo ra ñòa chæ trôû veà (return address). Ñòa chæ trôû veà laø ñòa chæ cuûa leänh tieáp ngay sau
leänh Call. Khi goïi gaàn thì chæ caàn caát IP cuûa ñòa chæ trôû veà (vì CS khoâng ñoåi) khi goïi
xa thì phaûi caát caû CS vaø IP cuûa ñòa chæ trôû veà. Ñòa chæ trôø veà ñöôïc töï ñoäng caát taïi
ngaên xeáp khi baét ñaàu thöïc hieän leänh goïi vaø ñöôïc tuï ñoäng laáy ra khi gaêp leänh Ret (trôû
veà chöông trình chính töø chöông trình con) taïi cuoái chöông trình con.
Nhö vaäy, neáu laø goïi gaàn:
· SP ¬ SP – 2 vaø ñòa chæ leänh trôû veà ñöôïc caát vaøo ngaên xeáp {SP}¬IP
· IP ¬ ñòa chæ leäch cuûa chöông trình con.
· Khi gaëp leänh Ret taïi cuoái chöông trình con thì seõ coù thao taùc ngöôïc laïi:
{SP} ® IP vaø SP ¬ SP + 2
Coøn neáu goïi xa:
· SP ¬ SP – 2 vaø ñòa chæ leäch cuûa leänh trôû veà ñöôïc caát vaøo ngaên xeáp:
{SP}¬CS.
· SP ¬ SP – 2 vaø ñòa chæ cô sôû cuûa leänh trôû veà ñöôïc caát vaøo ngaên
xeáp:{SP}¬IP.
· IP ¬ ñòa chæ leäch cuûa chöông trình con.
CS ¬ ñòa chæ cô sôû cuûa chöông trình con.
· Khi gaëp leänh Ret taïi cuoái chöông trình con thì seõ thao taùc ngöôïc laïi:
{SP} ® IP vaø SP ¬ SP + 2.
{SP} ® CS vaø SP ¬ SP + 2.
Cuù phaùp: sau ñaây laø caùc ñaïng khaùc nhau cuûa caùc leänh goïi chöông trình con vaø
caùch tính ñòa chæ cuûa chöông trình con:
¨ CALL Multiple: goïi chöông trình con coù teân teân laø Multiple trong cuøng
ñoaïn maõ vôùi chöông trình chính, chöông trình con naøy naèm trong giôùi haïn dòch
chuyeån –32Kbyte (dòch veà phía ñòa chæ thaáp) hoaëc (32K-1)byte (dòch veà phía ñòa chæ
cao) so vôùi leänh tieáp theo ngay sau leänh CALL. Sau khi caát IP cuõ (ñòa chæ trôû veà)
vaøo ngaên xeáp, IP môùi ñöôïc tính: IP ¬ IP + Dòch chuyeån .
¨ CALL Divi: goïi chöông trình con teân Divi ôû ñoaïn maõ khaùc. Trong
chöông trình hôïp ngöõ Divi phaûi ñöôïc khai baùo laø moät chöông trình con ôû xa:
Divi proc far
Ñòa chæ cuûa chöông trình con laø ñòa chæ CS:IP cuûa Divi.
¨ CALL BX: goïi tröïc tieáp moät chöông trình con cuøng ñoaïn, leänh ñaàu tieân
cuûa chöông trình con dòch chuyeån so vôùi ñaàu ñoaïn baèng noäi dung cuûa thanh ghi BX,
do ñoù IP ¬ BX (SI, DI coù theå duøng thay choå cuûa BX).
¨ CALL WORD PTR [BX]: goïi chöông trình con khoâng naèm trong cuøng
moät ñoaïn maõ, chöông trình con coù ñòa chæ dòch chuyeån (tính töø leänh tieáp ngay sau
leänh goïi tôùi leänh ñaàu tieân chöông trình con) chöùa trong hai oâ nhôù do BX vaø BX+1
chæ ra trong ñoaïn DS. Ñòa chæ leäch naøy seõ ñöa vaøo IP (SI, DI coù theå duøng thay choå
cho BX).
¨ CALL DWORD PTR [BX]: goïi chöông trình con khoâng naèm trong
cuøng moät ñoaïn maõ, chöông trình con coù ñòa chæ CS:IP, giaù trò gaùn cho IP vaø CS chöùa
trong 4 oâ nhôù do BX vaø BX + 1 (cho IP) BX +2 vaø BX + 3 (cho CS) chæ ra trong ñoaïn
DS (SI, DI coù theå duøng thay choã cuûa BX).
v CBW – Convert a Byte to a Word (Chuyeån byte thaønh töø):
Leänh naøy môû roäng bit daáu cuûa AL sang 8 bit cuûa AH. AH luùc naøy ñöôïc goïi
phaàn môû roäng daáu cuûa AL. Ta duøng CBW ñeå môû roäng daáu cho soá coù daáu naèm trong
AL tröôùc khi muoán chia cho moät soá coù daáu 8 bit khaùc baèng leänh IDIV (leänh chia caùc
soá coù daáu) hoaëc tröôùc khi muoán nhaân noù cho moät soá 16 bit khaùc baèng leänh IMUL
(leänh nhaân caùc soá coù daáu).
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v CLC – Clear the Carry Flag (xoùa côø nhôù):
Moâ taû: CF ¬ 0
Moâ taû: tuøy theo ñoä daøi cuûa toaùn haïng Goác ta coù 2 tröôøng hôïp boá trí pheùp nhaân,
choå ñeå ngaàm ñònh cho soá bò nhaân vaø keát quaû:
· Neáu Goác laø soá coù daáu 8 bit: AL ´ Goác,
soá bò nhaân phaûi laø soá coù daáu 8 bit ñeå trong AL,
sau khi nhaân: AX ¬ tích
· Neáu Goác laø soá coù daáu 16 bit: AX ´ Goác,
soá bò nhaân phaûi laø soá coù daáu 16 bit ñeå trong AX,
sau khi nhaân: DXAX ¬ tích.
Neáu tích thu ñöôïc nhoû, khoâng ñuû laáp daày heát choå daønh cho noù thì caùc bit khoâng
duøng ñeán ñöôïc thay baèng bit daáu.
Neáu byte cao (hoaëc 16 bit cao) cuûa 16bit (hoaëc 32bit) keát quaû chæ chöùa caùc giaù
trò cuûa daáu thì CF=OF=0.
Neáu byte cao (hoaëc 16 bit cao) cuûa 16 bit (hoaëc 32 bit) keát quaû chöùa moät phaàn
keát quaû thì CF=OF=1.
Nhö vaäy, CF vaø OF seõ baùo cho ta bieát keát quaû caàn ñoä daøi thöïc chaát laø bao
nhieâu.
Caäp nhaät: CF, OF
Khoâng xaùc ñònh: AF, PF, SF, ZP.
v IN – Input data from a Port (Ñoïc döõ lieäu töø coång vaøo thanh Acc)
Cuù phaùp: IN Acc,Port
Moâ taû: Acc ¬ {Port}
Trong ñoù {Port}laø döõ lieäu cuûa coång coù ñòa chæ laø Port. Port laø 8 ñòa chæ bit cuûa
coång, noù coù theå coù caùc giaù trò trong khoaûng 00H … FFH. Nhö vaäy ta coù theå coù caùc
khaû naêng sau:
· Neáu Acc laø AL thì döõ lieäu 8 bit ñöôïc ñöa vaøo töø Port.
· Neáu Acc laø AX thì döõ lieäu 16 bit ñöôïc ñöa vaøo töø Port vaø Port + 1
Coù moät caùch khaùc ñeå bieåu dieãn ñòa chæ coång laø thoâng qua thanh ghi DX. Khi
duøng thanh ghi DX ñeå chöùa ñòa chæ coång ta seõ coù khaû naêng ñòa chæ hoùa coång meàm
deûo hôn. Luùc naøy ñòa chæ coång naèm trong daûi 0000H …FFFFH vaø ta vieát leänh theo
daïng:
IN Acc,DX
Trong ñoù DX phaûi ñöôïc gaùn töø giaù trò öùng vôùi ñòa chæ coång.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v INC – Increment Destination Register or Memory (Taêng toaùn haïng ñích
theâm 1)
Cuù phaùp: INC Ñích
Moâ taû: Ñích ¬ Ñích + 1
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñònh ñòa chæ khaùc
nhau. Löu yù laø neáu Ñích=FFH (hoaëc FFFFH) thì Ñích+1=00H (hoaëc 0000H) maø
khoâng aûnh höôûng ñeán côø CF. Leänh naøy cho keát quaû töông ñöông nhö leänh ADD
Ñích,1 nhöng chaïy nhanh hôn.
v JBE/JNA – Jump if Below or Equal/Jump Not Above (Nhaûy neáu thaáp hôn
hoaëc baèng/Nhaûy neáu khoâng cao hôn.
Cuù phaùp: JBE NHAN
JNA NHAN
Moâ taû: IP ¬ IP + Dòch chuyeån
Hai leänh treân bieåu dieån cuøng moät thao taùc: nhaûy coù ñieàu kieän tôùi NHAN neáu
CF + ZF = 1. Quan heä “treân“, “cao hôn” (above) vaø “döôùi”, “thaáp hôn” (below) laø
caùc quan heä daønh cho vieäc so saùnh (do leänh CMP thöïc hieän) ñoä lôùn cuûa hai soá khoâng
daáu. Nhaõn NHAN phaûi naèm cach xa (dòch ñi moät khoaûng) –128… +127 byte so vôùi
leänh tieáp theo sau leänh JBE/JNA. Chöông trình dòch seõ caên cöù vaøo vò trí NHAN ñeå
xaùc ñònh vò trí dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JCZX – Jump if CX Register if Zero (Nhaûy neáu noäi dung thanh ñeám roãng).
Cuù phaùp: JCZX NHAN
Moâ taû: IP ¬ IP + Dòch chuyeån.
Ñaây laø leänh nhaûy (coù ñieàu kieän) tôùi NHAN neáu CX = 0 vaø khoâng coù lieân heä gì
vôùi côø ZF. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) –128… +127 byte
so vôùi leänh tieáp theo sau leänh JCZX. Chöông trình dòch seõ caên cöù vaøo vò trí NHAN
ñeå xaùc ñònh vò trí dòch chuyeån.
Leänh naøy khoâng aûnh höôûng ñeán caùc côø.
v JE/JZ – Jump if Equal/Jump if Zero (Nhaûy neáu baèng nhau/Nhaûy neáu keát
quaû baèng khoâng)
Cuù phaùp: JE NHAN
JZ NHAN
Moâ taû: IP ¬ IP + Dòch chuyeån
Hai leänh treân bieåu dieãn cuøng moät thao taùc: nhaûy coù ñieàu kieän tôùi NHAN neáu
ZF = 1. Nhaõn NHAN phaûi naèm cach xa (dòch ñi moät khoaûng) –128…+127 byte so
vôùi leänh tieáp theo sau leänh JE/JZ. Chöông trình dòch seõ caên cöù vaøo vò trí NHAN ñeå
xaùc ñònh vò trí dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v JG/JNLE – Jump if Greater than/Jump if Not Less than or Equal: (Nhaûy
neáu lôùn hôn/Nhaûy neáu khoâng beù hôn hoaëc baèng)
Cuù phaùp: JG NHAN
JNLA NHAN
Moâ taû: IP ¬ IP + dòch chuyeån
Hai leänh treân bieåu dieãn cuøng moät thao taùc: nhaûy (coù ñieàu kieän) tôùi NHAN neáu
(SF Å OF) + ZF = 0. Quan heä “lôùn hôn” (greater than) vaø “beù hôn” (less than) laø
caùc quan heä daønh cho vieäc so saùnh (do leänh CMP thöïc hieän) cuûa hai soá coù daáu. Lôùn
hôn coù nghiaõ laø döông hôn. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) –
128 …+127 byte so vôùi leänh tieáp theo sau leänh JD/JNLE. Chöông trình dòch seõ caên
cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån.
nhaûy xa vaø nhaûy gaàn. Tuøy thuoäc vaøo ñoä daøi cuûa böôùc nhaûy chuùng ta phaân bieät 5
kieåu leänh nhaûy khaùc nhau: 3 kieåu nhaûy gaàn 2 kieåu nhaûy xa vôùi ñoä daøi leänh khaùc
nhau. Moãi oâ treân caùc leänh töông öùng duøng ñeå ghi leänh. nhö vaäy leänh nhaûy coù ñoä daøi
töø 2 ñeán 5 byte.
Sau ñaây laø caùc daïng leänh nhaûy khoâng ñieàu kieän:
· JMP NHAN
Leänh môùi baét ñaàu taïi ñòa chæ öùng vôùi nhaõn NHAN. Chöông trình dòch seõ caên cöù
vaøo khoaûng dòch giöõa nhaõn vaø leänh nhaûy ñeå xaùc ñònh xem ñoù laø:
+ Nhaûy ngaén (short jump):
Trong tröôøng hôïp naøy nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng)
nhieàu nhaát laø –128.. + 127 byte so vôùi leänh tieáp theo sau leänh JMP. Chöông trình
dòch caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån môû roäng daáu cho noù.
Sau ñoù:
IP ¬ IP + Dòch chuyeån
Ñaây laø leänh nhaûy tröïc tieáp vì dòch chuyeån ñöôïc ñeå tröïc tieáp trong maõ leänh.
Ñeå ñònh höôùng cho chöông trình dòch laøm vieäc neân vieát leänh döôùi daïng:
JMP SHORT NHAN
+ Nhaûy gaàn (near jump):
Trong tröôøng hôïp naøy nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng
nhieàu nhaát laø –32768..+32767 byte so vôùi leänh tieáp theo sau leänh JMP. Chöông trình
dòch seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån. Sau ñoù:
IP ¬ IP + Dòch chuyeån
Ñaây laø leänh nhaûy tröïc tieáp vì dòch chuyeån ñöôïc ñeå tröïc tieáp trong maõ leänh.
Ñeå ñònh höôùng cho chöông trình dòch laøm vieäc neân vieát leänh döôùi daïng :
JMP NEAR NHAN
+ Nhaûy xa (far jump):
Trong tröôøng hôïp naøy nhaõn NHAN naèm ôû ñoaïn maõ khaùc so vôùi leänh tieáp theo
sau leänh JMP. Chöông trình dòch seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò ñòa
chæ nhaøy ñeán (CS:IP cuûa NHAN). Sau ñoù:
Nhaûy ngaén:
IP ¬ IP cuûa NHAN
CS ¬ CS cuûa NHAN
Ñaây laø leänh nhaûy tröïc tieáp vì ñòa chæ nhaûy ñeán ñöôïc ñeå tröïc tieáp trong maõ leänh.
Ñeå ñònh höôùng cho chöông trình dòch laøm vieäc neân vieát leänh döôùi daïng:
JMP FAR NHAN
NHAN trong tröôøng hôïp naøy phaûi ñöôïc khai laø:
NHAN LABEL FAR
· JMP BX
Ñaây laø leänh nhaûy gaàn tröôùc ñoù BX phaûi chöùa ñòa chæ leäch cuûa leänh ñònh nhaûy
ñeán trong ñoaïn CS. Khi thöïc hieän leänh naøy
IP ¬ BX
Ñaây cuõng laø leänh nhaûy giaùn tieáp vì ñòa chæ leäch naèm trong thanh ghi.
Ñeå ñònh höôùng cho chöông trình dòch laøm vieäc neân vieát leänh döôùi daïng:
JMP NEAR PTR BX
· JMP [BX]
Ñaây laø leänh nhaûy gaàn IP môùi ñöôïc laáy töø noäi dung 2 oâ nhôù do BX vaø BX+1 chæ
ra cho ñoaïn DS (SI, DI coù theå duøng thay choã cuûa BX).
Ñaây cuõng laø leänh nhaûy giaùn tieáp vì ñòa chæ leäch naèm trong oâ nhôù.
Ñeå ñònh höôùng cho chöông trình dòch laøm vieäc neân vieát leänh döôùi daïng:
JMP WORD PTR [BX]
Moät bieán daïng khaùc cuûa leänh treân thu ñöôïc khi ta vieát döôùi daïng :
JMP DWORD PTR [BX]
Ñaây laø leänh nhaûy xa öùng. Ñòa chæ nhaûy ñeán öùng vôùi CS:IP, giaù trò gaùn cho IP vaø
CS ñöôïc chöùc trong 4 oâ nhôù do BX vaø BX+1 (cho IP) vaø BX+2 vaø BX+3 (cho CS)
chæ ra trong ñoaïn DS (SI, DI coù theå duøng thay choã cuûa BX).
Ñaây cuõng laø leänh nhaûy giaùn tieáp vì ñòa chæ leäch vaø ñòa chæ cô sôû naèm trong oâ
nhôù.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JNA – Xem JBE
v JNAE – Xem JB
v JNB – Xem JAE
v JNBE – Xem JA
v JNC – Xem JAE
v JNE/JNZ – Jump if Not Equal/Jump if Not Zero (Nhaûy neáu khoâng baèng
nhau/Nhaûy neáu keát quaû khoâng roãng)
Vieát leänh : JNE NHAN
JNZ NHAN
Moâ taû : IP ¬ IP + Dòch chuyeån
Hai leänh treân bieåu dieãn cuøng moät thao taùc : nhaûy (coù ñieàu kieän) tôùi NHAN
neáu ZF = 0. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) –128…+127 byte
so vôùi leänh tieáp theo sau leänh JNE/JNZ. Chöông trình dòch seõ caên cöù vaøo vò trí
NHAN ñeå xaùc ñònh giaù trò dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JNG – Xem JLE
v JNGE – Xem JL
v JNL – Xem JGE
v JNLE – Xem JG
v JNO – Jump if No Overflow (Nhaûy neáu khoâng traøn)
Vieát leänh: JNO NHAN
Moâ taû: IP ¬ IP + Dòch chuyeån
Ñaây laø leänh nhaûy (coù ñieàu kieän) tôùi NHAN neáu OF=0, töù khoâng xaûy ra traøn sau
khi thöïc hieän caùc pheùp toaùn vôùi caùc soá coù daáu. Nhaõn NHAN phaûi naèm caùch xa (dòch
ñi moät khoaûng) –128…+127 byte so vôùi leänh tieáp theo sau leänh JNO. Chöông trình
dòch seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v JNZ - Xem JNE
v JO - Jump if Overflow (nhaûy neáu traøn)
Vieát leänh : JO NHAN
Moâ taû : IP ¬ IP + Dòch chuyeån.
Ñaây laø leänh nhaûy (coù ñieàu kieän) tôùi NHAN neáu OF =1, töùc xaûy ra traøn sau khi
thöïc hieän caùc pheùp toaùn vôùi caùc soá coù daáu. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi
moät khoaûng (-128…+127 byte so vôùi leänh tieáp theo sau leänh JO. Chöông trình dòch
seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JP/JPE - Jump if Parity/Jump if Parity Even (Nhaûy neáu parity chaün)
Cuù phaùp: JP NHAN
JPE NHAN
Moâ taû : IP ¬ IP + Dòch chuyeån
Hai leänh treân bieåu dieãn cuøng moät thao taùc : Nhaûy (coù ñieàu kieän) tôùi NHAN neáu
PE=1. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) - 128... byte so vôùi leänh
tieáp theo sau leänh JP/JPE. Chöông trình dòch seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh
giaù trò dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JPE - Xem JP
v JPO - Xem JNP
v JS - Jump if Signed (Jump if Negative) (Nhaûy neáu keát quaû aâm).
Cuù phaùp: JS NHAN
Moâ taû : IP ¬ IP + Dòch chuyeån.
Ñaây laø leänh nhaûy (coù ñieàu kieän) tôùi NHAN SF=1, töùc keát quaû laø aâm sau khi
thöïc hieän caùc pheùp toaùn vôùi caùc soá coù daáu. Nhaõn NHAN phaûi naèm caùch xa (dòch ñi
moät khoaûng) -128…+127 byte so vôùi leänh tieáp theo sau leänh JS. Chöông trình dòch
seõ caên cöù vaøo vò trí NHAN ñeå xaùc ñònh giaù trò dòch chuyeån.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v JZ - Xem JE
v LAHF - Load AH with the low byte of the Flag Register (Naïp byte thaáp
cuûa thanh côø vaøo AH).
Duøng leänh naøy phoái hôïp vôùi leänh PUSH AX thì coù theå moâ phoûng leänh PUSH
PSW cuûa boä vi xöû lyù 8085 treân 8086 (leänh PUSH PSW cuûa vi xöû lyù 8085 caát thanh
ghi côø vaø Acc cuûa noù vaøo ngaên xeáp).
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v DS - Load Register and DS with Words from Memory Naïp moät töø (töø boä
nhôù) vaøo thanh ghi cho trong leänh vaø moät töø tieáp theo vaøo DS).
Cuù phaùp: LDS Ñích, Goác
Trong ñoù :
+ Ñích laø moät trong caùc thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI.
+ Goác laø oâ nhôù trong ñoaïn DS ñöôïc chæ roõ trong leänh.
Moâ taû : Ñích ¬ Goác, DS ¬ Goác + 2.
Ñaây laø leänh ñeå naïp vaøo thanh ghi ñaõ choïn vaø vaøo DS töø 4 oâ nhôù lieân tieáp.
Moät trong nhöõng öùng duïng cuûa leänh naøy laø laøm cho SI vaø DS chæ vaøo ñòa chæ
ñaàu cuûa vuøng nhôù chöùa chuoãi goác tröôùc khi duøng ñeán leänh thao taùc chuoãi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v LEA - Load Effective Address (Naïp ñòa chæ hieäu duïng vaøo thanh ghi).
Cuù phaùp: LEA Ñích, Goác
Trong ñoù:
+ Ñích thöôøng laø moät trong caùc thanh ghi: BX, CX, DX, BP, SI, DI.
+ Goác laø teân bieán trong ñoaïn DS ñöôïc chæ roõ leänh hoaëc oâ nhôù cuï theå.
Moâ taû: Ñích ¬ Ñòa chæ leänh cuûa Goác, hoaëc
Ñích ¬ Ñòa chæ hieäu duïng cuûa goác.
Ñaây laø leänh ñeå tìm ñòa chæ leäch cuûa bieán hoaëc ñòa chæ cuûa oâ nhôù choïn laøm goác
roài naïp vaøo thanh ghi ñaõ choïn
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v LES – Load Register and ES with Words from Memory Naïp moät töø töø boä
nhôù) vaøo thanh ghi cho trong leänh vaø moät töø tieáp theo vaøo ES)
Cuù phaùp: LES Ñích, Goác
Trong ñoù :
+ Ñích laø moät trong caùc thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI.
+ Goác laø oâ nhôù tong ñoaïn DS ñöôïc chæ roõ trong leänh.
Moâ taû : Ñích ¬ Goác, ES ¬ Goác + 2.
Ñaây laø leänh ñeå naïp vaøo thanh ghi ñaõ choïn vaø vaøo ES töø 4 oâ nhôù lieân tieáp.
Moät trong nhöõng öùng duïng cuûa leänh naøy laø laøm cho DI vaø ES chæ vaøo ñòa chæ
daáu cuûa vuøng nhôù chöùa chuoãi ñích tröôùc khi duøng ñeán leänh thao taùc chuoãi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
Naïp vaøo DI noäi dung 2 oâ nhôù do BX vaø BX + 1 chæ ra naïp vaøo ES noäi dung 2 oâ
nhôù tieáp theo do BX + 2 vaø BX + 3 chæ ra. Caùc oâ nhôù naøy ñeàu naèm trong ñoaïn döõ
lieäu DS vaø chöùa ñòa chæ cuûa chuoåi ñích. Do vaäy sau ñoù ES:DI chæ vaøo ñaàu chuoåi ñích
caàn thao taùc.
v LOCK – Assert Bus Lock Signal (Ñöa ra tín hieäu khoùa bus)
Leänh LOCK duøng ñaët tröôùc caùc leänh maø khi chaïy noù coù nguy cô gaây loãi do khaû
naêng xaûy ra tranh chaáp trong vieäc söû duïng bus giöõa boä vi xöû lyù 8086 vaø caùc boä xöû lyù
khaùc trong heä thoáng ña xöû lyù. Neáu coù leänh LOCK ñaët tröôùc moät leänh naøo ñoù, thì khi
chaïy leänh naøy, 8086 ñöa ra tín hieäu khoùa bus. Tín hieäu naøy seõ noái ra thieát bò ñieàu
khieån bus ngoaøi ñeå caám caùc boä xöû lyù khaùc trong heä thoáng söû duïng bus.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
Leänh XCHG caàn 2 laàn thaâm nhaäp bus ñeå hoaøn taát vieäc thöïc hieän leänh, do ñoù
caàn ñaët sau LOCK ñeå traùnh nguy cô tranh chaáp bus coù theå xaûy ra trong heä thoáng ña
xöû lyù.
v LODS/LODSB/LODSW – Load String Byte/Word into AL/AX (Naïp vaøo
AL/AX 1 phaàn töû cuûa chuoãi byte/töø)
Cuù phaùp: LODS Chuoãi goác
LODSB
LODSW
Moâ taû : AL ¬ Phaàn töû hieän thôøi, SI ¬ SI + tuøy theo DF, neáu laø chuoãi
byte
AX ¬ Phaàn töû hieän thôøi, SI ¬ SI + 2 tuøy theo DF, neáu laø chuoãi
töø
(Phaàn töû hieän thôøi cuûa chuoãi laø do DS : SI hieän thôøi chæ ra)
Leänh LODS naïp vaøo AL/AX 1 bytes/ töø (1 phaàn töû cuûa chuoãi ñaõ ñöôïc ñònh
nghóa tröôùc laø chuoãi goàm caùc byte hoaëc töø do SI chæ ra trong ñoaïn DS, sau ñoù SI töï
ñoäng taêng/giaûm ñeå chæ vaøo phaàn töû tieáp theo tuøy theo côø höôùng. Khi phaûi dòch leänh
LODS Chuoãigoác, chöông trình dòch duøng teân Chuoãigoác ñeå xaùc ñònh xem luùc khai
baùo thì Chuoãigoác coù caùc phaàn töû laø byte hay töø. Muoân chæ roõ cho chöông trình dòch
hôïp ngöõ raèng ta laøm vieäc vôùi chuoãi caùc byte hoaëc caùc töø, ta cuõng coù theå duøng leänh
LODSB hoaëc LODSW.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v LOOP – Jump to Speciafied Label if CX # O after Autodecrement (laëp laïi
ñoaïn chöông trình do nhaõn chæ ra cho ñeán khi CX = 0.
Cuù phaùp: LOOP NHAN
Moâ taû:
Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûng
töø nhaõn NHAN ñeán heát leänh LOOP NHAN) cho ñeán khi soá laàn laëp CX = 0. Ñieàu
naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi ñöa soá laàn laëp mong muoán vaøo thanh
ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP NHAN thì ñoàng thôøi CX töï ñoäng giaûm
ñi 1 (töùc laø CX ¬ CX – 1)
Nhaõn NHAN phaûi naèm caùch xa dòch ñi moät khoaûng) – 128 byte so vôùi leänh tieáp
theo sau leänh LOOP.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v LOOPE/LOOPZ – Loop White CX # O and ZF = 1 (Laëp laïi ñoaïn chöông
trình do nhaõn chæ ra cho ñeán khi CX=0 hoaëc ZF = 0)
Cuù phaùp: LOOPE NHAN
LOOPZ NHAN
Moâ taû:
Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûn töø
nhaõn NHAN ñeán heát leänh LOOPE NHAN hoaëc LOOPZ NHAN) cho ñeán khi soá laàn
laëp CX = 0, hoaëc ZF = 0. Ñieàu naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi ñöa soá
laàn laëp mong muoán vaøo thanh ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP NHAN
thì ñoàng thôøi CX töï ñoäng giaûm ñi 1 (töùc laø CX ¬ CX – 1)
Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) –128 byte so vôùi leänh tieáp
theo sau leänh LOOPE / LOOPZ.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v LOOPNE/LOOPNZ – Loop While CX # O and ZF = 0 (Laëp laïi ñoaïn
chöông trình do nhaõn chæ ra cho ñeán khi CX = 0 hoaëc ZF = 1)
Cuù phaùp: LOOPE NHAN
LOOPZ NHAN
Moâ taû:
Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûng
töø nhaõn NHAN ñeán heát leänh LOOPNE NHAN hoaëc LOOPNZ NHAN) cho ñeán khi
soá laàn laëp CX = 0 hoaëc ZF = 1. Ñieàu naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi
ñöa soá laàn laëp mong muoán vaøo thanh ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP
NHAN thì ñoàng thôøi CX töï ñoäng giaûm ñi 1 (töùc laø CX ¬ CX – 1)
Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) – 128 byte so vôùi leänh
tieáp theo sau leänh LOOPNE/LOOPNZ.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
LOOPNZ – Xem LOOPNE
LOOPZ – Xem LOOPE
v MOV – Move a Word or Byte (Chuyeån moät töø hay moät byte)
Cuù phaùp: MOV Ñích, Goác
Moâ taû : Ñích ¬ Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù hoaëc 2
thanh ghi ñoaïn.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v MOVS/MOVSB/MOVSW – Move String Byte or String Word (Chuyeån 1
phaàn töû cuûa 1 chuoãi sang moät chuoãi khaùc)
Cuù phaùp: MOVS Chuoãiñích, Chuoãigoác
MOVSB
MOVSW
Moâ taû : Phaàn töû Chuoãiñích ¬ Phaàn töû Chuoãigoác
Leänh naøy duøng chuyeån töøng byte hay töøng töø cuûa chuoãi goác sang chuoãi ñích
trong ñoù:
+ DS:SI laø ñòa chæ cuûa phaàn töû trong chuoãi goác.
+ ES:DI laø ñòa chæ cuûa phaàn töû trong chuoãi ñích.
+ Sau moãi laàn chuyeån SI ¬ SI + 1. DI ¬ DI + 1 hoaëc SI ¬ SI + 2. DI ¬ DI +
2 moät caùch töï ñoäng tuøy thuoäc côø höôùng DF laø 0/1 vaø chuoãi laø chuoãi byte hoaëc chuoãi
töø.
Coù 2 caùch ñeå chæ ra chuoãi byte hoaëc chuoãi töø. Caùch ñaàu tieân laø ta khai roõ baèng
teân chuoãi nguoàn vaø chuoãi ñích laø loaïi gì ngay töø ñaàu chöông trình. Caùch thöù hai laø ta
theâm vaøo leänh MOVS ñuoâi “B” cho chuoãi byte hoaëc ñuoâi “W” cho chuoãi töø (xem
moâ taû caùch söû duïng taïi leänh COMPS).
Leänh MOVS/MOVSB/MOVSW coù theå duøng keøm vôùi leän REPE hoaëc REPNE
ñeå so saùnh taát caû caùc phaàn töû trong chuoãi.
v MUL – Multiply Unsigned Byte or Word (Nhaõn soá khoâng daáu)
Cuù phaùp: MUL Goác
Trong ñoù toaùn haïng Goác laø soá nhaân vaø coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ
khaùc nhau.
Moâ taû:
Tuøy theo ñoä daøi cuûa toaùn haïng Goác ta coù 2 tröôøng hôïp toå chöùc pheùp nhaân,
choã ñeå ngaàm ñònh cho soá bò nhaân vaø keát quaû.
+ Neáu Goác laø soá 8 bit : AL x Goác
soá bò nhaân phaûi laø soá 8 bit ñeå trong AL.
sau khi nhaân : AX ¬ tích
+ Neáu Goác laø soá 16 bit : AX x Goác
soá bò nhaân phaûi laø soá 16 bit ñeå trong AX.
sau khi nhaân : DXAX ¬ tích
Neáu byte cao (hoaëc 16 bit cao) cuûa 16 (hoaëc 32) bit keát quaû chöùa 0 thì CF = OF
= 0.
Nhö vaäy caùc côø CF vaø OF seõ baùo cho ta bieát coù theå boû ñi bao nhieâu soá 0 trong
keát quaû.
Caäp nhaät : CF, OF
Khoâng xaùc ñònh : AF, PF, SF, ZP
v NEG – Negate a Operand (Form its 2’s Complement) (Laáy buø hai cuûa
moät toaùn haïng, ñaûo daáu cuûa moät toaùn haïng).
Cuù phaùp: NEG Ñích
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau.
Moâ taû : Ñích ¬ 0 - (Ñích)
Ñieàu naøy hoaøn toaøn töông ñöông vôùi vieäc laáy (Ñích + 1) laøm keát quaû. Neáu ta
laáy buø hai cuûa –128 hoaëc –32768 thì ta seõ ñöôïc keát quaû khoâng ñoåi nhöng côø
OF = 1 ñeå baùo laø keát quaû bò traøn (vì soá döông lôùn nhaát bieåu dieãn ñöôïc laø +127 vaø
+32767)
Caäp nhaät : AF, CF, OF, PF, SF, ZF.
v NOP – No Operation (CPU khoâng laøm gì)
Leänh naøy khoâng thöïc hieän moät coâng vieäc gì ngoaïi tröø vieäc taêng noäi dung cuûa
IP vaø tieâu toán 3 chu kyø ñoàng hoà. Noù thöôøng ñöôïc duøng ñeå tính thôøi gian trong caùc
voøng treã hoaëc ñeå chieám choã cho caùc leänh caàn theâm vaøo chöông trình sau naøy maø
khoâng laøm aûnh höôûng toái ñoä daøi cuûa chöông trình.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v NOT – Invert Each Bit of an Operand (From its 1’s Complement) (Laáy buø
cuûa moät toaùn haïng, ñaûo bit cuûa moät toaùn haïng)
Cuù phaùp: NOT Ñích
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau.
Moâ taû: Ñích ¬ (Ñích)
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v OR – Logically Or Corresponding Bits of Two Operands (Hoaëc 2 toaùn
haïng)
Cuù phaùp: OR Ñích, Goác.
Moâ taû: Ñích ß Ñích v Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi chöùa döõ lieäu cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù
vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Pheùp OR thöôøng duøng ñeå laäp moät vaøi bit naøo
ñoù cuûa toaùn haïng baèng caùch coäng logic toaùn haïng ñoù vôùi toaùn haïng töùc thôøi coù caùc
bit 1 taïi caùc vò trí töông öùng caàn thieát laäp.
Xoaù: CF, OF
Caäp nhaät : PF, SF, ZP, PF chæ coù nghóa khi toaùn haïng laø 8 bit
Khoâng xaùc ñònh : AF
v OUT – Output a Byte or a Word to a Port (Ñöa döõ lieäu töø Acc ra coång)
Cuù phaùp: OUT Port, Acc
Moâ taû: Acc ® {Port}
Trong ñoù {Port} laø döõ lieäu cuûa coång coù ñòa chæ laø Port. Port laø ñòa chæ 8 bit cuûa
coång, noù coù theå coù caùc giaù trò trong khoaûng 00H…FFH. Nhö vaäy ta coù theå coù caùc
khaû naêng sau:
+ Neáu Acc laø AL thì döõ lieäu 8 bit ñöôïc ñöa ra coång Port
+ Neáu Acc laø AX thì döõ lieäu 16 bit ñöôïc ñöa ra coång Port vaø coång Port + 1
Coù moät caùch khaùc ñeå bieåu dieãn ñòa chæ coång laø thoâng qua thanh ghi DX. Khi
duøng thanh ghi DX ñeå chöùa ñòa chæ coång ta seõ coù khaû naêng ñòa chæ hoùa coång meàm
deûo hôn. Luùc naøy ñòa chæ coång naèm trong daûi 0000H…FFFFH vaø ta phaûi vieát leänh
theo daïng:
OUT DX, Acc
Trong ñoù DX phaûi ñöôïc gaùn töø tröôùc giaù trò öùng vôùi ñòa chæ coång.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v POP – Pop Word from Top of Stack (Laáy laïi 1 töø vaøo thanh ghi töø ñænh
ngaên xeáp)
Cuù phaùp: POP Ñích
Moâ taû : Ñích ¬ {SP}
SP ¬ SP + 2
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau: coù
theå laø caùc thanh ghi ña naêng, thanh ghi ñoaïn (nhöng khoâng ñöôïc laø thanh ghi ñoaïn
maõ CS) hoaëc oâ nhôù. Döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi. Giaù trò cuûa SS khoâng
thay ñoåi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v POPF – Pop Word from Top of Stack to Flag Register (Laáy 1 töø töø ñænh
ngaên xeáp roài ñöa vaøo thanh côø)
Cuù phaùp: POPF
Moâ taû : RF ¬ {SP}
SP ¬ SP + 2
Sau leänh naøy döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi, SS khoâng thay ñoåi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v PUSH – Push Word on the Stack (Caát 1 töø vaøo ngaên xeáp)
Cuù phaùp: Push Goác
Moâ taû : SP ¬ SP – 2
Goác ® {SP}
Trong ñoù toaùn haïng goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau: coù
theå laø caùc thanh ghi ña naêng, thanh ghi ñoaïn hoaëc oâ nhôù. Leänh naøy thöôøng duøng vôùi
leänh POP nhö laø moät caëp ñoái ngaãu ñeå xöû lyù caùc döõ lieäu vaø traïng thaùi cuûa chöông
trình chính (CTC) khi vaøo/ra chöông trình con (ctc).
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v PUSHF – Push Flag Register to the Stack (caát thanh côø vaøo ngaên xeáp)
Cuù phaùp: PUSHF
Moâ taû : SP ¬ SP – 2
RF ® {SP}
Döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi. SS khoâng thay ñoåi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v RCL – rotate though CF to the Left (Quay traùi thoâng qua côø nhôù)
Cuù phaùp: RCL Ñích, CL
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau.
Leänh naøy duøng ñeå quay toaùn haïng sang traùi thoâng qua côø CF. CL phaûi ñöôïc
chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc
tieáp :
RCL Ñích, 1
(Töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu
naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu soá laàn quay laø 9 thì keát quaû
khoâng thay ñoåi vì caëp CF vaø toaùn haïng quay troøn ñuùng moät voøng.
Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng
Sau leänh RCL côø CF mang giaù trò cuõ cuûa MSB bò thay ñoåi so vôùi tröôùc khi
quay. Côø OF seõ khoâng ñöôïc xaùc ñònh nhieàu laàn quay.
v RCR – Rotate though CF to the Right (Quay phaûi thoâng qua côø nhôù)
Cuù phaùp: RCR Ñích, CL
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau
Leänh naøy duøng ñeå quay toaùn haïng sang phaûi thoâng qua côø CF, CL phaûi ñöôïc
chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc
tieáp :
RCR Ñích, 1
(töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu
naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu soá laàn quay laø 9 thì keát quaû
khoâng thay ñoåi vì caëp CF vaø toaùn haïng thanh ghi quay troøn ñuùng moät voøng
Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng
Sau leänh RCR côø CF mang giaù trò cuõ cuûa LSB, coøn côø OF ¬ 1 neáu sau khi
quay 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi quay. Côø OF seõ khoâng ñöôïc xaùc
ñònh sau nhieàu laàn quay
v REP – Repeat String Instruction until CX = 0 (laëp laïi leänh vieát sau ñoù cho
tôùi khi CX = 0)
Ñaây laø tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu maø
ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX. Khi caùc leänh naøy
ñöôïc laëp laïi thì CX töï ñoäng giaûm ñi 1 sau moãi laàn laëp. Quaù trình seõ keát thuùc khi
CX = 0.
v REPE/REPZ – Repeat String Instruction until CX = 0 or ZF = 0 (Laëp laïi
leänh vieát sau ñoù cho tôùi CX=0 hoaëc ZF=0
Ñaây laø caùc tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu
maø ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX. Khi caùc leänh naøy
ñöôïc laëp laïi thì CX töï ñoäng giaûm ñi 1 sau moãi laàn laëp. Khi duøng REPE/REPZ vôùi
leänh so saùnh chuoãi, quaù trình seõ keát thuùc khi ñeám heát (CX = 0) hoaëc sau khi 2 phaàn
töû so saùnh khaùc nhau (ZF = 0).
v REPNE/REPNZ – Repeat String Instruction until CX = 0 or ZF = 1 (laëp
laïi leänh vieát sau ñoù cho tôùi khi CX = 0 hoaëc ZF = 1)
Ñaây laø caùc tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu
maø ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX töï ñoäng giaûm ñi
sau moãi laàn laëp. Khi duøng REPNE/REPNZ vôùi leänh queùt chuoãi, quaù trình seõ keát thuùc
khi ñeám heát (CX=0) hoaëc khi Acc baèng phaàn töû cuûa chuoãi (ZF = 1).
v RET – Return from Procedure to Calling Program (Trôû veà chöông trình
chính töø chöông trình con)
Cuù phaùp: RET hoaïc RET n, n laø soá nguyeân döông
Moâ taû :
RET ñöôïc ñaët taïi cuoái ctc ñeå boä vi xöû lyù laáy laïi ñòa chæ trôû veà (ñòa chæ cuûa leänh
tieáp theo leänh goïi ôû chöông trìng chính), noù ñöôïc töï ñoäng caát ôû ngaên xeáp khi coù leänh
goïi chöông trình con. Tuøy theo loaïi leänh goïi gaàn hay xa ta cuõng seõ coù caùc xöû lyù khaùc
nhau ñoái vôùi ñòa chæ trôû veà (xem theâm phaàn moâ taû chung vôùi leänh CALL)
Ñaëc bieät neáu ta duøng RET n thì sau khi ñaõ laáy laïi ñöôïc ñòa chæ trôû veà (chæ coù IP
hoaëc coù caû CS vaø IP) thì SP ¬ SP + n (duøng ñeå nhaûy qua maø khoâng laáy laïi caùc
thoâng soá khaùc cuûa chöông trình coøn laïi trong ngaên xeáp)
chia soá khoâng daáu cho moät soá khoâng daáu töông ñöông vôùi 2 baèng caùch dòch phaûi
logic soá bò chia i laàn.
Taùc ñoäng vaøo côø :
Sau leänh SHR côø CF mang giaù trò cuõ cuûa LSB (vì vaäy leänh naøy coøn duøng ñeå
taïo côø CF töø giaù trò cuûa LSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän), coøn côø
OF ¬ 1 neáu sau khi dòch 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi dòch. Côø OF
seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn dòch
Caäp nhaät: SF, ZF, PF, PF chæ coù yù nghóa khi keát quaû laø 8 bit.
Khoâng xaùc ñònh: AF.
v STC – Set the Carry Flag (Laäp côø nhôù)
Moâ taû: CF ¬ 1
Khoâng taùc ñoäng ñeán caùc côø khaùc
v STD – Set the Direction Flag (Laäp côø höôùng)
Moâ taû: DF ¬ 1
Leänh naøy ñònh höôùng thao taùc cho caùc leänh laømvieäc vôùi chuoãi theo chieàu luøi
(¬). Caùc thanh ghi SI vaø DI lieân quan seõ ñöôïc töï ñoäng giaûm khi laøm vieäc xong vôùi
moät phaàn töû cuûa chuoãi.
Khoâng taùc ñoäng ñeán caùc côø khaùc
v STI – Set the Interrupt Flag (Laäp côø cho pheùp ngaét)
Moâ taû: IF ¬ 1
Leänh naøy laäp côø cho pheùp ngaét ñeå cho pheùp caùc yeâu caàu ngaét taùc ñoäng vaøo
chaân INTR ñöôïc CPU nhaän bieát. Khi IF = 1 neáu coù tín hieäu INTR = 1 thì 8086 seõ bò
ngaét, noù seõ töï ñoäng caát thanh ghi côø vaø ñòa chæ trôû veà vaøo ngaên xeáp roài chuyeån sang
chaïy chöông trình (con) phuïc vuï ngaét CTPVN. Taïi cuoái CTPVN seõ coù leänh trôû veà
CTC töø CTPVN (IRET) ñeå 8086 laáy laïi töø ngaên xeáp giaù trò cuûa thanh ghi côø vaø ñòa
chæ trôû veà.
Khoâng taùc ñoäng ñeán caùc côø khaùc.
v STOS/STOSB/STOSW – Store AL/AX in String Byte/Word (caát AL/AX
vaøo 1 phaàn töû cuûa chuoãi byte/töø)
Cuù phaùp: STOS Chuoãiñích
STOSB
STOSW
Moâ taû : AL ® Phaàn töû hieän thôøi, DI ¬ DI + tuøy theo DF, neáu laø chuoãi
byte
AX ® Phaàn töû hieän thôøi, DI ¬ DI + 2 tuøy theo DF, neáu laø chuoãi
töø
(Phaàn töû chuoãi ñích laø do ES:DI hieän thôøi chæ ra)
Leänh STOS caát AL/AX vaøo 1 byte/töø (1 phaàn töû cuûa chuoãi ñaõ ñöôïc ñònh nghóa
tröôùc laø chuoãi goàm caùc byte hoaëc töø) do DI chæ ra trong ñoaïn ES, sau ñoù DI töï ñoäng
taêng/giaûm ñeå chæ vaøo phaàn töû tieáp theo tuøy theo côø höôùng. Khi dòch leänh STOS
Chuoãiñính, chöông trình dòch duøng teân Chuoãiñích ñeå xaùc ñònh xem luùc khai baùo thì
Chuoãiñích coù caùc phaàn töû laø byte hay töø. Muoán chæ roõ cho chöông trình dòch hôïp ngöõ
raèng ta laøm vieäc vôùi chuoãi caùc byte hoaëc caùc töø, ta cuõng coù theå duøng leänh STOSB
hoaëc STOSW.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
Trong thí duï treân chöông trình dòch hôïp ngöõ seõ duøng teân STR1 ñeå xaùc ñònh
kieåu STR1 laø byte hay laø töø roài töï ñoäng caát AL hay AX vaøo chuoãi.
v SUB – Substract (Tröø 2 toaùn haïng)
Cuù phaùp: SUB Ñích, Goác
Moâ taû : Ñích ¬ Ñích – Goác.
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ
nhôù vaø cuõng khoâng ñöôïc thanh ghi ñoaïn.
Caäp nhaät : AF, CFm OFm PFm SF, ZP (AP vaø PF chæ lieân quan ñeá 8 bit thaáp)
v TEST – And Operands to Update Flag (Vaø 2 toaùn haïng ñeå taïo côø)
Cuù phaùp: TEST Ñích, Goác.
Moâ taû : Ñích ^ Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ
nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Sau leänh naøy caùc toaùn haïng khoâng bò
thay ñoåi vaø keát quaû khoâng ñöôïc löu giöõ. Caùc côø ñöôïc taïo ra seõ ñöôïc duøng laøm ñieàu
kieän cho caùch leänh nhaûy coù ñieàu kieän. Leänh nhaø cuõng coù taùc duïng che nhö moät maët
naï.
Xoùa: CF, OF
Caäp nhaät: PF, SF, ZP, ZP (PF chæ lieân quan ñeán 8 bit thaáp)
Khoâng xaùc ñònh: AF
v WAIT – Wait for TEST or INTR Signal (Chôø tín hieäu töø chaân TEST hoaëc
INTR)
Moâ taû:
Leänh naøy ñöa vi xöû lyù vaøo traïng thaùi nghæ noù seõ ôû traïng thaùi naøy cho tôùi khi coù
tín hieäu ôû möùc thaáp taùc ñoäng vaøo chaân TEST hoaëc khi coù tín hieäu ôû möùc cao taùc
ñoäng vaøo chaân INTR. Neáu coù yeâu caàu ngaét vaø yeâu caàu naøy ñöôïc pheùp taùc ñoäng
trong khi 8086 ñang ôû traïng thaùi nghæ thì sau khi thöïc hieän chöông trình phuïc vuï ngaét
noù laïi quay veà traïng thaùi nghæ. Leänh naøy duøng ñeå ñoàng boä hoaït ñoäng cuûa 8086 vaø
caùc boä phaän beân ngoaøi nhö boä ñoàng xöû lyù toaùn hoïc 8087.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v XCHG – Exchange 2 Operands (Traùo noäi dung 2 toaùn haïng)
Cuù phaùp: XCHG Ñích, Goác.
Moâ taû: Ñích « Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñònh ñòa chæ
nhau, nhöng phaûi chöùa döõ lieäu vaø cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ
nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Sau leänh XCHG toaùn haïng naøy chöùa noäi
dung cuõ cuûa toaùn haïng kia vaø ngöôïc laïi.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
v XLAT – Translate a Byte in AL (Noäi dung cuûa AL theo baûng cho tröôùc)
Cuù phaùp: XLAT
Moâ taû: AL ¬ {AL + BX}
Leänh naøy duøng ñeå ñoåi 8 bit hoaëc ít hôïn töø maõ naøy (goác) sang maõ khaùc (ñích)
theo 1 baûng tra cho saün. Tröôùc khi thöïc hieän leänh ñoåi, baûng tra phaûi chöùa caùc maõ
ñích vaø BX phaûi chöùa ñòa chæ leäch cuûa baûng naøy trong ñoaïn döõ lieäu, coøn maõ goác
(caàn ñoåi) phaûi ñöôïc chöùa trong AL. Khi chaïy leänh XLAT thì pheùp coäng AL + BX
ñöôïc thöïc hieän ñeå taïo ra ñòa chæ oâ nhôù trong baûng soá maø noäi dung cuûa noù seõ ñöôïc caát
trôû laïi vaøo thanh ghi AL.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø
v XOR – Exclusive Or Corresponding Bits of Two Operands (Hoaëc loaïi tröø
2 toaùn haïng)
Cuù phaùp: XOR Ñích, Goác.
Moâ taû : Ñích ¬ Ñích Å Goác
Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc
nhau, nhöng phaûi chöùa döõ lieäu cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù
vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Töø tính chaát cuûa pheùp hoaëc loaïi tröø, ta thaáy
neáu toaùn haïng ñích truøng vôùi toaùn haïng goác thì keát quaû baèng 0, do ñoù leänh naøy coøn
ñöôïc duøng ñeå xoùa veà 0 moät thanh ghi naøo ñoù vaø keøm theo caùc côø CF vaø OF cuõng bò
xoùa.
Caäp nhaät: PF, SF, ZP. PF chæ coù nghóa khi toaùn haïng laø 8 bit.
Khoâng xaùc ñònh: AF
Treân ñaây nhoùm thöïc hieän ñaõ giôùi thieäu qua taát caû caùc leänh coù trong taäp leänh
cuûa boä vi xöû lyù 8086, maëc duø trong thöïc teá laäp trình nhieàu khi ta khoâng söû duïng heát
ñöôïc taát caû caùc leänh coù trong taäp leänh naøy. Taäp leänh cuûa caùc boä vi xöû lyù cao caáp hôn
trong hoï 80x86 ngoaøi nhöõng leänh naøy coøn bao goàm nhieàu leänh khaùc nöõa.
Ta coù theå coi ñaây laø moät ví duï veà taäp leänh cuûa moät boä vi xöû lyù duøng ñeå cheá taïo
ra maùy tính vôùi taäp leänh ñaày ñuû (Complete Instruction Set Computer, CISC) vôùi ñaëc
tröng laø coù raát nhieàu leänh vôùi caùc cheá ñoä ñòa chæ raát ña daïng, caùc leänh coù ñoä daøi
khaùc nhau vaø thôøi gian ñeå thöïc hieän cuõng khaùc nhau. Boä vi xöû lyù vì theá thöôøng coù
caáu truùc raát phöùc taïp. Theá maø treân thöïc teá, trong caùc chöông trình hôïp ngöõ ñeå giaûi
quyeát caùc coâng vieäc cuï theå, thöôøng coù nhieàu leänh ñöôïc duøng vôùi taàn suaát lôùn nhöng
cuõng coù nhöõng leänh raát ít khi hoaëc thaäm chí khoâng heà söû duïng. Ñaây cuõng chính laø lyù
do ñeå caùc nhaø saûn xuaát cho ra ñôøi caùc boä vi xöû lyù coù caáu truùc caûi tieán theo höôùng
ñôn giaûn hoùa vôùi taäp leänh raát hieäu duïng (coù soá leänh ít hôn vôùi cheá ñoä ñòa chæ ñôn
giaûn, caùc leänh coù ñoä daøi thoáng nhaát vaø coù thôøi gian thöïc hieän nhö nhau) nhöng laïi coù
khaû naêng thöïc hieän leänh nhanh hôn gaáp boäi so vôùi loaïi CISC. Ñoù laø caùc boä vi xöû lyù
duøng laøm CPU cho caùc maùy tính vôùi taäp leänh ruùt goïn (Reduced Instruction Set
Computer, RISC).