Tài liệu Luận văn Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU. Giao tiếp với máy tính qua ngõ máy in: TRƯỜNG ĐẠI HỌC KỸ THUẬT
KHOA CÔNG NGHỆ THÔNG TIN
LUẬN VĂN TỐT NGHIỆP
Đề tài:
Thiết kế, thi công và viết chương trình điều khiển
mạch thực hành cho Z80 CPU.
Giao tiếp với máy tính qua ngõ máy in.
Giáo viên hướng dẫn: Thầy Nguyễn Xuân Minh.
Sinh viên thực hiện : Hoàng Lê Bình.
Lưu Đình Dũng.
Lớp : KSII_K6_T.
Đề tài:
Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU với các đặc điểm sau:
- Giao tiếp với máy tính qua ngõ máy in.
- Giả lập ROM để nhận chương trình từ máy tính.
- Có khả năng chạy từng bước từ bên máy tính.
- Có khả năng thông báo trạng thái các thanh ghi về bên máy tính.
- Có khả năng điều khiển một số cổng xuất nhập đơn giản.
- Thi công mạch, thử mạch.
- Viết chương trình và thử chạy theo từng chức năng.
&
MỤC LỤC
Mở đầu trang 4
Chương I Phân tích yêu cầu
1.1 Phân tích yêu cầu tran...
147 trang |
Chia sẻ: hunglv | Lượt xem: 1025 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU. Giao tiếp với máy tính qua ngõ máy in, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRÖÔØNG ÑAÏI HOÏC KYÕ THUAÄT
KHOA COÂNG NGHEÄ THOÂNG TIN
LUAÄN VAÊN TOÁT NGHIEÄP
Ñeà taøi:
Thieát keá, thi coâng vaø vieát chöông trình ñieàu khieån
maïch thöïc haønh cho Z80 CPU.
Giao tieáp vôùi maùy tính qua ngoõ maùy in.
Giaùo vieân höôùng daãn: Thaày Nguyeãn Xuaân Minh.
Sinh vieân thöïc hieän : Hoaøng Leâ Bình.
Löu Ñình Duõng.
Lôùp : KSII_K6_T.
Ñeà taøi:
Thieát keá, thi coâng vaø vieát chöông trình ñieàu khieån maïch thöïc haønh cho Z80 CPU vôùi caùc ñaëc ñieåm sau:
- Giao tieáp vôùi maùy tính qua ngoõ maùy in.
- Giaû laäp ROM ñeå nhaän chöông trình töø maùy tính.
- Coù khaû naêng chaïy töøng böôùc töø beân maùy tính.
- Coù khaû naêng thoâng baùo traïng thaùi caùc thanh ghi veà beân maùy tính.
- Coù khaû naêng ñieàu khieån moät soá coång xuaát nhaäp ñôn giaûn.
- Thi coâng maïch, thöû maïch.
- Vieát chöông trình vaø thöû chaïy theo töøng chöùc naêng.
&
MUÏC LUÏC
Môû ñaàu trang 4
Chöông I Phaân tích yeâu caàu
1.1 Phaân tích yeâu caàu trang 5
1.2 Phöông höôùng giaûi quyeát vaán ñeà trang 5
Chöông II Thieát keá phaàn cöùng
l 2.1. Phaân tích caùc chöùc naêng cuûa coång gheùp noái vôùi maùy in trang 8
l 2.2. Kieán truùc Z80 CPU. trang 10
l 2.3. Thieát keá chi tieát. trang 48
l 2.4. Nguyeân lyù hoaït ñoäng. trang 49
Chöông III. Giôùi thieäu phaàn soaïn thaûo vaên baûn
3.1. Caùc thaønh phaàn chính cuûa main menu trang 55
3.2. Höôùng daãn söû duïng trong maøn hình soaïn thaûo trang 55
F Chöông IV. Giaûi thuaät trang 57
F Chöông V. Chöông trình nguoàn
5.1. Chöông trình ñöa data ra RAM chung, Debug, Dump, Run trang 71
5.2. Chöông trình con vieát baèng ngoân ngöõ con Assembler Z80 duøng
ñoïc traïng thaùi caùc thanh ghi trang 109
5.3. Chöông trình con vieát baèng ngoân ngöõ con Assembler Z80 duøng
dump memory trang 111
5.4. Chöông trình taïo tieän ích soaïn thaûo vaên baûn vaøhoã trôï cheá ñoä chaïy
debug Z80 trang 111
5.5. Caùc chöông trình ví duï trang 133
F Phuï luïc A: Caùc thoâng baùo loãi. trang 142
F Phuï luïc B: Vi maïch 8255. trang 143
F Taøi lieäu tham khaûo. trang 145
&
Lôøi noùi ñaàu
Söï phaùt trieån ñi leân vöôït baäc cuûa ngaønh kyõ thuaät maùy tính vaø ñieän töû hieän nay ñaõ ñöôïc minh chöùng cuï theå qua cuoäc soáng haèng ngaøy cuûa chuùng ta trong taát caû caùc lónh vöïc.
Vieäc öùng duïng maùy vi tính vaøo kyõ thuaät ño löôøng vaø ñieàu khieån ñaõ ñem laïi nhöõng keát quaû ñaày tính öu vieät. Caùc thieát bò, heä thoáng ño löôøng vaø ñieàu khieån gheùp noái vôùi maùy tính coù ñoä chính xaùc cao, thôøi gian thu thaäp soá lieäu ngaén, nhöng ñaùng quan taâm hôn laø möùc ñoä töï ñoäng hoaù trong vieäc thu nhaän vaø xöû lyù döõ lieäu.
Kyõ thuaät soá ra ñôøi ñaõ khaéc phuïc ñöôïc caùc khuyeát ñieåm cuûa kyõ thuaät töông töï, laøm cho caùc boä phaän maùy moùc trôû neân ñôn giaûn, goïn nheï, ít toán keùm naêng löôïng vaø xöû lyù thoâng tin nhanh, chính xaùc hôn so vôùi kyõ thuaät töông töï.
Tuy vaäy, neáu söû duïng caùc boä ñieàu khieån duøng caùc IC soá chuùng vaãn coøn maéc moät soá khuyeát ñieåm maø so vôùi kyõ thuaät vi xöû lyù noù vaãn toàn taïi nhö:
- Kích thöôùc lôùn.
- Naêng löôïng tieâu thuï lôùn.
- Tính meàm deõo thaáp, khoù thay ñoåi.
- Khoù söûa chöõa, baûo trì.
Vi xöû lyù laø moät vi maïch ñieän töû coù maät ñoä tích hôïp cao, trong ñoù goàm caùc maïch soá coù khaû naêng nhaän, xöû lyù vaø xuaát döõ lieäu. Ñaëc bieät laø quaù trình xöû lyù döõ lieäu ñöôïc ñieàu khieån theo moät chöông trình goàm taäp hôïp caùc leänh töø beân ngoaøi maø ngöôøi söû duïng coù theå thay ñoåi ñöôïc moät caùch deã daøng. Moät vi xöû lyù coù theå thöïc hieän raát nhieàu yeâu caàu ñieàu khieån khaùc nhau.
Kyõ thuaät vi xöû lyù ra ñôøi vôùi söï keát hôïp giöõa phaàn cöùng vaø phaàn meàm ñaõ laøm cho hoaït ñoäng cuûa caùc maïch ñieän trôû neân meàm deõo hôn vôùi nhöõng phaàn meàm raát linh hoaït maø ta coù theå söûa chöõa, thay ñoåi hoaëc boå sung laøm cho chöông trình ñieàu khieån theâm phong phuù tuøy theo nhu caàu cuûa ngöôøi söû duïng.
Kyõ thuaät vi xöû lyù coù tính phöùc taïp trong hoaït ñoäng, thieát keá nhöng laïi raát kinh teá vì giaù thaønh haï vaø kích thöôùc chieám choã khoâng nhieàu, coù dung löôïng cao. Ngoaøi ra veà maët kyõ thuaät cuõng hôn haún kyõ thuaät soá vì quaù trình hoaït ñoäng raát meàm deõo, toác ñoä xöû lyù cao vaø laïi coù theå môû roäng tính naêng hoaït ñoäng sau naøy cho maïch ñieän. Ñaây laø öu ñieåm raát thuaän lôïi maø kyõ thuaät vi xöû lyù mang laïi.
Chuùng em xin chaân thaønh caûm ôn Thaày Nguyeãn Xuaân Minh ñaõ taän tình höôùng daãn ñeå hoaøn thaønh luaän vaên naøy. Chuùng toâi cuõng xin chaân thaønh caûm ôn caùc baïn beø ñaõ ñoùng goùp yù kieán vaø chæ daãn trong khi thöïc hieän ñeà taøi.
Vì trình ñoä coù haïn vaø ñaây laøñeà taøi ñaàu tieân thöïc hieän moät caùch coù heä thoáng cho neân chaéc chaén khoâng theå traùnh khoûi nhieàu thieáu soùt.
&
Chöông I. Phaân tích yeâu caàu
1.1. Phaân tích yeâu caàu.
1.1.1. Ñaëc ñieåm cuûa coång gheùp noái vôùi maùy in.
Vieäc noái maùy in vôùi maùy tính ñöôïc thöïc hieän qua oå caém 25 chaân ôû phiaù sau maùy tính. Nhöng ñaây khoâng chæ laø choã noái vôùi maùy in maø khi söû duïng maùy tính vaøo muïc ñích ño löôøng vaø ñieàu khieån thì vieäc gheùp noái cuõng thöïc hieän qua oå caém naøy. Qua coång naøy döõ lieäu ñöôïc truyeàn ñi song song neân ñoâi khi coøn ñöôïc goïi laø coång gheùp noái song song vaø toác ñoä truyeàn döõ lieäu cuõng ñaït ñeán möùc lôùn ñaùng keå. Taát caû caùc ñöôøng daãn cuûa coång naøy ñeàu töông thích TTL, nghóa laø chuùng ñeàu cung caáp moät möùc ñieän aùp naèm giöõa 0V vaø 5V. Do ñoù ta coøn caàn phaûi löu yù laø ôû caùc ñöôøng daãn loái vaøo coång naøy khoâng ñöôïc ñaët caùc möùc ñieän aùp quaù lôùn.
1.1.2. Ñaëc ñieåm chung cuûa Z80 CPU.
Z80 CPU laø moät vi xöû lyù 8 bit cuûa haõng ZILOG ñöôïc thieát keá ñeå coù theå laøm vieäc moät caùch ñoäc laäp, coù theå giao tieáp vôùi caùc boä xöû lyù khaùc thoâng qua caùc thieát bò ngoaïi vi.
Ñaëc ñieåm chung:
- Data bus: 8 bits.
- Addr bus: 16 bits.
- Taäp thanh ghi ñöôïc phaân thaønh 3 loaïi:
. Taäp thanh ghi chính (8 bit).
. Taäp thanh ghi phuï (8 bit).
. Taäp thanh ghi chuyeân duïng (16 bits)
- Taäp leänh CPU Z80 coù theå chia laøm nhieàu nhoùm khaùc nhau theo nhieàu caùch. ÔÛ ñaây coù theå chia thaønh 4 nhoùm sau:
. Nhoùm leänh xöû lyù döõ kieän.
. Nhoùm leänh truyeàn döõ kieän.
. Nhoùm leänh kieåm soaùt chöông trình.
. Nhoùm leänh kieåm soaùt traïng thaùi.
Phaàn moâ taû chi tieát Z80 CPU seõ ñöôïc noùi kyõ trong chöông II.
1.2. Phöông höôùng giaûi quyeát vaán ñeà.
1.2.1. Giao tieáp giöõa PC & KIT Z80.
Ñeå coù theå thöïc hieän vieäc giao tieáp giöõa maùy tính vaø moät KIT Z80 coù theå duøng moät trong hai phöông phaùp sau:
Phöông phaùp thöù nhaát: Thöïc hieän vieäc baét tay giöõa maùy tính vaø KIT Z80 khi thao taùc truyeàn döõ lieäu. Muoán thöïc hieän ñöôïc ñieàu naøy thì maùy tính vaø KIT Z80 seõ ôû trong traïng thaùi saün saøng hoaït ñoäng tröôùc khi thöïc hieän thao taùc baét tay ñeå truyeàn döõ lieäu. Nhö vaäy treân KIT Z80 seõ coù moät chöông trình ñeå coù theå thöïc hieän thao taùc naøy, vieäc gheùp noái bus cuøng vôùi vieäc phaùt caùc tín hieäu baét tay giöõa maùy tính vaø KIT Z80 seõ do chöông trình beân trong KIT Z80 vaø chöông trình beân trong maùy tính ñaûm nhieäm. Phöông phaùp naøy coù öu ñieåm laø vieäc thu vaø nhaän data seõ dieãn ra ñoàng boä, nhanh choùng vaø chính xaùc nhöng laïi hôi phöùc taïp trong vieäc thöïc hieän caùc thao taùc baét tay.
Phöông phaùp thöù hai: Moïi thao taùc truyeàn döõ lieäu seõ do maùy tính chuû ñoäng, döõ lieäu truyeàn seõ ñöôïc chöùa trong RAM (ñöôïc goïi laø RAM chung). RAM naøy giaû laäp ROM ñeå chaïy chöông trình töø maùy tính.
Ñeå ñôn giaûn cho vieäc thieát keá (caû phaàn cöùng vaø phaàn meàm) vaø phuø hôïp vôùi noäi dung cuûa yeâu caàu ñaët ra, ngöôøi thieát keá löïa choïn phöông phaùp thöù hai ñeå thöïc hieän yeâu caàu cuûa baøi toaùn ñaët ra.
1.2.2. Döøng vaø cho chaïy Z80 CPU.
Söû duïng caùc möùc logic thích hôïp ñöa vaøo chaân WAIT ñeå taïm thôøi döøng hoaït ñoäng cuûa Z80 CPU, ñaët Z80 CPU vaøo traïng thaùi chôø hoaëc cho Z80 CPU hoaït ñoäng ôû cheá ñoä bình thöôøng.
Khi chaân WAIT ôû möùc logic '1', Z80 CPU hoaït ñoäng bình thö ôøng.
Khi möùc logic taïi chaân WAIT laø '0', Z80 CPU seõ ñöôïc ñaët vaøo traïng thaùi chôø. ÔÛ traïng thaùi naøy döõ lieäu treân ñöôøng ñòa chæ vaø data ñöôïc giöõ oån ñònh, ñoàng thôøi CPU lieân tuïc ñoïc vaøo möùc logic treân chaân WAIT cho ñeán khi chaân naøy ñaït trôû laïi möùc logic '1'. Sau khi thoaùt khoûi traïng thaùi WAIT Z80 CPU seõ daønh 2 chu kyø xung clock ñeå laøm töôi boä nhôù Ram ñoäng, sau ñoù thi haønh böôùc keá tieáp cuûa leänh hoaëc thi haønh leänh keá.
Nhö vaäy khi ñaët Z80 CPU vaøo traïng thaùi chôø ta coù theå ñoïc ñöôïc döõ lieäu treân data bus, address bus hoaëc coù theå can thieäp vaøo hoaït ñoäng cuûa CPU baèng caùch ñaët moät giaù trò khaùc leân data bus trong thôøi gian CPU laáy maõ leänh hoaëc truy xuaát boä nhôù chöông trình (luùc naøy caàn thieát phaûi caám CS boä nhôù chöông trình (ROM chöông trình)).
1.2.3. Höôùng môû roäng ñeà taøi.
Do coù yù ñoà môû roäng ñeà taøi theo höôùng duøng KIT ñeå söû duïng nhö laø 1 thieát bò moâ phoûng duøng cho Z80 CPU neân trong phaàn thieát keá ñaõ coá gaéng traùnh can thieäp nhieàu vaøo Z80 CPU. Ñeå Z80 CPU coù theå chaïy ñöôïc ôû cheá ñoä Debug chæ caàn laáy tín hieäu CSROM vaø M1 ñeå ñieàu khieån quaù trình. Nhö vaäy, coù theå duøng KIT ñeå laøm 1 boä moâ phoûng ( simulator) cho caùc thieát keá khaùc coù söû duïng Z80 CPU. Sô ñoà khoái nhö sau :
KIT Z80 baát kyø
Simulator
Rom chöông trình
Z80 CPU
Caùc linh kieän khaùc
Adrres bus
Data bus
Ctrl bus
PC
Jack 25
pin
Addr bus : ñöôïc laáy tröïc tieáp töø adress bus cuûa KIT
Data bus : ñöôïc laáy tröïc tieáp töø data bus cuûa KIT
Ctrl bus goàm :
Wait : noái vaøo chaân soá cuûa 74LS74 (U8A)
Reset : noái vaøo chaân soá cuûa 74LS04 (U2E)
Chuù yù : Trong cheá ñoä Debug caàn phaûi coù bieän phaùp can thieäp vaøo chaân interrupt cuûa KIT Z80 baát kyø, khi KIT naøy chaïy ôû cheá ñoä coù duøng ngaét.
Tín hieäu INT
T.h cho pheùp/caám
16
Z80 CPU
Caám=’0’ : Khi chaïy ôû cheá ñoä Debug(caám ngaét).
&
Chöông II. Thieát keá phaàn cöùng
2.1. Phaân tích caùc chöùc naêng cuûa coång gheùp noái vôùi maùy in.
Söï saép xeáp caùc chaân ra ôû coång maùy in vôùi taát caû caùc ñöôøng daãn ñöôïc moâ taû treân hình 2.1.
Chaân Kyù hieäu Vaøo/Ra Moâ taû
1 STB Output Bit 0 cuûa thanh ghi ñieàu khieån
2 D0 Output Ñöôøng döõ lieäu D0
3 D1 Output Ñöôøng döõ lieäu D1
4 D2 Output Ñöôøng döõ lieäu D2
5 D3 Output Ñöôøng döõ lieäu D3
6 D4 Output Ñöôøng döõ lieäu D4
7 D5 Output Ñöôøng döõ lieäu D5
8 D6 Output Ñöôøng döõ lieäu D6
9 D7 Output Ñöôøng döõ lieäu D7
10 ACK Input Bit 6 cuûa thanh ghi traïng thaùi
11 BUSY Input Bit 7 cuûa thanh ghi traïng thaùi
12 PE Input Bit 5 cuûa thanh ghi traïng thaùi
13 SLCT Input Bit 4 cuûa thang ghi traïng thaùi
14 AF Output Bit 1 cuûa thanh ghi ñieàu khieån
15 ERROR Input Bit 3 cuûa thanh ghi traïng thaùi
16 INIT Output Bit 2 cuûa thanh ghi ñieàu khieån
17 SLCTIN Output Bit 3 cuûa thanh ghi ñieàu khieån
18 GND
19 GND
20 GND
21 GND
22 GND
23 GND
24 GND
25 GND
Hình 2.1. Boá trí chaân ôû coång maùy in ôû maùy tính PC.
Ta thaáy beân caïnh 8 bit döõ lieäu coøn coù nhöõng ñöôøng daãn tín hieäu khaùc, toång coäng ngöôøi söû duïng coù theå trao ñoåi moät caùch rieâng bieät vôùi 17 ñöôøng daãn, bao goàm 12 ñöôøng daãn ra vaø 5 ñöôøng daãn vaøo. Bôûi vì 8 ñöôøng daãn döõ lieäu D0 - D7 khoâng phaûi laø ñöôøng daãn 2 chieàu trong taát caû caùc loaïi maùy tính, neân ta seõ söû duïng D0 - D7 nhö laø loái ra. Caùc loái ra khaùc nöõa laø STB, AF, INIT vaø SLCTIN.
Caùc ñöôøng daãn loái vaøo laø: ERROR, SLCT, PE, ACK, BUSY.
Taát caû caùc ñöôøng daãn tín hieäu vöøa ñöôïc giôùi thieäu cho pheùp trao ñoåi qua caùc ñòa chæ boä nhôù cuûa maùy tính PC. 17 ñöôøng daãn cuûa coång maùy in saép xeáp thaønh 3 thanh ghi: thanh ghi data, thanh ghi traïng thaùi, thanh ghi ñieàu khieån. Hình 2.2 chæ ra söï saép xeáp cuûa caùc ñöôøng daãn tín hieäu tôùi caùc bit döõ lieäu rieâng bieät cuûa thanh ghi.
Thanh ghi data (Ñòa chæ cô baûn)
D7 D6 D5 D4 D3 D2 D1 D0
D0 (pin 2)
D1 (pin 3)
D2 (pin 4)
D3 (pin 5)
D4 (pin 6)
D5 (pin 7)
D6 (pin 8)
D7 (pin 9)
Thanh ghi traïng thaùi (Ñòa chæ cô baûn + 1)
D7 D6 D5 D4 D3 0 0 0
ERROR (pin 15)
SLCT (pin 13)
PE (pin 12)
ACK (pin 10)
BUSY (pin 11)
Thanh ghi ñieàu khieån (Ñòa chæ cô baûn + 2)
D7 D6 D5 D4 D3 D2 D1 D0
STB (pin 1)
AF (pin 14)
INIT (pin 16)
SLCTIN (pin 17)
IRQ-Enable
Hình 2.2. Thanh ghi ôû coång maùy in cuûa maùy tính PC.
Ñòa chæ ñaàu tieân ñaït ñeán ñöôïc cuûa coång maùy in ñöôïc xem nhö laø ñòa chæ cô baûn. ÔÛ caùc maùy tính PC ñòa chæ cô baûn cuûa coång maùy in ñöôïc saép xeáp nhö sau:
LPT1 (Coång maùy in thöù nhaát) => Ñòa chæ cô baûn = 378H
Hoaëc laø 3BCH ôû maùy Laptop
LPT2 (Coång maùy in thöù hai) => Ñòa chæ cô baûn = 278H
Ñòa chæ cô baûn ñoàng nhaát vôùi thanh ghi döõ lieäu. Thanh ghi traïng thaùi coù ñòa chæ = ñòa chæ cô baûn + 1. Caàn chuù yù raèng möùc logic cuûa BUSY (chaân 11) ñöôïc saép xeáp ngöôïc vôùi bit D7 cuûa thanh ghi traïng thaùi. Thanh ghi ñieàu khieån vôùi 4 ñöôøng daãn loái ra cuûa noù coù ñòa chæ = ñòa chæ cô baûn + 2. ÔÛ ñaây laïi caàn chuù yù tôùi söï ñaûo ngöôïc cuûa caùc tín hieäu: STB, AF, SLCTIN.
2.2. Kieán truùc Z80 CPU.
2.2.1. Sô ñoà khoái Z80 CPU. Bus döõ kieän 8 bits
Kieåm soaùt döõ kieän
Giaûi maõ
&
ñieàu khieån CPU
ALU
Thanh
ghi
leänh
Bus noäi
Tín hieäu
ñieàu khieån Kieåm soaùt CPU
heä thoáng
Thanh ghi
& CPU
Kieåm soaùt ñòa chæ
Bus ñòa chæ 16 bits
Hình 1-1: Sô ñoà khoái Z80 CPU.
Sô ñoà khoái cuûa kieán truùc beân trong Z80 CPU ñöôïc cho trong hình 1-1. Sô ñoà naøy trình baøy taát caû caùc phaàn töû chính trong CPU vaø noù seõ ñöôïc xem xeùt kyõ qua caùc phaàn moâ taû sau.
2.2.2. Caùc thanh ghi cuûa CPU.
Z80 CPU chöùa moät boä nhôù R/W 208 bit. Boä nhôù naøy coù theå ñöôïc truy xuaát bôûi ngöôøi laäp trình. Hình 1-2 cho thaáy boä nhôù naøy ñöôïc caáu taïo bôûi 8 thanh ghi 8 bit vaø 4 thanh ghi 16 bit. Taát caû caùc thanh ghi cuûa Z80 CPU ñeàu duøng RAM tónh. CaÙc thanh ghi bao goàm 2 taäp 6 thanh ghi ña duïng, taäp caùc thanh ghi naøy coù theå ñöôïc söû duïng ñoäc laäp nhö laø caùc thanh ghi 8 bit hoaëc töøng caëp nhö laø caùc thanh ghi 16 bit. Coù hai taäp ( chính vaø phuï) thanh ghi tích luõy, thanh ghi côø vaø saùu thanh ghi ñaëc bieät.
Taäp caùc thanh ghi ñaëc bieät.
Program Counter (PC): giöõ ñòa chæ möôøi saùu bit cuûa leänh hieän taïi ñang ñöôïc laáy veà töø boä nhôù. PC töï ñoäng taêng sau khi noäi dung cuûa noù ñöôïc ñaët leân bus ñòa chæ. Khi 1 leänh nhaûy xaûy ra, 1 giaù trò môùi ñöôïc töï ñoäng ñaët vaøo trong PC thay cho giaù trò seõ ñöôïc taêng cuûa noù.
Stack pointer (SP): giöõ ñòa chæ 16 bit cuûa ñænh ngaên xeáp hieän haønh trong boä nhôù RAM ngoaøi. Boä nhôù ngaên xeáp beân ngoaøi ñöôïc toå chöùc nhö laø 1 file vaøo sau ra tröôùc (LIFO). Döõ lieäu coù theå ñöôïc ñaåy vaøo ngaên xeáp töø caùc thanh ghi xaùc ñònh cuûa CPU hay ñöôïc laáy ra khoûi ngaên xeáp ñeå ñöa vaøo caùc thanh ghi xaùc ñònh cuûa CPU qua vieäc thi haønh caùc leänh Push vaø Pop. Döõ lieäu ñöôïc laáy ra töø ngaên xeáp luoân luoân laø döõ lieäu ñöôïc ñaåy vaøo ngaên xeáp sau cuøng. Ngaên xeáp cho pheùp ñôn giaûn hoùa vieäc thi haønh caùc loaïi ngaét quaõng khoâng giôùi haïn caùc chöông trình con loàng nhau vaø ñôn giaûn hoùa nhieàu kieåu thao taùc treân döõ lieäu.
Hai thanh ghi chæ muïc (IX vaø IY): Hai thanh ghi chæ muïc ñoäc laäp giöõ ñòa chæ cô baûn 16 bit ñöôïc duøng trong cheá ñoä ñònh ñòa chæ chæ muïc. Trong cheá ñoä naøy, moät thanh ghi chæ muïc ñöôïc duøng nhö laø moät vò trí cô baûn chæ ñeán moät vuøng trong boä nhôù nôi maø döõ lieäu baét ñaàu ñöôïc chöùa hay ñöôïc khoâi phuïc. Byte ñöôïc theâm trong caâu leänh chæ muïc ñeå xaùc ñònh khoaûng caùch ñeán vò trí cô baûn. Khoaûng caùch naøy ñöôïc xaùc ñònh baèng pheùp buø 2 moät soá nguyeân coù daáu. Cheá ñoä naøy laøm ñôn giaûn ñi raát nhieàu cho chöông trình. Ñaëc bieät cho caùc baûng döõ lieäu ñöôïc söû duïng.
Thanh ghi ñòa chæ trang ngaét (I) Z80 CPU coù theå ñöôïc ñieàu khieån trong 1 cheá ñoä maø ôû ñoù moät leänh goïi tröïc tieáp ñeán baát kyø vuøng naøo cuûa boä nhôù coù theå ñöôïc thöïc hieän baèng caùch ñaùp öùng ngaét. Thanh ghi I ñöôïc duøng cho muïc ñích naøy ñeå chöùa 8 bit cao cuûa ñòa chæ tröïc tieáp trong khi thieát bò ngaét cung caáp 8 bit ñòa chæ thaáp. Ñaëc ñieåm naøy cho pheùp chöông trình phuïc vuï ngaét ñònh vò nhanh tôùi baát kyø vuøng nhôù naøo vôùi thôøi gian truy xuaát ñeán chöông trình laø nhoû nhaát.
Thanh ghi laøm töôi boä nhôù (R): Z80 CPU chöùa 1 boä ñeám laøm töôi boä nhôù ñeå cho pheùp boä nhôù ñoäng ñöôïc duøng deã daøng nhö boä nhôù tónh. Baûy trong 8 bit cuûa thanh ghi naøy ñöôïc töï ñoäng taêng sau moãi laàn laáy leänh. Bit thöù 8 coøn laïi ñöôïc laäp trình nhö laø keát quaû cuûa leänh LD R,A. Data trong boä ñeám laøm töôi ñöôïc gôûi leân phaàn thaáp cuûa bus ñòa chæ keøm theo moät tín hieäu laøm töôi trong khi CPU giaûi maõ vaø thöïc thi leänh vöøa ñöôïc laáy veà. Caùch thöùc laøm töôi naøy hoaøn toaøn deã hieåu ñoái vôùi ngöôøi laäp trình vaø khoâng laøm chaäm hoaït ñoäng cuûa CPU. Ngöôøi laäp trình coù theå laáy thanh ghi R cho muïc ñích kieåm tra, nhöng thanh ghi naøy thì thöôøng khoâng ñöôïc ngöôøi laäp trình duøng. Trong thôøi gian laøm töôi, noäi dung cuûa thanh ghi I ñöôïc ñaët leân 8 bit cao cuûa bus ñòa chæ.
Thanh ghi tích luõy vaø thanh ghi côø: CPU bao goàm hai thanh ghi tích luõy ñoäc laäp vaø ñöôïc keát hôïp vôùi caùc thanh ghi côø 8 bit. Thanh ghi tích luõy löu giöõ keát quaû cuûa pheùp toaùn logic vaø soá hoïc trong khi thanh ghi côø cho bieát caùc ñieàu kieän xaùc ñònh khi thöïc hieän caùc pheùp toaùn 8 bit hay 16 bit nhö laø cho bieát keát quaû cuûa 1 pheùp tính coù baèng 0 hay khoâng. Ngöôøi laäp trình löïa choïn thanh ghi tích luõy vaø thanh ghi côø vôùi 1 leänh hoaùn chuyeån ñôn vì coù theå laøm vieäc vôùi moät trong hai caëp.
Caùc thanh ghi ña duïng: Coù 2 taäp ñoái xöùng caùc thanh ghi ña duïng. Moãi taäp chöùa 6 thanh ghi 8 bit hay nhö caëp thanh ghi 16 bit. Taäp thöù nhaát ñöôïc goïi laø BC, DE vaø HL trong khi taäp leänh töông öùng ñöôïc goïi laø BC’, DE’ vaø HL’. Trong baát kyø thôøi ñieåm naøo ngöôøi laäp trình coù theå choïn 1 trong caùc taäp thanh ghi ñeå laøm vieäc qua 1 leänh hoaùn chuyeån ñôn. Trong caùc heä thoáng yeâu caàu ñaùp öùng ngaét nhanh, moät taäp cuûa taäp thanh ghi ña duïng vaø moät thanh ghi côø /tích luõy coù theå ñöôïc döï tröõ ñeå giaûi quyeát chöông trình raát nhanh naøy. Chæ caàn moät leänh ñôn giaûn ñöôïc thöïc thi ñeå chaïy giöõa caùc chöông trình. Ñieàu naøy thu giaûm thôøi gian phuïc vuï ngaét do vieäc loaïi boû yeâu caàu caát vaø khoâi phuïc noäi dung thanh ghi ôû ngaên xeáp trong thôøi gian ngaét hay xöû lyù chöông trình con. Caùc thanh ghi ña duïng naøy ñöôïc duøng cho nhieàu öùng duïng bôûi ngöôøi laäp trình.
Thanh ghi tích luõy A
Thanh ghi côø F
Thanh ghi tích luõy A’
Thanh ghi côø F’
Thanh ghi ña duïng
B
C
B’
C’
D
E
D’
E’
H
L
H’
L’
Taäp thanh ghi phuï
Taäp thanh ghi chính
Thanh ghi ña duïng
Interrup vertor I
Memory refresh R
Thanh ghi chæ muïc IX
Thanh ghi chæ muïc IY
Con troû ngaên xeáp SP
Ñeám chöông trình PC
Hình 1-2: Caáu truùc caùc thanh ghi cuûa Z80 CPU
2.2.3. Ñôn vò logic soá hoïc (ALU):
Caùc leänh logic vaø soá hoïc 8 bit cuûa CPU ñöôïc thöïc hieän trong ALU. Giao tieáp giöõa ALU vôùi caùc thanh ghi vaø data bus beân ngoaøi ñöôïc thöïc hieän treân data bus beân trong. Caùc chöùc naêng ALU goàm:
Coäng
Tröø
Logic AND
Logic OR
Logic XOR
So saùnh
Dòch traùi, dòch phaûi hay quay ( Soá hoïc vaø logic)
Pheùp toaùn taêng
Pheùp toaùn giaûm
Set bit
Reset bit
Test bit
2.2.4. Ñieàu khieån CPU vaø thanh ghi leänh.
Moãi 1 leänh ñöôïc laáy veà töø boä nhôù, noù ñöôïc ñaët vaøo trong thanh ghi leänh vaø ñöôïc giaûi maõ. Caùc phaàn ñieàu khieån thi haønh chöùc naêng naøy, phaùt vaø caáp caùc tín hieäu ñieàu khieån caàn thieát ñeå ñoïc hoaëc ghi data töø (hoaëc ñeán) caùc thanh ghi, ñieàu khieån ALU vaø ñaùp öùng caùc yeâu caàu cuûa tín hieäu ñieàu khieån beân ngoaøi.
2.2.5. Chöùc naêng caùc chaân cuûa Z80.
a. Giôùi thieäu.
Sô ñoà caùc chaân cuûa Z80 CPU ñöôïc moâ taû trong hình sau :
Z80 CPU
A0
30
A1
31
A2
32
A3
33
A4
34
A5
35
A6
36
A7
37
A8
38
A9
39
A10
40
A11
1
A12
2
A13
3
A14
4
A15
5
D0
14
D1
15
D2
12
D3
8
D4
7
D5
9
D6
10
D7
13
/M1
27
/MREQ
19
/IORQ
20
/RD
21
/WR
22
/RFSH
28
/HALT
18
/WAIT
24
/INT
16
/NMI
17
/RESET
26
/BUSREQ
25
/BUSACK
23
/CLK
6
+5 V
11
GND
29
SÔ ÑOÀ CHAÂN Z80
b. Chöùc naêng caùc chaân:
A15 ¸A0: Bus ñòa chæ (out put, active high, 3 traïng thaùi), A15 ¸A0 taïo thaønh bus ñòa chæ 16 bit. Bus ñòa chæ cung caáp ñòa chæ cho boä nhôù ñeå trao ñoåi data (leân ñeán 64 Kbyte) vaø cho thieát bò I/O.
Busack: Bus acknowledge (output, active low) baùo cho thieát bò yeâu caàu bieát ñòa chæ bus, data bus vaø caùc tín hieäu ñieàu khieån: /MREQ, /IORQ, /RD, /WR ñaõ ôû traïng thaùi trôû khaùng cao. Maïch ngoaøi coù theå duøng nhöõng ñöôøng naøy ngay luùc naøy.
/BUSREQ: Bus request (input, active low) bus request coù ñoä öu tieân cao hôn /NMI vaø noù luoân ñöôïc nhaän dieän vaøo cuoái chu kyø maùy hieän taïi. /Busreq ñoøi hoûi address bus, data bus vaø caùc tín hieäu ñieàu khieån: /MREQ, /IORQ, /RD, /WR phaûi ôû traïng thaùi trôû khaùng cao ñeå caùc thieát bò khaùc coù theå ñieàu khieån caùc ñöôøng naøy. Bus request thöôøng ñöôïc noái vaøo coång OR vaø yeâu caàu ñieän trôû keùo leân beân ngoaøi cho caùc öùng duïng kieåu naøy.
D7 ¸ D0: Data bus (input / output, active high, 3 traïng thaùi) D7 ¸ D0 taïo thaønh data bus 8 bit hai chieàu, söû duïng ñeå trao ñoåi data vôùi boä nhôù vaø I/O.
/HALT: Halt (output, active low) baùo raèng CPU ñang thöïc thi 1 leänh Halt vaø seõ chôø 1 trong hai tín hieäu: /NMI hoaëc /INT (vôùi mask cho pheùp) tröôùc khi söï ñieàu khieån ñöôïc khoâi phuïc. Trong thôøi gian Halt, CPU thöïc thi caùc leänh NOP ñeå duy trì vieäc laøm töôi boä nhôù.
/INT: Interrup request (input, active low) Interrup request ñöôïc thieát bò I/O phaùt ra. CPU chaáp nhaän yeâu caàu ngaét taïi thôøi ñieåm cuoái cuûa leänh hieän taïi neáu ñöôïc phaàn meàm cho pheùp. /INT thöôøng ñöôïc noái vaøo caùc coång OR vaø caàn moät trôû keùo leân cho caùc öùng duïng loaïi naøy.
/IORQ: Input/ Output Request (output, active low, 3 traïng thaùi) baùo nöûa thaáp cuûa address bus giöõ 1 ñòa chæ I/O hôïp leä cho hoaït ñoäng ñoïc hay ghi I/O. /IORQ cuõng ñöôïc phaùt ñoàng thôøi vôùi /M1 trong 1 chu kyø coâng nhaän ngaét ñeå baùo raèng 1 vertor ñaùp öùng ngaét coù theå ñöôïc ñaët leân data bus.
/M1: Machine cycle one (output, active low) /M1 cuøng vôùi /MREQ baùo raèng chu kyø maùy hieän taïi laø chu kyø laáy maõ leänh. /M1 cuøng vôùi /IORQ baùo cho bieát raèng ñang ôû chu kyø coâng nhaän ngaét.
/MREQ: Memory request (output, active low, 3 traïng thaùi) /MREQ baùo raèng address bus ñang giöõ moät ñòa chæ hôïp leä cho vieäc ñoïc ghi boä nhôù.
/NMI: Non Maskable Interrup (input, tích cöïc caïnh xuoáng) /NMI coù ñoä öu tieân cao hôn /INT. /NMI luoân luoân ñöôïc chaáp nhaän taïi chu kyø cuoái cuûa leänh hieän haønh, ñoäc laäp vôùi traïng thaùi cuûa Flip-Flop interrupt vaø töï ñoäng ñöa CPU ñeán vò trí 0066h.
/RD: Read (output, active low, 3 traïng thaùi) baùo raèng CPU muoán ñoïc data töø boä nhôù hay thieát bò I/O. Thieát bò I/O ñöôïc chæ ñònh hay boä nhôù seõ duøng tín hieäu naøy ñeå ñöa data leân data bus.
/RESET: Reset (input, active low) /RESET khôûi ñoäng CPU nhö sau: reset IFF1 & IFF2 xoùa PC vaø caùc thanh ghi I & R, ñaët traïng thaùi interrupt ñeán cheá ñoä 0. Trong thôøi gian reset, addr bus vaø data bus seõ ôû traïng thaùi trôû khaùng cao vaø taát caû caùc ñöôøng ñieàu khieån output seõ ôû traïng thaùi khoâng tích cöïc. Chuù yù raèng ñöôøng /RESET phaûi active ít nhaát laø 3 chu kyø xung clock tröôùc khi hoaït ñoäng reset hoaøn taát.
/RFSH: Refresh (output, active low) /RFSH cuøng vôùi /MREQ baùo raèng 7 bit thaáp cuûa ñöôøng addr coù theå ñöôïc duøng laøm ñòa chæ laøm töôi cho boä nhôù RAM ñoäng.
/WAIT: Wait (input, active low) /WAIT baùo cho CPU boä nhôù ñöôïc chæ ñònh hay thieát bò I/O chöa saün saøng cho vieäc truyeàn data. CPU tieáp tuïc ôû traïng thaùi chôø. Vieäc keùo daøi traïng thaùi /WAIT coù theå ngöng vieäc laøm töôi cho boä nhôù RAM ñoäng.
/WR: Write (output, active low, 3 traïng thaùi) /WR baùo data bus ñang giöõ 1 giaù trò data hôïp leä ñeå ñöa vaøo boä nhôù ñöôïc chæ ñònh hoaëc vuøng I/O.
/CLK: Clock (input).
2.2.6. Caùc giaûn ñoà thôøi gian.
a. Giôùi thieäu.
Z80 CPU thi haønh leänh theo töøng böôùc caên baûn goàm:
Ñoïc vaø ghi boä nhôù
Ñoïc vaø ghi thieát bò I/O
Ñaùp öùng ngaét
Taát caû leänh laø taäp hôïp caùc hoaït ñoäng cô baûn. Moãi hoaït ñoäng caên baûn coù theå chieám töø 3 ñeán 6 chu kyø clock ñeå hoaøn taát hoaëc chuùng coù theå ñöôïc keùo daøi ñeå ñoàng boä toác ñoä giöõa CPU vôùi thieát bò beân ngoaøi. Chu kyø Clock caên baûn ñöôïc xem nhö laø chu kyø T vaø hoaït ñoäng caên baûn ñöôïc xem nhö laø chu kyø M. Hình 3-1 minh hoïa moät chu kyø leänh cô baûn. Löu yù raèng leänh naøy goàm 3 chu kyø maùy ( M1,M2 vaø M3). Chu kyø maùy ñaàu tieân cuûa baát kyø leänh naøo laø chu kyø laáy maõ leänh (daøi 4, 5 hay 6 chu kyø T tröø khi bò keùo daøi bôûi tín hieäu Wait). Chu kyø laáy leänh (M1) ñöôïc duøng ñeå laáy maõ leänh seõ ñöôïc thi haønh. Chu kyø maùy sau chuyeån data giöõa CPU vaø boä nhôù hay thieát bi I/O vaø chuùng coù theå coù töø 3 ñeán 5 chu kyø T (tröø khi bò keùo daøi bôûi traïng thaùi Wait ñeå ñoàng boä vôùi toác ñoä thieát bò beân ngoaøi). Ñoaïn sau ñaây moâ taû vieäc ñònh thôøi (xaûy ra trong baát kyø chu kyø maùy naøo). Trong khoaûng thôøi gian T2 vaø moãi TW sau ñoù, CPU laáy maãu ñöôøng Wait taïi söôøn xuoáng cuûa xung clock. Neáu ñöôøng Wait ñöôïc tích cöïc taïi thôøi ñieåm naøy, moät traïng thaùi Wait khaùc seõ ñöôïc theâm vaøo trong chu kyø sau. Duøng kyõ thuaät naøy thì vieäc ñoïc coù theå keùo daøi ñeå phuø hôïp vôùi thôøi gian truy xuaát cuûa baát kyø kieåu thieát bò boä nhôù naøo.
Chu kyø T
/Clk
T1
T2
T3
T4
T1
T2
T3
T1
T2
T3
Chu kyø maùy M1
Ñoïc boä nhôù M2
Chu kyø leänh
Hình 3 -1 : Giaûn ñoà thôøi gian cô baûn
Ghi boä nhôù M3
b. Laáy leänh.
Hình 3-2 laø giaûn ñoà thôøi gian cuûa chu kyø M1 (laáy maõ leänh). PC ñöôïc ñaët treân bus ñòa chæ taïi ñieåm baét ñaàu cuûa chu kyø M1. Nöûa chu kyø clock sau ñoù tín hieäu /MREQ ñöôïc tích cöïc. Taïi thôøi ñieåm naøy ñòa chæ tôùi boä nhôù coù ñuû thôøi gian ñeå oån ñònh do ñoù caïnh xuoáng cuûa /MREQ coù theå ñöôïc duøng nhö laø moät tín hieäu cho pheùp boä nhôù RAM ñoäng. Ñöôøng /RD seõ tích cöïc ñeå chæ ra raèng data ñöôïc ñoïc töø boä nhôù seõ ñöôïc ñöa leân data bus. CPU laáy maãu data töø boä nhôù treân bus data taïi söôøn leân xung Clock cuûa chu kyø T3 vaø CPU duøng caïnh leân naøy ñeå taét tín hieäu /RD vaø /MREQ. Nhö vaäy, data ñaõ saün saøng ñöôïc CPU laáy maãu tröôùc khi tín hieäu /RD trôû thaønh khoâng tích cöïc. Taïi T3, T4 cuûa chu kyø laáy leänh ñöôïc duøng ñeå laøm töôi boä nhôù RAM ñoäng. (CPU duøng thôøi gian naøy ñeå giaûi maõ vaø thöïc thi caùc leänh khaùc ñaõ ñöôïc laáy veà, do ñoù seõ khoâng coù hoaït ñoäng naøo khaùc ñöôïc thöïc hieän trong thôøi gian naøy). Trong suoát T3 vaø T4, baûy bit thaáp cuûa ñöôøng ñòa chæ chöùa ñòa chæ laøm töôi boä nhôù RAM ñoäng. Chuù yù raèng tín hieäu /RD khoâng ñöôïc sinh ra trong suoát thôøi gian laøm töôi ñeå traùnh data töø boä nhôù khaùc bò ñaåy leân data bus. Tín hieäu /MREQ seõ ñöôïc söû duïng trong suoát thôøi gian laøm töôi.
/RFSH
D7¸D0
/M1
/WAIT
/RD
/MREQ
A15¸A0
Refresh address
PC
T1
T2
T3
T4
T1
Chu kyø M1
/Clk
IN
Hình 3-2: Chu kyø laáy maõ leänh
c. Ñoïc vaø ghi boä nhôù.
Hình 3-3 minh hoïa giaûn ñoà thôøi gian cuûa chu kyø ñoïc, ghi boä nhôù. Chu kyø naøy thöôøng ñöôïc keùo daøi trong 3 chu kyø xung clock tröø phi coù traïng thaùi ñôïi ñöôïc boä nhôù yeâu caàu qua tín hieäu /WAIT. Tín hieäu /MREQ vaø tín hieäu /RD ñöôïc duøng gioáng nhö trong chu kyø laáy leänh. Trong tröôøng hôïp ghi boä nhôù, /MREQ cuõng trôû thaønh tích cöïc khi bus ñòa chæ ñaõ ôû traïng thaùi oån ñònh do ñoù noù coù theå ñöôïc duøng tröïc tieáp nhö laø tín hieäu choïn chip cho boä nhôù RAM ñoäng. Ñöôøng /WR tích cöïc khi döõ lieäu treân data bus ñaõ ôû traïng thaùi oån ñònh do ñoù noù coù theå ñöôïc duøng tröïc tieáp nhö laø xung /WR cho caùc boä nhôù baùn daãn.
Hình 3-2: Chu kyø ñoïc ghi boä nhôù.
MEMORY ADDR
D7¸D0
/WAIT
/RD
/MREQ
A15¸A0
MEMORY ADDR
T1
T2
T3
T1
T2
Chu kyø ñoïc boä nhôù
/Clk
IN
T3
/WR
DATA OUT
Chu kyø ghi boä nhôù
d. Chu kyø nhaäp/xuaát.
Hình 3-4 minh hoïa hoaït ñoäng ñoïc hay ghi I/O. Chuù yù raèng trong thôøi gian hoaït ñoäng I/O thì moät traïng thaùi ñôïi ñöôïc töï ñoäng theâm vaøo. Lyù do laø trong quaù trình hoaït ñoäng I/O, thôøi gian töø khi tín hieäu /IORQ trôû neân tích cöïc cho ñeán khi CPU laáy maãu ñöôøng /WAIT thì raát ngaén do ñoù neáu khoâng theâm traïng thaùi naøy vaøo thì khoâng ñuû thôøi gian ñeå coång I/O giaûi maõ ñòa chæ cuûa noù. Ngoaøi ra, neáu khoâng coù traïng thaùi ñôïi thì seõ khoù khaên trong vieäc thieát keá caùc linh kieän I/O loaïi MOS ñeå coù theå hoaït ñoäng töông öùng vôùi toác ñoä CPU. Trong thôøi gian xaûy ra traïng thaùi ñôïi, tín hieäu /WAIT luoân ñöôïc laáy maãu.
Trong quaù trình ñoïc I/O, ñöôøng /RD ñöôïc duøng ñeå cho pheùp coång ñöôïc choïn ñöa data leân data bus gioáng nhö trong tröôøng hôïp ñoïc boä nhôù. Tröôøng hôïp ghi I/O, ñöôøng /WR ñöôïc duøng nhö laø Clock tôùi coång I/O.
D7¸D0
Hình 3-4: Chu kyø xuaát / nhaäp.
D7¸D0
/WAIT
/RD
/IORQ
A15¸A0
PORT ADDRESS
T1
T2
TW
T3
T1
/Clk
IN
/WR
OUT
CHU KYØ GHI
CHU KYØ ÑOÏC
e. Chu kyø Bus Req/Ack.
Hình 3-5 minh hoïa giaûn ñoà thôøi gian cuûa chu kyø bus request/ack. Tín hieäu /BUSREQ ñöôïc CPU laáy maãu ôû caïnh leân cuûa chu kyø Clock cuoái trong moät chu kyø maùy. Neáu tín hieäu /BUSREQ tích cöïc, CPU seõ ñaët ñòa chæ, döõ lieäu vaø caùc tín hieäu ñieàu khieån ôû traïng thaùi trôû khaùng cao taïi caïnh leân cuûa xung Clock keá tieáp. Taïi thôøi ñieåm ñoù, thieát bò beân ngoaøi baát kyø coù theå kieåm soaùt bus ñeå truyeàn döõ lieäu giöõa boä nhôù vaø thieát bò I/O ( ví duï DMA ). Thôøi gian toái ña cho CPU ñaùp öùng bus request baèng ñoä daøi cuûa 1 chu kyø maùy vaø thieát bò ñieàu khieån ngoaøi coù theå duy trì söï ñieàu khieån cuûa bus trong nhieàu chu kyø Clock theo yeâu caàu. Neáu duøng chu kyø DMA daøi vaø boä nhôù ñoäng ñöôïc duøng, thieát bò ñieàu khieån ngoaøi phaûi thöïc hieän chöùc naêng laøm töôi. Tröôøng hôïp naøy chæ xaûy ra khi moät khoái döõ lieäu raát lôùn ñöôïc truyeàn döôùi söï ñieàu khieån cuûa DMA. Cuõng phaûi ñeå yù trong suoát chu kyø bus request, CPU khoâng theå bò ngaét bôûi tín hieäu /NMI hay /INT.
/BUSACK
Hình 3-5: CHU KYØ BUS REQ/ACK
D7¸D0
/MERQ /RD, /WR
/IORQ
/RFSH
/BUSRQ
A15¸A0
Traïng thaùi T cuoái
Tx
Tx
/Clk
CHU KYØ M BAÁT KYØ
Tx
T1
TRAÏNG THAÙI COÙ THEÅ CUÛA BUS
Floating
Maãu
Maãu
Maãu
f. Chu kyø interrupt req/ack
Hình 3-6 minh hoïa giaûn ñoà thôøi gian keát hôïp vôùi moät chu kyø ngaét quaõng. Tín hieäu ngaét /INT ñöôïc CPU laáy maãu ôû caïnh leân cuûa clock cuoái taïi ñieåm keát thuùc cuûa leänh baát kyø. Tín hieäu seõ khoâng ñöôïc chaáp nhaän neáu F-F ñieàu khieån ngaét khoâng ñöôïc phaàn meàm trong CPU khôûi taïo leân möùc logic ‘1’ hay neáu tín hieäu /BUSREQ laø tích cöïc. Khi tín hieäu ñöôïc chaáp nhaän, chu kyø ñaëc bieät M1 ñöôïc taïo ra. Trong suoát chu kyø ñaëc bieät M1, tín hieäu /IORQ trôû neân tích cöïc ( thay vì /MREQ bình thöôøng ) ñeå chæ ra raèng thieát bòï yeâu caàu ngaét coù theå ñaët 1 vector 8 bit leân bus döõ lieäu. Chuù yù raèng hai traïng thaùi ñôïi ñöôïc theâm vaøo chu kyø naøy moät caùch töï ñoäng.
/MREQ
REFRESH
/IORQ
Hình 3-6: CHU KYØ NGAÉT REQ/ACK
/M1
Traïng thaùi T cuoái
T2
Tw’
/Clk
CHU KYØ M CUOÁI LEÄNH
Tw’
T3
M1
T1
/INT
A15¸A0
PC
D7¸D0
/WAIT
IN
/RD
g. Ñaùp öùng ngaét khoâng che ñöôïc
Hình 3-7 minh hoïa chu kyø request hay chu kyø ack cho ngaét khoâng che ñöôïc. Tín hieäu naøy ñöôïc laáy maãu cuøng thôøi ñieåm vôùi ñöôøng /INT, nhöng ñöôøng naøy coù ñoä öu tieân cao hôn vaø noù khoâng theå bò caám do phaàn meàm ñieàu khieån. Chöùc naêng thoâng thöôøng cuûa noù laø cung caáp ñaùp öùng töùc thì cho caùc tín hieäu quan troïng nhö laø loãi nguoàn cung caáp. CPU ñaùp öùng 1 ngaét khoâng che ñöôïc töông töï hoaït ñoäng ñoïc boä nhôù bình thöôøng. Söï khaùc bieät duy nhaát laø noäi dung cuûa data bus bò lôø ñi trong khi boä vi xöû lyù töï ñoäng chöùa PC trong ngaên xeáp ngoaøi vaø nhaûy tôùi vò trí 0066H. Chöông trình phuïc vuï ngaét khoâng che ñöôïc phaûi baét ñaàu taïi vò trí naøy neáu ngaét ñöôïc söû duïng.
/MREQ
REFRESH
/RD
Hình 3-7 : Giaûn ñoà thôøi gian cuûa NMI.
/M1
Traïng thaùi T cuoái
T2
T3
/Clk
CHU KYØ M CUOÁI LEÄNH
T4
T1
M1
T1
/NMI
A15¸A0
PC
/RFSH
h. Thoaùt khoûi traïng thaùi HALT.
Baát cöù khi naøo moät leänh halt ñöôïc thöïc thi, CPU seõ thöïc hieän 1 chuoãi leänh NOP cho ñeán khi nhaän ñöôïc moät tín hieäu ngaét (caû hai loaïi ngaét che ñöôïc vaø khoâng che ñöôïc neáu F-F ñöôïc cho pheùp ). Hai ñöôøng ngaét ñöôïc laáy maãu ôû caïnh leân cuûa chu kyø T4 nhö ñöôïc minh hoïa döôùi hình 3-8. Neáu nhaän ñöôïc ngaét khoâng che hay ngaét che ñöôïc vaø interrupt F-F ñang ñöôïc set ôû möùc logic ‘1’, thì CPU seõ thoaùt khoûi traïng thaùi HALT ôû caïnh leân cuûa chu kyø clock keá tieáp. Chu kyø sau seõ laø moät chu kyø ñaùp öùng ngaét töông öùng vôùi loaïi cuûa ngaét thu ñöôïc. Neáu caû hai ñöôïc thu taïi cuøng moät thôøi ñieåm, thì ngaét khoâng che ñöôïc seõ ñöôïc ñaùp öùng vì noù coù ñoä öu tieân cao nhaát. Muïc ñích cuûa vieäc thöïc thi leänh NOP trong khi CPU ôû traïng thaùi HALT laø ñeå giöõ cho vieäc laøm töôi boä nhôù RAM ñoäng ñöôïc thöïc hieän. Moãi chu kyø trong traïng thaùi HALT laø chu kyø M1 bình thöôøng ( laáy leänh ).Tín hieäu traû lôøi HALT tích cöïc trong thôøi gian naøy ñeå chæ ra raèng boä xöû lyù ñang ôû trong traïng thaùi HALT.
Hình 3-8: Thoaùt khoûi traïng thaùi HALT
/HALT
T2
T3
/Clk
M1
T4
T1
M1
T1
/INT HAY /NMI
M1
Leänh Halt ñöôïc nhaän taïi thôøi ñieåm naøy.
i. POWER-DOWN ACKNOWLEDGE CYCLE.
Khi Clock caáp cho CMOS Z80 CPU bò döøng laïi ôû 1 trong 2 möùc cao hay thaáp, CMOS Z80 CPU döøng hoaït ñoäng cuûa noù vaø duy trì taát caû caùc thanh ghi vaø caùc tín hieäu ñieàu khieån. Nhö vaäy, ICC2 (Standby supply current ) ñöôïc baûo ñaûm chæ khi Clock heä thoáng bò döøng taïi möùc thaáp trong thôøi gian T4 cuûa chu kyø maùy sau khi thöïc thi leänh HALT. Giaûn ñoà thôøi gian cho chöùc naêng power-down khi thi haønh leänh HALT ñöôïc chæ ra trong hình 3-9.
/HALT
/Clk
T1
T2
T3
T4
T1
T2
T3
T4
/M1
Hình 3-9: Power – Down Acknowledge
j. Chu kyø thoaùt khoûi traïng thaùi Power-Down (Power-Down Release Cycle)
Clock heä thoáng phaûi ñöôïc cung caáp cho CMOS Z80 CPU ñeå thoaùt khoûi traïng thaùi power-down. Khi Clock heä thoáng ñöôïc cung caáp cho ngoõ vaøo, CMOS Z80 CPU seõ khôûi ñoäng laïi hoaït ñoäng töø ñieåm maø taïi ñoù traïng thaùi power-down ñaõ ñöôïc thi haønh. Giaûn ñoà thôøi gian cho vieäc thoaùt khoûi cheá ñoä power-down ñöôïc chæ ra trong hình 3-10, 3-11, 3-12. Khi leänh HALT ñöôïc thöïc thi ñeå ñi vaøo traïng thaùi power-down, CMOS Z80 CPU seõ ñöôïc ñöa vaøo traïng thaùi HALT. Moät tín hieäu ngaét ( /NMI hay /INT ) hay moät tín hieäu /RESET ñöôïc caáp cho CPU sau khi xung clock heä thoáng ñöôïc ñöa vaøo ñeå thoaùt khoûi traïng thaùi power-down.
/HALT
/Clk
T1
T2
T3
T4
T1
/M1
Hình 3-10: Power – Down Release Cycle No.1
/NMI
/HALT
/Clk
/M1
Hình 3-11: Power – Down Release Cycle No.2
/RESET
T1
T2
T3
T4
/HALT
/Clk
/M1
Hình 3-12: Power – Down Release Cycle No.3
/RESET
T1
T2
Twa
Twa
T1
T2
T3
T4
2.2.7.TAÄP LEÄNH Z80 CPU.
a. Giôùi thieäu.
Z80 CPU coù theå thöïc thi 158 leänh khaùc nhau bao goàm caû 78 leänh cuûa 8080A CPU. Caùc leänh coù theå ñöôïc chia thaønh caùc nhoùm chính sau :
Load vaø Exchange
Block transfer vaø Search
Arithmetic vaø Logical
Rotate vaø shift
Bit manipulation ( set, reset, test )
Jump, call, vaø Return
Input hay Out put
Basic CPU control
b. Caùc kieåu leänh.
Leänh Load chuyeån data giöõa caùc thanh ghi CPU vôùi nhau vaø giöõa thanh ghi CPU vôùi boä nhôù ngoaøi. Taát caû caùc leänh phaûi xaùc ñònh nguoàn vaø ñích. Ví duï nhö vieäc truyeàn data töø thanh ghi C ñeán thanh ghi B. Nhoùm naøy bao goàm caû Load töùc thôøi tôùi thanh ghi CPU hoaëc boä nhôù ngoaøi baát kyø. Caùc kieåu khaùc cuûa leänh Load cho pheùp truyeàn giöõa caùc thanh ghi CPU vaø boä nhôù. Leänh exchange coù theå chuyeån noäi dung cuûa hai thanh ghi.
Moät taäp duy nhaát cuûa nhoùm leänh truyeàn khoái ñöôïc cung caáp beân trong Z80. Vôùi moät leänh ñôn giaûn, moät khoái boä nhôù vôùi kích thöôùc baát kyø coù theå ñöôïc chuyeån ñeán vò trí khaùc trong boä nhôù. Caùc leänh chuyeån khoái coù lôïi khi phaûi xöû lyù moät chuoãi döõ lieäu lôùn. Vôùi 1 leänh ñôn, khoái boä nhôù ngoaøi vôùi chieàu daøi tuøy thích coù theå tìm ñöôïc 1 kyù töï 8 bit baát kyø. Khi kyù töï ñöôïc tìm thaáy hay gaëp cuoái khoái , leänh seõ töï ñoäng chaám döùt. Caû hai leänh chuyeån vaø tìm khoái ñeàu coù theå bò ngaét trong luùc thöïc thi do ñoù khoâng chieám giöõ CPU trong chuoãi thôøi gian daøi.
Leänh logic vaø soá hoïc taùc ñoäng leân data trong thanh ghi tích luõy, thanh ghi ña duïng vaø boä nhôù ngoaøi. Keát quaû cuûa caùc pheùp toaùn ñöôïc ñaët trong thanh ghi tích luõy vaø côø ñaëc tröng ñöôïc set tuøy theo keát quaû cuûa caùc pheùp toaùn. Moät ví duï veà pheùp toaùn soá hoïc laø coäng noäi dung thanh ghi tích luõy vôùi noäi dung boä nhôù ngoaøi. Keát quaû cuûa pheùp coäng ñöôïc ñaët vaøo thanh ghi tích luõy. Nhoùm naøy goàm pheùp coäng vaø tröø caùc thanh ghi 16 bit.
Nhoùm leänh rotate vaø shift cho pheùp quay phaûi(traùi) hay dòch phaûi(traùi) baát kyø thanh ghi hay boä nhôù naøo coù hay khoâng coù côø carry.
Leänh thao taùc bit cho pheùp bit baát kyø trong thanh ghi tích luõy, thanh ghi ña duïng hay boä nhôù ngoaøi ñöôïc set, reset hay test vôùi 1 leänh ñôn. Ví duï, MSB cuûa thanh ghi H coù theå reset. Nhoùm naøy ñaëc bieät höõu duïng trong caùc öùng duïng ñieàu khieån.
Leänh jump, call, return ñöôïc duøng ñeå di chuyeån giöõa hai vò trí khaùc nhau. Kieåu khaùc cuûa leänh call laø leänh restart. Leänh naøy chöùa ñòa chæ môùi nhö 1 phaàn cuûa maõ leänh 8 bit. Chöông trình nhaûy ñöôïc thi haønh bôûi söï naïp tröïc tieáp thanh ghi HL, IX, IY leân PC, do ñoù cho pheùp ñòa chæ nhaûy laø haøm phöùc hôïp cuûa leänh ñang ñöôïc thi haønh.
Nhoùm leänh Input/Output trong Z80 cho pheùp truyeàn trong 1 khoaûng roäng giöõa boä nhôù ngoaøi hay thanh ghi ña duïng vôùi thieát bò I/O beân ngoaøi. Trong moãi tröôøng hôïp, ñòa chæ coång ñöôïc cung caáp treân 8 bit thaáp cuûa bus ñòa chæ trong khi thöïc thi I/O. Söï thuaän lôïi khi duøng thanh ghi C nhö con troû chæ tôùi thieát bò I/O laø cho pheùp caùc coång I/O khaùc nhau chia seû driver phaàn meàm chung. Ñieàu khoâng theå khi ñòa chæ laø 1 phaàn cuûa maõ leänh neáu chöông trình ñöôïc chöùa trong ROM. Ñaëc ñieåm khaùc cuûa leänh Input laø chuùng set thanh ghi côø töï ñoäng do ñoù khoâng yeâu caàu xaùc ñònh traïng thaùi cuûa data nhaäp vaøo. Z80 CPU chöùa leänh ñôn coù theå chuyeån khoái döõ lieäu (leân ñeán 256 byte) moät caùch töï ñoäng tôùi hay töø coång I/O baát kyø ñeán vò trí boä nhôù baát kyø. Söï keát hôïp vôùi taäp caùc caëp thanh ghi ña duïng, leänh naøy cho toác ñoä truyeàn khoái I/O cao. Giaù trò cuûa taäp leänh I/O naøy ñöôïc chöùng minh bôûi Z80 coù theå cung caáp caùc yeâu caàu ñònh daïng ñóa meàm ( coù nghóa laø CPU cung caáp header, ñòa chæ, data, vaø cho pheùp maõ CRC ) treân ñóa maät ñoä cao döïa treân ngaét caên baûn.
Keát luaän, leänh ñieàu khieån CPU caên baûn cho pheùp caùc chöùc naêng vaø cheá ñoä khaùc nhau. Nhoùm leänh naøy goàm setting hay resetting caùc F-F cho pheùp ngaét hay caøi ñaët cheá ñoä ñaùp öùng ngaét.
c. Caùc cheá ñoä ñònh ñòa chæ
Haàu heát caùc leänh Z80 hoaït ñoäng treân döõ lieäu trong thanh ghi CPU, boä nhôù ngoaøi, hay coång I/O. Caùc cheá ñoä ñònh ñòa chæ chæ ra caùch maø ñòa chæ cuûa döõ lieäu ñöôïc taïo ra trong moãi leänh laø nhö theá naøo. Phaàn döôùi cho moät toùm taét sô löôïc cho caùc loaïi ñònh ñòa chæ duøng trong Z80 :
Ñònh ñòa chæ töùc thôøi :
Trong caùch ñònh ñòa chæ naøy byte theo sau maõ leänh trong boä nhôù chöùa toaùn haïng thöïc.
Maõ leänh
1 hay 2 byte
Toaùn haïng
D7 D0
Ví duï: naïp thanh ghi tích luõy vôùi haèng soá, ôû ñaây haèng soá laø byte ngay sau maõ leänh.
Ñònh ñòa chæ töùc thôøi môû roäng :
Caùch ñònh ñòa chæ naøy laø söï môû roäng cuûa caùch ñònh ñòa chæ töùc thôøi trong ñoù hai byte theo sau maõ leänh laø caùc toaùn haïng.
Maõ leänh
1 hay 2 byte
Toaùn haïng
Vò trí thaáp
Toaùn haïng
Vò trí cao
Ví duï: load caëp thanh ghi HL ( thanh ghi 16 bit ) vôùi 16 bit döõ lieäu ( 2 byte ).
Ñònh ñòa chæ trang khoâng :
Z80 coù leänh 1 byte ñaëc bieät Call ñeå nhaûy tôùi vò trí baát kyø trong 8 vò trí trong trang khoâng cuûa boä nhôù. Leänh naøy ñaët PC tôùi ñòa chæ hieäu quaû trong trang khoâng. Söï tieän duïng cuûa leänh naøy laø chæ caàn moät byte ñôn vaø 1 ñòa chæ 16 bit xaùc ñònh vò trí chöông trình con, do ñoù tieát kieäm ñöôïc boä nhôù.
Maõ leänh
1 byte
B7 B0
Ñòa chæ coù giaù trò laø ( B5 B4 B3 000) 2
Ñònh ñòa chæ töông ñoái :
Ñònh ñòa chæ töông ñoái duøng moät byte döõ lieäu theo sau maõ leänh ñeå xaùc ñònh ñoä dôøi töø chöông trình hieän taïi tôùi nôi maø chöông trình Jump coù theå xaûy ra. Ñoä dôøi ñöôïc thöïc hieän baèng caùch coäng soá buø hai vaøo ñòa chæ cuûa maõ leänh:
Maõ leänh
Jump relative (1 byte maõ leänh )
Toaùn haïng
Coäng thay soá buø 2 8 bit tôùi ñòa chæ ( A+2)
Söï tieän lôïi cuûa ñònh ñòa chæ töông ñoái laø noù cho pheùp nhaûy tôùi vò trí gaàn ñoù maø chæ caàn hai byte boä nhôù. Do ñoù, nhöõng leänh naøy coù theå giaûm thieåu nhu caàu boä nhôù. Ñoä dôøi coù theå töø +127 ñeán -128 töø ñòa chæ A+2. Vì vaäy toång ñoä dôøi cuûa leänh nhaûy töông ñoái laø +129 ñeán -126.
Ñònh ñòa chæ môû roäng :
Ñònh ñòa chæ môû roäng cung caáp hai byte (16 bit) ñòa chæ trong caáu truùc leänh. Döõ lieäu coù theå laø ñòa chæ ñích chöông trình coù theå nhaûy tôùi hoaëc noù coù theå laø ñòa chæ cuûa toaùn haïng.
Maõ leänh
1 hay 2 byte
Ñòa chæ thaáp ñeán toaùn haïng thaáp
Ñòa chæ cao ñeán toaùn haïng cao
Ñònh ñòa chæ môû roäng duøng nhaûy töø vò trí naøy tôùi vò trí khaùc trong boä nhôù hay naïp vaø chöùa döõ lieäu trong vò trí boä nhôù baát kyø. Khi ñònh ñòa chæ môû roäng ñöôïc duøng ñeå xaùc ñònh ñòa chæ nguoàn hay ñích cuûa toaùn haïng, kyù hieäu (nn) seõ ñöôïc duøng ñeå chæ ra noäi dung boä nhôù taïi nn, nn laø ñòa chæ 16 bit ñöôïc chæ ra trong caáu truùc leänh. Ñieàu naøy coù nghóa laø hai byte boä nhôù nn ñöôïc duøng nhö laø con troû chæ ñeán vò trí boä nhôù. Daáu ngoaëc coù nghóa laø giaù trò trong chuùng ñöôïc duøng nhö laø con troû chæ ñeán vò trí boä nhôù. Ví duï (1200) chæ noäi dung cuûa boä nhôù taïi vò trí 1200.
Ñònh ñòa chæ chæ soá :
Trong loaïi ñònh ñòa chæ naøy, byte döõ lieäu theo sau maõ leänh chöùa ñoä dôøi ñöôïc coäng vôùi noäi dung cuûa thanh ghi chæ soá (Maõ leänh xaùc ñònh thanh ghi chæ muïc ñöôïc duøng ) ñeå taïo ra con troû tôùi boä nhôù.
Maõ leänh
2 byte maõ leänh
Maõ leänh
2 byte maõ leänh
Söï thay
Ñòa chæ treân thanh ghi chæ muïc ñeå taïo pointer ñeán boä nhôù
Ví duï cuûa leänh chæ muïc laø load noäi dung cuûa vò trí boä nhôù ( thanh ghi chæ muïc + ñoä dôøi ) vaøo trong thanh ghi tích luõy. Ñoä dôøi laø soá buø hai coù daáu. Ñònh ñòa chæ coù chæ soá ñôn giaûn hoùa chöông trình duøng baûng döõ lieäu coù thanh ghi chæ muïc chæ ñeán ñaàu baûng. Hai thanh ghi chæ muïc ñöôïc cung caáp vì lyù do thöôøng caàn hai hay nhieàu baûng. Hai thanh ghi chæ muïc trong Z80 laø IX vaø IY. Ñeå ñònh ñòa chæ chæ muïc ta duøng ( IX + d ) hay ( IY + d ). ÔÛ ñaây d laø ñoä dôøi naèm sau maõ leänh. Daáu ngoaëc chæ ra raèng giaù trò ñöôïc duøng nhö laø con choû chæ ñeán boä nhôù ngoaøi.
Ñònh ñòa chæ thanh ghi :
Nhieàu maõ leänh cuûa Z80 chæ roõ thanh ghi naøo ñöôïc duøng. Ví duï load döõ lieäu trong thanh ghi B sang thanh ghi C.
Ñònh ñòa chæ ngaàm ñònh :
Ñònh ñòa chæ ngaàm ñònh laø aùm chæ ñeán caùc pheùp toaùn maø maõ leänh töï ñoäng ngaàm ñònh moät hay nhieàu thanh ghi CPU nhö laø nôi chöùa caùc toaùn haïng. Ví duï nhö taäp caùc pheùp toaùn soá hoïc thanh ghi tích luõy luoân ñöôïc ngaàm ñònh laø nôi chöùa keát quaû.
Ñònh ñòa chæ giaùn tieáp thanh ghi :
Loaïi ñònh ñòa chæ naøy caàn caëp thanh ghi 16 bit ( nhö laø HL ) ñeå chæ tôùi vò trí baát kyø trong boä nhôù. Loaïi leänh naøy raát maïnh vaø noù ñöôïc duøng trong 1 khoaûng roäng caùc öùng duïng .
Maõ leänh
1 hay 2 byte
Ví duï load thanh ghi tích luõy vôùi döõ lieäu trong boä nhôù ñöôïc troû bôûi noäi dung thanh ghi HL Ñònh ñòa chæ chæ muïc laø moät theå cuûa ñònh ñòa chæ thanh ghi giaùn tieáp, khaùc nhau ôû choã ñoä dôøi ñöôïc coäng theâm trong ñònh ñòa chæ chæ muïc. Ñònh ñòa chæ thanh ghi giaùn tieáp cho pheùp truy xuaát boä nhôù töùc thôøi ñôn giaûn nhöng höõu hieäu. Leänh tìm vaø truyeàn khoái trong Z80 laø loaïi môû roäng cuûa ñònh ñòa chæ naøy, ôû ñoù thanh ghi ñöôïc taêng, giaûm vaø so saùnh moät caùch töï ñoäng, Kyù hieäu cho bieát vieäc ñònh ñòa chæ thanh ghi giaùn tieáp laø daáu ngoaëc ñôn bao quanh teân thanh ghi (ñöôïc duøng nhö laø pointer). Ví duï kyù hieäu (HL) chæ raèng noäi dung thanh ghi HL ñöôïc duøng nhö laø moät pointer chæ tôùi oâ nhôù. Thoâng thöôøng ñònh ñòa chæ giaùn tieáp thanh ghi duøng ñeå xaùc ñònh caùc toaùn haïng 16 bit. Trong tröôøng hôïp naøy, noäi dung thanh ghi chæ ñeán byte thaáp hôn cuûa toaùn haïng trong khi noäi dung thanh ghi coäng 1 chæ ñeán byte cao cuûa toaùn haïng.
Ñònh ñòa chæ bit :
Z80 chöùa moät löôïng lôùn taäp caùc leänh lieân quan ñeán bit: set, reset vaø test. Nhöõng leänh naøy cho pheùp baát kyø vò trí boä nhôù naøo hoaëc thanh ghi CPU söû duïng pheùp toaùn bit thoâng qua 1 trong 3 cheá ñoä ñònh ñòa chæ tröôùc ñoù ( thanh ghi, thanh ghi giaùn tieáp vaø chæ muïc ). 3 bit trong maõ leänh chæ roõ thanh ghi naøo ñöôïc duøng.
Söï keát hôïp caùc cheá ñoä ñònh ñòa chæ:
Nhieàu leänh daøi hôn moät toaùn haïng ( nhö laø leänh soá hoïc hay load ). Trong tröôøng hôïp naøy hai kieåu ñònh ñòa chæ coù theå ñöôïc tieán haønh. Ví duï, load coù theå duøng ñònh ñòa chæ töùc thôøi ñeå xaùc ñònh nguoàn vaø ñònh ñòa chæ thanh ghi giaùn tieáp hay ñònh ñòa chæ chæ muïc ñeå xaùc ñònh ñích.
d. Maõ hoùa leänh.
Phaàn naøy moâ taû leänh vaø baûng maõ leänh cho töøng leänh cuûa Z80. Trong ngoân ngöõ Assembly töø leänh gôïi nhôù ñöôïc duøng cho töøng leänh. Taát caû caùc maõ leänh ñöôïc lieät keâ ôû daïng soá HEX. Nhöõng maõ leänh 1 byte caàn hai soá Hex trong khi hai byte maõ leänh caàn 4 soá Hex.
Töø leänh gôïi nhôù cuûa Z80 bao goàm maõ leänh vaø 0, 1, hay 2 toaùn haïng. Leänh khoâng coù toaùn haïng töùc laø toaùn haïng cuûa noù ñöôïc ngaàm ñònh. Leänh logic chæ goàm 1 toaùn haïng khoâng ñoåi ( ví duï leänh OR ) ñöôïc ñaïi dieän bôûi 1 töø leänh gôïi nhôù. Leänh goàm 2 toaùn haïng khaùc nhau ñöôïc ñaïi dieän bôûi 2 töø leänh gôïi nhôù.
Load vaø Exchange :
Baûng 4-1 ñònh nghóa maõ leänh cho taát caû leänh load 8 bit trong Z80 CPU. Baûng naøy cuõng chæ ra kieåu ñònh ñòa chæ cuûa moãi leänh. Nguoàn cuûa döõ lieäu coù theå tra ôû haøng treân cuøng trong khi ñích ñöôïc tra ôû coät beân traùi. Ví duï, Load thanh ghi C töø thanh ghi B duøng maõ leänh 48H. Maõ leänh ñöôïc ñònh ôû daïng soá Hex vaø CPU laáy maõ leänh töø boä nhôù ngoaøi trong thôøi gian M1, sau ñoù CPU töï ñoäng giaûi maõ vaø truyeàn vaøo thanh ghi.
Töø leänh gôïi nhôù cho nhoùm naøy laø LD ( LD Ñích, nguoàn ).
Ví duï LD (HL), D laø naïp noäi dung thanh ghi D vaøo ñòa chæ maø thanh ghi HL chæ tôùi. Daáu ngoaëc quanh HL coù nghóa laø noäi dung cuûa HL ñöôïc duøng ñeå chæ ñeán vò trí boä nhôù naøo ñoù. Taát caû caùc leänh Load cuûa Z80 ñích luoân vieát tröôùc nguoàn. Moãi leänh ñeàu coù taøi lieäu giuùp ñôõ vaø chöông trình vieát ôû daïng ngoân ngöõ assembly Z80 thì deã daøng ñeå baûo trì.
Chuù yù trong baûng moät vaøi maõ leänh Load duøng trong Z80 laø 2 byte. Ñaây laø phöông phaùp taän duïng hieäu quaû boä nhôù khi leänh 8 bit, 16 bit, 24 bit, 32 bit ñöôïc thi haønh trong Z80. Do ñoù, nhöõng leänh taän duïng boä nhôù nhö pheùp toaùn soá hoïc vaø logic chæ caàn 8 bit.
IMPLIED
THANH GHI
THANH GHI
GIAÙN TIEÁP
CHÆ MUÏC
Ext
Addr
Imme
I
R
A
B
C
D
E
H
L
(HL)
(BC)
(DE)
(IX+d)
(IY+d)
(nn)
A
ED
57
ED
5F
7F
78
79
7A
7B
7C
7D
7E
A
1A
FD
7E
d
DD
7E
d
DD
3A
nn
DD
3E
n
B
47
40
41
42
43
44
45
46
DD
46
d
FD
46
d
DD
06
n
C
4F
48
49
4A
4B
4C
4D
4E
DD
4E
d
FD
4E
d
DD
0E
n
D
57
50
51
52
53
54
55
56
DD
56
d
FD
56
d
DD
16
n
E
5F
58
59
5A
5B
5C
5D
5E
DD
5E
d
FD
5E
d
DD
1E
n
H
67
60
61
62
63
64
65
66
DD
66
d
FD
66
d
DD
26
n
L
6F
68
69
6A
6B
6C
6D
6E
DD
6E
d
FD
6E
d
DD
36
n
(HL)
77
70
71
72
73
74
75
DD
7E
d
(BC)
02
(DE)
12
(IX+d)
DD
77
d
DD
70
d
DD
71
d
DD
72
d
DD
73
d
DD
74
d
DD
75
d
DD
36
d
n
(IY+d)
FD
77
d
FD
70
d
FD
71
d
FD
72
d
FD
73
d
FD
74
d
FD
75
d
(nn)
32
n
n
I
ED
47
R
ED
4F
Taát caû leänh Load duøng ñònh ñòa chæ chæ muïc ñeå xaùc ñònh nguoàn vaø ñích cuøng vôùi 3 byte boä nhôù vôùi byte thöù 3 laø ñoä dôøi d. Ví duï:
LD E, ( IX +8 )
Ñòa chæ A
DD
Maõ leänh
A+1
5E
Maõ leänh
A+2
08
Toaùn haïng thay theá
Leänh ñònh ñòa chæ môû roäng cuõng laø leänh 3 byte. Ví duï, leänh load vaøo thanh ghi A noäi dung cuûa ñòa chæ 6F32H trong boä nhôù ñöôïc vieát : LD A, ( 6F32H) vaø :
Ñòa chæ A
3A
Maõ leänh
A+1
32
Ñòa chæ thaáp
A+2
6F
Ñòa chæ cao
Chuù yù raèng byte thaáp cuûa ñòa chæ luoân laø toaùn haïng ñaàu.
Leänh load töùc thôøi cho thanh ghi 8 bit ña duïng laø leänh 2 byte. Leänh Load giaù trò 36H vaøo thanh ghi H : LD H,36H vaø
Ñòa chæ A
26
Maõ leänh
A+1
36
Toaùn haïng
Load ñòa chæ boä nhôù duøng ñònh ñòa chæ chæ muïc cho ñích vaø ñònh ñòa chæ töùc thôøi cho nguoàn caàn 4 byte. Ví duï LD ( IX-15), 21H caàn
Ñòa chæ A
DD
Maõ leänh
A+1
36
Maõ leänh
A+2
F1
Ñoä dôøi
A+3
21
Load toaùn haïng
Chuù yù raèng vôùi baát kyø caùch ñònh ñòa chæ chæ muïc thì ñoä dôøi luoân theo sau maõ leänh.
Baûng 4-2 lieät keâ leänh load 16 bit. Chuù yù raèng ñònh ñòa chæ môû roäng coù theå duøng cho taát caû caùc caëp thanh ghi. Hoaït ñoäng giaùn tieáp thanh ghi cho con troû ngaên xeáp laø leänh PUSH vaø POP. Ñieàu khaùc bieät trong leänh Load 16 bit laø con troû ngaên xeáp ñöôïc taêng giaûm töï ñoäng khi moãi byte ñöôïc ñaåy vaøo hay laáy ra töø ngaên xeáp. Ví duï : PUSH AF laø leänh 1 byte vôùi maõ leänh F5H. Khi leänh naøy ñöôïc thöïc thi thì seõ taïo ra :
Giaûm SP
LD (SP),A
Giaûm SP
LD (SP),F
Do ñoù ngaên xeáp ngoaøi xuaát hieän nhö sau :
(SP)
F
¬Ñænh ngaên xeáp
(SP+1)
A
·
·
·
·
Leänh POP thì ngöôïc vôùi PUSH. Chuù yù raèng taát caû leänh PUSH vaø POP duøng pheùp toaùn 16 bit vaø byte cao luoân ñöôïc ñaåy tröôùc vaø laáy sau :
PUSH BC laø ñaåy B vaø sau ñoù laø ñaåy C
PUSH DE laø ñaåy D vaø sau ñoù laø ñaåy E
PUSH HL laø ñaåy H vaø sau ñoù laø ñaåy L
POP HL laø laáy L vaø sau ñoù laø laáy H
Leänh duøng ñòa chæ töùc thôøi môû roäng caàn 2 byte döõ lieäu theo sau maõ leänh.
Ví duï :
LD DE, 0659H
seõ laø :
Ñòa chæ A
E6
Maõ leänh
A+1
07
toaùn haïng
Trong kieåu ñònh ñòa chæ môû roäng töùc thôøi, byte thaáp luoân xuaát hieän tröôùc tieân ngay sau maõ leänh.
Hình 4-3 lieät keâ leänh Exchange trong Z80. Maõ leänh 08H cho pheùp ngöôøi laäp trình ñoåi giöõa 2 caëp thanh ghi tích luõy, côø trong khi D9H cho pheùp ngöôøi laäp trình ñoåi giöõa 6 thanh ghi ña duïng. Nhöõng maõ leänh naøy chæ daøi 1 byte ñeå toái thieåu thôøi gian caàn thieát thi haønh leänh Exchange do ñoù hai bank coù theå ñöôïc duøng ñeå thôøi gian ñaùp öùng ngaét laø nhanh nhaát.
Nguoàn
THANH GHI
IMM
EXT
EXT
ADDR
REG
INDIR
AF
BC
DE
HL
SP
IX
IY
nn
(nn)
(SP)
AF
F1
R
BC
C1
E
DE
D1
G
HL
E1
SP
IX
DD
E1
IY
FD
E1
Ext addr
(nn)
ED
43
n
n
ED
53
n
n
22
n
n
ED
73
n
n
ED
22
n
n
FD
22
n
n
Reg
Ind
(SP)
F5
C5
D5
E5
DD
E5
FD
E5
Leänh PUSH
Leänh POP
Baûng 4-2 : Nhoùm LD 16 bit, PUSH vaø POP
IMPLIED ADDRESSING
AF
BC,DE,HL
HL
IX
IY
AF
08
IMPLIED
BC
DE
HL
09
DE
EB
REG
INDR
(SP)
E8
DD
E3
FD
E3
Baûng 4-3 : Exchange EX vaø EXX
Leänh tìm vaø truyeàn khoái
Baûng 4-4 lieät keâ söï tieän lôïi cuûa leänh truyeàn khoái. Taát caû caùc leänh ñoù khôûi ñoäng vôùi 3 thanh ghi :
HL : chæ tôùi vò trí nguoàn
DE : chæ tôùi vò trí ñích
BC : ñeám byte
Sau khi ngöôøi laäp trình ñaõ khôûi ñoäng 3 thanh ghi, baát cöù leänh naøo trong 4 leänh ñeàu coù theå ñöôïc duøng. Leänh LDI ( Load vaø taêng ) ñaåy 1 byte töø vò trí ñöôïc troû bôûi HL tôùi vò trí ñöôïc troû bôûi DE. Caëp thanh ghi HL vaø DE ñöôïc töï ñoäng taêng vaø saün saøng chæ ñeán vò trí sau. Byte ñeám ( caëp thanh ghi BC ) cuõng giaûm taïi thôøi ñieåm naøy. Leänh naøy thích hôïp khi phaûi truyeàn khoái data nhöng khaùc kieåu xöû lyù cho moãi laàn truyeàn. Leänh LDIR ( Load, taêng vaø laëp ) laø leänh LDI môû roäng. Taùc vuï taêng vaø Load töông töï ñöôïc laëp laïi cho ñeán khi byte ñeám giaûm xuoáng baèng 0. Do ñoù, leänh ñôn naøy coù theå truyeàn khoái döõ lieäu töø vò trí naøy ñeán vò trí khaùc.
Chuù yù raèng khi duøng thanh ghi 16 bit, kích thöôùc cuûa khoái coù theå leân ñeán 64 Kb vaø coù theå ñöôïc chuyeån töø vò trí naøy ñeán vò trí khaùc trong boä nhôù.
Leänh LDD vaø LDDR raát gioáng vôùi LDI vaø LDIR. Chæ coù 1 söï khaùc bieät laø caëp thanh ghi HL vaø DE bò giaûm sau khi moãi laàn chuyeån do ñoù khoái truyeàn khôûi ñoäng töø ñòa chæ cao nhaát hôn laø ñòa chæ thaáp nhaát cuûa khoái naøy.
Reg Indr
(HL)
Reg Indr
(ED)
A0
“LDI” Load (DE) ®(HL)
Taêng HL vaø DE, giaûm BC
(DE)
(ED)
B0
“LDIR” Load (DE) ®(HL)
Taêng HL vaø DE, giaûm BC laëp cho ñeán khi BC=0
(ED)
A8
“LDD” Load (DE) ®(HL)
Taêng HL vaø DE, giaûm BC
(ED)B8
“LDDR” Load (DE) ®(HL)
Taêng HL vaø DE, giaûm BC laëp cho ñeán khi BC=0
Hình 4-4 : NHOÙM LEÄNH TRUYEÀN KHOÁI (BLOCK TRASFER GROUP)
Hình 4-5 chæ roõ maõ leänh cuûa 4 khoái leänh tìm kieám. Ñaàu tieân, CPI ( So saùnh vaø taêng ) so saùnh döõ lieäu vôùi giaù trò maø thanh ghi HL chæ ñeán. Keát quaû cuûa vieäc so saùnh ñöôïc chöùa vaøo 1 trong caùc bit côø vaø caëp thanh ghi HL taêng leân sau ñoù vaø byte ñeám ( caëp thanh ghi BC ) thì giaûm xuoáng.
Leänh CPIR chæ laø leänh CPI môû roäng trong ñoù söï so saùnh ñöôïc laëp cho ñeán khi 1 söï truøng nhau ñöôïc tìm thaáy hay byte ñeám baèng 0. Do ñoù, leänh ñôn naøy coù theå tìm trong boä nhôù moät kyù töï 8 bit baát kyø.
CPD ( so saùnh vaø giaûm ) vaø CPDR ( so saùnh, giaûm vaø laëp ) laø leänh gioáng nhau. Chæ coù 1 söï khaùc bieät laø giaûm HL sau moãi laàn so saùnh do vaäy chuùng doø boä nhôù theo chieàu ngöôïc laïi. ( Tìm kieám ñöôïc baét ñaàu taïi vò trí cao nhaát trong khoái boä nhôù ).
Vò trí tìm
Reg Indr
(HL)
(ED)
A1
“CPI”
Taêng HL , giaûm BC
(ED)
B1
“CPR”
Taêng HL giaûm BC laëp cho ñeán khi BC=0 hoaëc tìm thaáy.
(ED)
A9
“CPD” Load (DE) ®(HL)
Giaûm HL vaø BC
(ED)B9
“CPDR” Giaûm HL vaø BC
laëp cho ñeán khi BC=0 hoaëc tìm thaáy.
Hình 4-5 : NHOÙM LEÄNH TÌM KIEÁM (BLOCK SEARCH GROUP)
Nhoùm leänh Logic vaø soá hoïc.
Hình 4-6 lieät keâ taát caû caùc leänh soá hoïc 8 bit coù theå ñöôïc duøng vôùi thanh ghi tích luõy. Trong taát caû caùc leänh, tröø INC vaø DEC, pheùp toaùn 8 bit ñöôïc thöïc thi giöõa döõ lieäu trong thanh ghi tích luõy vaø döõ lieäu nguoàn. Keát quaû cuûa pheùp toaùn ñöôïc ñaët trong thanh ghi tích luõy tröø leänh CP khoâng aûnh höôûng tôùi thanh ghi tích luõy. Caùc pheùp toaùn aûnh höôûng leân thanh ghi côø ñuôïc lieät keâ trong baûng. Leänh INC vaø DEC chæ roõ thanh ghi hay vò trí boä nhôù nhö laø nguoàn vaø ñích. Khi thanh ghi chæ muïc ñöôïc duøng nhö toaùn haïng nguoàn, ñoä dôøi phaûi ñöôïc theâm vaøo. Vôùi caùch ñònh ñòa chæ töùc thôøi moät toaùn haïng cuï theå seõ ñöôïc theâm vaøo. Ví du:ï
AND 07H
seõ xuaát hieän nhö sau :
Ñòa chæ A
E6
Maõ leänh
A+1
07
Toaùn haïng
Giaû söû thanh ghi tích luõy chöùa giaù trò F3H, keát quaû laø 03H seõ ñöôïc ñaët trong thanh ghi tích luõy:
Thanh ghi tích luõy tröôùc khi thöïc hieän pheùp toaùn
1111 0011 = F3H
Pheùp toaùn
0000 0111 = 07H
Keát quaû thanh ghi tích luõy
0000 0011 = 03H
Leänh ADD tieán haønh pheùp coäng nhò phaân giöõa döõ lieäu nguoàn vôùi döõ lieäu trong thanh ghi tích luõy. Leänh tröø laøm pheùp tröø nhò phaân. Khi coäng coù nhôù ( ADC ) hay tröø coù nhôù ( SBC ) côø Carry cuõng seõ ñöôïc coäng hay tröø. Côø vaø leänh hieäu chænh thaäp phaân (DAA) trong Z80 cho caùc pheùp toaùn soá hoïc ñöôïc cho nhö sau:
Ñoä chính xaùc cao cho soá BCD.
Ñoä chính xaùc cao cho soá nhò phaân coù daáu vaø khoâng daáu.
Ñoä chính xaùc cao cho soá buø hai coù daáu.
Caùc leänh khaùc trong nhoùm naøy laø leänh Logical AND, OR, XOR vaø CP
Coù 5 leänh soá hoïc ña duïng thi haønh treân thanh tích luõy hay côø Carry vaø ñöôïc lieät keâ trong hình 4-7. Leänh hieäu chænh thaäp phaân coù theå hieäu chænh cho pheùp tröø vaø pheùp coäng, nhö trong caùc pheùp toaùn soá hoïc treân soá BCD ñôn giaûn. Côø N ñöôïc duøng ñeán ñeå cho pheùp thöïc hieän pheùp toaùn naøy. Côø N ñöôïc set khi pheùp toaùn soá hoïc cuoái laø pheùp tröø. Leänh NEG buø hai toaùn haïng trong thanh ghi tích luõy. Cuoái cuøng chuù yù raèng moät leänh reset carry khoâng coù trong Z80, pheùp toaùn naøy thöïc hieän deã daøng baèng caùc leänh khaùc nhö laø leänh logic AND cuûa thanh ghi tích luõy vôùi chính noù.
Hình 4-8 lieät keâ caùc pheùp toaùn soá hoïc 16 bit giöõa caùc thanh ghi 16 bit. Coù 5 nhoùm leänh bao goàm coäng vaø tröø coù Carry. ADC vaø SBC aûnh höôûng ñeán taát caû caùc côø. Coù hai nhoùm: pheùp toaùn tính ñòa chæ hay pheùp toaùn soá hoïc 16 bit.
THANH GHI ÑÒA CHÆ
REG
INDR
CHÆ MUÏC
IMMED
A
B
C
D
E
H
L
(HL)
(IX+d)
(IY+d)
n
ADD
87
80
81
82
83
84
85
86
DD
86
d
FD
86
d
C8
n
ADD
Carry
ADC
8F
88
89
8A
8B
8C
8D
8E
DD
8E
d
FD
8E
d
CE
n
SUB
97
90
91
92
93
94
95
96
DD
96
d
FD
96
d
D8
n
SBC
9F
98
99
9A
9B
9C
9D
9E
DD
9E
d
FD
9E
d
DE
n
AND
A7
A0
A1
A2
A3
A4
A5
A6
DD
A6
d
FD
A6
d
E8
n
XOR
AF
A8
A9
AA
AB
AC
AD
AE
DD
AE
d
FD
AE
d
EE
n
OR
B7
B0
B1
B2
B3
B4
B5
B6
DD
B6
d
FD
B6
d
F8
n
CP
BF
B8
B9
BA
BB
BC
BD
BE
DD
BE
d
FD
BE
d
FE
n
INC
3C
04
0C
14
1C
24
2C
34
DD
34
d
FD
34
d
DEC
30
05
00
15
10
25
20
36
DD
35
d
FD
35
d
Hình 4-6 : PHEÙP TÍNH LOGIC VAØ SOÁ HOÏC 8 BIT
DAA
27
CPL
2F
NEG
ED
44
CCP
3F
SCP
37
Hình 4-7 : PHEÙP TÍNH AF ÑA DUÏNG
BC
DE
HL
SP
IX
IY
HL
09
19
29
39
ADD
IX
DD
09
DD
19
DD
39
DD
29
IY
FD
09
FD
19
FD
39
FD
29
ADC
HL
ED
4A
ED
5A
ED
6A
ED
7A
SBC
HL
ED
42
ED
52
ED
62
ED
72
INC
03
13
23
33
DD
23
FD
23
DEC
0B
1B
2B
3B
DD
2B
FD
2B
Hình 4-8 : PHEÙP TÍNH SOÁ HOÏC 16 BIT
Nhoùm leänh quay vaø dòch.
Khaû naêng quan troïng cuûa Z80 laø khaû naêng quay vaø dòch döõ lieäu trong thanh ghi tích luõy, thanh ghi ña duïng baát kyø, hay baát kyø vò trí boä nhôù naøo. Taát caû caùc maõ leänh quay vaø dòch ñöôïc chæ ra trong hình 4-9. Trong Z80 coù nhieàu leänh dòch logic vaø soá hoïc. Caùc thao taùc naøy raát coù lôïi trong khoaûng öùng duïng roäng bao goàm nhaân vaø chia soá nguyeân. Hai leänh quay BCD laø RRD vaø RLD cho pheùp 1 digit trong thanh ghi tích luõy quay vôùi 2 digits trong boä nhôù ñöôïc chæ bôûi caëp thanh ghi HL. Nhöõng leänh naøy raát coù hieäu quaû vôùi soá BCD.
A
B
C
D
E
H
L
(HL)
(IX+D)
(IY+d)
‘RCL’
CB
07
CB
00
CB
01
CB
02
CB
03
CB
04
CB
05
CB
06
DD
CB
d
06
FD
CB
d
06
‘RRC’
CB
0F
CB
08
CB
09
CB
0A
CB
0B
CB
0C
CB
0D
CB
0E
DD
CB
d
0E
FD
CB
d
0E
‘RL’
CB
17
CB
10
CB
11
CB
12
CB
13
CB
14
CB
15
CB
16
DD
CB
d
16
FD
CB
d
16
‘RR’
CB
1F
CB
18
CB
19
CB
1A
CB
1B
CB
1C
CB
1D
CB
1E
DD
CB
d
1E
FD
CB
d
1E
‘SLA’
CB
27
CB
20
CB
21
CB
22
CB
23
CB
24
CB
25
CB
26
DD
CB
d
26
FD
CB
d
26
‘SRA’
CB
2F
CB
28
CB
29
CB
2A
CB
2B
CB
2C
CB
2D
CB
2E
DD
CB
d
2E
FD
CB
d
2E
‘SRL’
CB
3F
CB
38
CB
39
CB
3A
CB
3B
CB
3C
CB
3D
CB
3E
DD
CB
d
3E
FD
CB
d
3E
‘SRL’
ED
6F
‘SRL’
ED
67
CY
b7 ¬ b0
Voøng quay traùi
A
RLCA
07
RRCA
0P
RLA
17
RRA
1F
CY
b7 ® b0
Voøng quay phaûi
Dòch phaûi Logic
CY
b7 ® b0
0
Dòch phaûi soá hoïc
CY
b7 ® b0
Quay phaûi
CY
b7 ® b0
CY
b7 ¬ b0
Quay traùi
CY
b7 ¬ b0
Dòch traùi soá hoïc
b3 – b0
b7 – b4
b3 – b0
ACC
Quay traùi soá hoïc
(HL)
b3 – b0
b7 – b4
b3 – b0
ACC
Quay phaûi soá hoïc
(HL)
Hình 4-9: DÒCH VAØ QUAY ( ROTATE AND SHIFT)
Thao taùc treân bit.
Khaû naêng set, reset, vaø test caùc bit rieâng bieät trong thanh ghi hay boä nhôù laø caàn thieát trong haàu heát caùc chöông trình. Nhöõng bit naøy coù theå laø côø trong caùc chöông trình.
Z80 coù khaû naêng set, reset, vaø test baát kyø bit naøo trong thanh ghi tích luõy, trong caùc thanh ghi ña duïng hay trong boä nhôù vôùi moät leänh ñôn. Hình 4-10 lieät keâ 240 leänh cho muïc ñích naøy. Ñònh ñòa chæ thanh ghi coù theå chæ roõ caùc pheùp toaùn thöïc thi treân thanh ghi tích luõy hay thanh ghi ña duïng. Ñònh ñòa chæ giaùn tieáp thanh ghi vaø ñònh ñòa chæ chæ muïc coù theå thöïc hieän caùc pheùp toaùn treân boä nhôù ngoaøi. Pheùp toaùn test bit set côø Zero ( Z) neáu keát quaû test laø zero.
Jump, Call vaø Return.
Hình 4-11 lieät keâ taát caû leänh jump, call vaø return seõ ñöôïc Z80 CPU thi haønh. Leänh Jump laø leänh reõ nhaùnh trong chöông trình, ñeán nôi maø PC seõ ñöôïc naïp vôùi giaù trò 16 bit ñöôïc chæ roõ bôûi 1 trong 3 cheá ñoä ñònh ñòa chæ ( Ñònh ñòa chæ töùc thôøi môû roäng, quan heä, giaùn tieáp thanh ghi ). Chuù yù raèng nhoùm Jump coù moät vaøi ñieàu kieän khaùc nhau, nhöõng ñieàu kieän naøy phaûi ñöôïc xaùc ñònh tröôùc khi leänh Jump thöïc thi. Neáu caùc ñieàu kieän naøy khoâng xaûy ra, chöông trình seõ tieáp tuïc thöïc hieän caùc leänh tieáp theo. Caùc ñieàu kieän phuï thuoäc vaøo thanh ghi côø. Ñònh ñòa chæ môû roäng töùc thôøi ñöôïc duøng ñeå nhaûy tôùi vò trí baát kyø trong boä nhôù. Leänh naøy caàn 3 byte ( 2 ñeå xaùc ñònh ñòa chæ 16 bit ) vôùi vò trí byte thaáp cuûa ñòa chæ naèm tröôùc, theo sau laø byte ñòa chæ cao.
Ví duï, leänh nhaûy khoâng ñieàu kieän tôùi ñòa chæ 3E32H:
Ñòa chæ A
C3
Maõ leänh
A+1
32
ñòa chæ thaáp
A+2
3E
ñòa chæ cao
Leänh nhaûy lieân heä chæ duøng 2 byte.Byte thöù 2 laø soá buø hai coù daáu chính laø ñoä dôøi tính töø PC hieän taïi. Ñoä dôøi naøy coù giaù trò trong khoaûng töø +129 ñeán -126 vaø ñöôïc tính töø ñòa chæ cuûa maõ leänh.
Coù ba loaïi nhaûy giaùn tieáp thanh ghi, laø nhöõng leänh ñöôïc thi haønh baèng caùch naïp caëp thanh ghi HL hay moät trong hai thanh ghi chæ muïc IX, IY moät caùch giaùn tieáp leân PC. Khaû naêng naøy cho pheùp tính toaùn tröôùc vò trí maø chöông trình seõ nhaûy ñeán.
Leänh Call laø moät daïng ñaëc bieät cuûa leänh Jump, byte ñòa chæ theo sau leänh Call ñöôïc ñöa vaøo ngaên xeáp tröôùc khi leänh nhaûy thöïc hieän. Leänh Return ngöôïc laïi vôùi leänh Call vì döõ lieäu taïi ñænh ngaên xeáp laáy ra vaø ñaët tröïc tieáp vaøo PC ñeå taïo ñòa chæ nhaûy. Leänh Call vaø Return cho pheùp caùc chöông trình con ñôn giaûn vaø ngaét ngang chöông trình baèng phaàn meàm. Trong hoï Z80 coù hai leänh quay veà ñaëc bieät. Quay veà töø chöông trình con phuïc vuï ngaét (RETI) vaø quay veà töø chöông trình con phuïc vuï ngaét khoâng che (RETN) ñöôïc CPU xöû lyù nhö laø moät leänh nhaûy khoâng ñieàu kieän vôùi maõ leänh laø C9H. Söï khaùc bieät naèm ôû choãø RETI ñöôïc duøng ñeå keát thuùc chöông trình phuïc vuï ngaét vaø taát caû caùc chip ngoaïi vi cuûa Z80 seõ chaáp nhaän vieäc thi haønh leänh naøy ñeå cho vieäc ñieàu khieån caùc ngaét coù ñoä öu tieân loàng nhau ñöôïïc thöïc hieän chính xaùc. Leänh naøy ñi caëp vôùi thieát bò caùc thieát bò ngoaïi vi cuûa Z80 ñeå thi haønh nhöõng leänh quay veà ñôn giaûn töø caùc ngaét. Chöông trình sau seõ baùo cho thieát bò ngaét raèng chöông trình phuïc vuï ngaét ñaõ hoaøn taát :
Khoâng cho ngaét : Caám ngaét tröôùc khi thoaùt khoûi chöông trình con.
LD A, n : Baùo cho ngoaïi vi raèng chöông trình phuïc
OUT n,A vuï ñaõ hoaøn taát
Cho pheùp ngaét
Quay veà.
Baûy byte naøy coù theå ñöôïc thay theá bôûi moät byte leänh EI vaø hai byte cuûa leänh RETI trong Z80. Ñaây laø ñieàu quan troïng khi thôøi gian phuïc vuï ngaét laø toái thieåu.
REGISTER ADDRESSING
REG INDR
INDEXED
A
B
C
D
E
H
L
(HL)
(IX+d)
(IY+d)
0
CB
47
CB
40
CB
41
CB
42
CB
43
CB
44
CB
45
CB
46
DD
CB
d
46
FD
CB
d
46
1
CB
4F
CB
48
CB
49
CB
4A
CB
4B
CB
4C
CB
4D
CB
4E
DD
CB
d
4E
FD
CB
d
4E
TEST
2
CB
57
CB
50
CB
51
CB
52
CB
53
CB
54
CB
55
CB
56
DD
CB
d
56
FD
CB
d
56
BIT
3
CB
5F
CB
58
CB
59
CB
5A
CB
5B
CB
5C
CB
5D
CB
5E
DD
CB
d
5E
FD
CB
d
5E
4
CB
67
CB
60
CB
61
CB
62
CB
63
CB
64
CB
65
CB
66
DD
CB
d
66
FD
CB
d
66
5
CB
6F
CB
68
CB
69
CB
6A
CB
6B
CB
6C
CB
6D
CB
6E
DD
CB
d
6E
FD
CB
d
6E
6
CB
77
CB
70
CB
71
CB
72
CB
73
CB
74
CB
75
CB
76
DD
CB
d
76
FD
CB
d
76
7
CB
7F
CB
78
CB
79
CB
7A
CB
7B
CB
7C
CB
7D
CB
7E
DD
CB
d
7E
FD
CB
d
7E
0
CB
87
CB
80
CB
81
CB
82
CB
83
CB
84
CB
85
CB
86
DD
CB
d
86
FD
CB
d
86
1
CB
8F
CB
88
CB
89
CB
8A
CB
8B
CB
8C
CB
8D
CB
8E
DD
CB
d
8E
FD
CB
d
8E
REST
2
CB
97
CB
90
CB
91
CB
92
CB
93
CB
94
CB
95
CB
96
DD
CB
d
96
FD
CB
d
96
BIT
3
CB
9F
CB
98
CB
99
CB
9A
CB
9B
CB
9C
CB
9D
CB
9E
DD
CB
d
9E
FD
CB
d
9E
‘RES’
4
CB
A7
CB
A0
CB
A1
CB
A2
CB
A3
CB
A4
CB
A5
CB
A6
DD
CB
d
A6
FD
CB
d
A6
5
CB
AF
CB
A8
CB
A9
CB
AA
CB
AB
CB
AC
CB
AD
CB
AE
DD
CB
d
AE
FD
CB
d
AE
6
CB
B7
CB
B0
CB
B1
CB
B2
CB
B3
CB
B4
CB
B5
CB
B6
DD
CB
d
B6
FD
CB
d
B6
7
CB
BF
CB
B8
CB
B9
CB
BA
CB
BB
CB
BC
CB
BD
CB
BE
DD
CB
d
BE
FD
CB
d
BE
0
CB
C7
CB
C0
CB
C1
CB
C2
CB
C3
CB
C4
CB
C5
CB
C6
DD
CB
d
C6
FD
CB
d
C6
1
CB
CF
CB
C8
CB
C9
CB
CA
CB
CB
CB
CC
CB
CD
CB
CE
DD
CB
d
CE
FD
CB
d
CE
2
CB
D7
CB
D0
CB
D1
CB
D2
CB
D3
CB
D4
CB
D5
CB
D6
DD
CB
d
D6
FD
CB
d
D6
SET
3
CB
DF
CB
D8
CB
D9
CB
DA
CB
DB
CB
DC
CB
DD
CB
DE
DD
CB
d
DE
FD
CB
d
DE
BIT
4
CB
E7
CB
E0
CB
E1
CB
E2
CB
E3
CB
E4
CB
E5
CB
E6
DD
CB
d
E6
FD
CB
d
E6
‘
5
CB
EF
CB
E8
CB
E9
CB
EA
CB
EB
CB
EC
CB
ED
CB
EE
DD
CB
d
EE
FD
CB
d
EE
6
CB
F7
CB
F0
CB
F1
CB
F2
CB
F3
CB
F4
CB
F5
CB
F6
DD
CB
d
F6
FD
CB
d
F6
7
CB
FF
CB
F8
CB
F9
CB
FA
CB
FB
CB
FC
CB
FD
CB
FE
DD
CB
d
FE
FD
CB
d
FE
Hình 4-10 : NHOÙM LEÄNH THAO TAÙC BIT
Un-cond
Carry
Non
Carry
Zero
Non Zero
Parity Even
Parity Odd
Sign Neg
Sign Pos
Neg S=0
Jump ‘JP’
Immed Ext
(nn)
C3
n
n
DA
n
n
D2
n
n
CA
n
n
C2
n
n
EA
n
n
E2
N
N
FA
n
n
F2
n
n
Jump ‘JR’
Relative
PC®e
18
e-2
38
e-2
30
e-2
28
e-2
20
e-2
Jump ‘JP’
Reg
(HL)
EB
Jump ‘JP’
Indr
(IX)
DD
E9
Jump ‘JP’
(IY)
FD
E9
‘Call’
Immed Ext
nn
CD
n
n
0C
n
n
D4
n
n
CC
n
n
C4
n
n
EC
n
n
E4
N
N
FC
n
n
F4
n
n
Giaûm B, nhaûy neáu khoâng zero ‘DJNZ
Relative
PC+e
Return ‘Ret’
Reg Indr
(SP)
(SP+1)
C9
D8
D0
C8
C0
E8
E0
F8
F0
Return töø Int ‘RETI’
Reg Indr
(SP)
(SP+1)
ED
4D
Return töø ngaét khoâng che ‘Retn’
Reg Indr
(SP)
(SP+1)
ED
45
Hình 4-11 : NHOÙM LEÄNH RETURN, CALL VAØ JUMP
Leänh DJNZ e laøm ñôn giaûn chöông trình ñieàu khieån voøng laëp, leänh naøy coù 2 byte, giaûm thanh ghi B vaø nhaûy neáu thanh ghi B chöa baèng ‘0’.
Hình 4-12 lieät keâ 8 maõ leänh cho leänh khôûi ñoäng laïi. Leänh naøy goàm 1 byte goïi ñeán 1 trong 8 ñòa chæ baát kyø trong danh saùch. Baûng sau laø töø leänh gôïi nhôù cho caùc leänh goïi. Caùc leänh naøy ñöôïc duøng thöôøng xuyeân ñeå toái thieåu hoùa nhu caàu boä nhôù.
MAÕ LEÄNH
0000H
C7
‘RST 0 ‘
ÑÒA CHÆ
0008H
CF
‘RST 8 ‘
CALL
0010H
D7
‘RST 16 ‘
0018H
DF
‘RST 24 ‘
0020H
E7
‘RST 32‘
0028H
EF
‘RST 40 ‘
0030H
F7
‘RST 48 ‘
0038H
FF
‘RST 56 ‘
Hình 4-12 : NHOÙM LEÄNH KHÔÛI ÑOÄNG LAÏI ( RESTART GROUP)
Input/Output.
Z80 coù taäp leänh môû roäng INPUT vaø OUTPUT ñöôïc chæ ra trong hình 4-13 vaø 4-14. Vieäc ñònh ñòa chæ cuûa thieát bò INPUT vaø OUTPUT coù theå duøng moät trong 2 caùch: ñònh ñòa chæ tuyeät ñoái hay giaùn tieáp thanh ghi, söû duïng thanh ghi C. Chuù yù raèng trong cheá ñoä ñònh ñòa chæ giaùn tieáp thanh ghi döõ lieäu coù theå ñöôïc chuyeàn giöõa thieát bò I/O vôùi baát kyø thanh ghi naøo. Theâm vaøo ñoù, 8 leänh truyeàn khoái ñöôïc duøng. Nhöõng leänh naøy gioáng nhö truyeàn khoái boä nhôù tröø khi duøng caëp thanh ghi HL ñeå chæ tôùi khoái nguoàn ( leänh OUTPUT ) hay ñích ( leänh INPUT ) trong khi thanh ghi B ñöôïc duøng nhö laø byte ñeám. Thanh ghi C giöõ ñòa chæ coång nôi maø leänh INPUT vaø OUTPUT caàn. Do ñoä daøi cuûa thanh ghi B laø 8 bit, khoái ñöôïc truyeàn coù theå leân ñeán 256 byte.
Trong leänh IN A,n vaø OUT n,A , ñòa chæ cuûa thieát bò I/O naèm ôû nöûa thaáp cuûa bus ñòa chæ ( A7¸A0) trong khi noäi dung thanh ghi tích luõy ñöôïc truyeàn treân nöûa cao cuûa bus ñòa chæ. Trong taát caû caùc leänh Input vaø Output vôùi caùch ñònh ñòa chæ giaùn tieáp thanh ghi, noäi dung thanh ghi C ñöôïc ñöa leân byte thaáp cuûa bus ñòa chæ ( ñòa chæ thieát bò ) trong khi noäi dung thanh ghi B ñöôïc ñua leân byte cao cuûa bus ñòa chæ.
IMMED
REG
IND
(n)
(c)
A
D8
N
ED
78
B
ED
40
REG
C
ED
48
Ñích nhaäp
INPUT “IN”
ADDRESS
D
ED
50
E
ED
58
H
ED
60
L
ED
68
“INT”-INPUT A
Inc HL, Dec B
REG
ED
A2
Khoái leänh nhaäp
“INIR”-INP Inc HL
Dec B REPEAT If B¹0
INDIR
(HL)
ED
B2
“IND”-INPUT & Inc
Dec HL, Dec B
ED
AA
“INDR”-INPUT Dec HL, Dec B REPEAT If B¹0
ED
BA
Hình 4-13: NHOÙM LEÄNH NHAÄP ( INPUT GROUP )
THANH GHI
REG IND
A
B
C
D
E
H
L
(HL)
11 OUT
IMMED
(n)
D3
n
REG
IND
(c)
ED
79
ED
41
ED
49
ED
51
ED
59
ED
61
ED
69
11 OUT – OUTPUT Inc HL, Dec B
REG
IND
(c)
ED
A3
11 OUT – OUTPUT DecB, REPEAT If B¹0
REG
IND
(c)
ED
B3
11 OUT – OUTPUT DecHL &B
REG
IND
(c)
ED
AB
11 OUT – OUTPUT DecHL &B REPEAT If B¹0
REG
IND
(c)
ED
BB
Khoái leänh xuaát
Port ñòa chæ ñích
Hình 4-14 : NHOÙM LEÄNH XUAÁT ( OUT PUT GROUP )
Nhoùm leänh ñieàu khieån CPU :
Hình 4-15 mieâu taû saùu leänh ñieàu khieån CPU. Leänh NOP laø leänh khoâng laøm gì caû. Leänh HALT hoaõn hoaït ñoäng CPU cho ñeán khi thu ñöôïc moät ngaét, trong khi DI vaø EI ñöôïc duøng ñeå khoùa vaø cho pheùp ngaét. Coù ba cheá ñoä ngaét :
Cheá ñoä 0 : thieát bò ngaét coù theå ñöa baát kyø leänh naøo leân bus döõ lieäu vaø cho pheùp CPU thi haønh noù.
Cheá ñoä 1 : laø cheá ñoä ñôn giaûn, CPU töï ñoäng thi haønh moät leänh RST (khôûi ñoäng laïi) tôùi vò trí 0038H do ñoù phaàn cöùng ngoaøi laø khoâng caàn thieát ( Noäi dung cuõ cuûa PC ñöôïc ñaåy leân ngaên xeáp ).
Cheá ñoä 2 : raát höõu duïng, noù cho pheùp goïi giaùn tieáp tôùi vò trí boä nhôù baát kyø. Vôùi cheá ñoä naøy, CPU thieát laäp ñòa chæ boä nhôù 16 bit coù 8 bit cao laø noäi dung cuûa thanh ghi I vaø 8 bit thaáp ñöôïc cung caáp bôûi thieát bò ngaét. Ñòa chæ naøy chæ ñeán byte thöù nhaát trong chuoãi hai byte lieân tieáp trong baûng ñòa chæ cuûa chöông trình phuïc vuï ngaét. CPU töï ñoäng laáy ñòa chæ baét ñaàu vaø thi haønh moät leänh CALL tôùi ñòa chæ naøy.
Chæ ñeán baûng ngaét, thanh ghi I laø ñòa chæ cao, ñaùp öùng ngoaïi vi laø ñòa chæ thaáp.
Ñòa chæ phuïc vuï ngaét
NOP
00
HALT
76
DISABLE INT ‘(DI)’
F3
DISABLE INT ‘(EI)’
FB
SET INT MODE 0
‘IM0’
ED
46
8080A MODE
SET INT MODE 1
‘IM1’
ED
56
CALL tôùi 0036H
SET INT MODE 2
‘IM2’
ED
5E
CALL giaùn tieáp duøng thanh ghi I vaø 8bit
töø thieát bò nhö con troû
Hình 4-15: KIEÅM SOAÙT CPU.
2.2.8. Moâ taû taäp leänh Z80.
a. Giôùi thieäu: Ngoân ngöõ Assembly Z80.
Ngoân ngöõ assembly cung caáp ngöõ nghóa khi laäp trình, khoâng caàn ñeå yù ñeán caáu truùc leänh maùy. Noù cho pheùp duøng ñòa chæ töôïng tröng ñeå phaân bieät vò trí boä nhôù vaø töø leänh gôïi nhôù ( maõ leänh vaø toaùn haïng ) ñeå ñaïi dieän cho leänh. Nhaõn ñöôïc duøng trong chöông trình ñeå ñaùnh daáu ñieåm baét ñaàu cuûa leänh. Toaùn haïng sau moãi leänh ñaïi dieän cho nôi chöùa, caùc thanh ghi hay caùc haèng. Ngoân ngöõ assembly hoã trôï tröïc tieáp cho caùc leänh döôùi daïng maõ maùy. Chöông trình ñöôïc vieát baèng ngoân ngöõ assembly thì ñöôïc goïi laø chöông trình nguoàn. Moãi caâu vieát treân moät haøng vaø coù theå chöùa töø 1 ñeán 4 muïc : Nhaõn, pheùp toaùn, toaùn haïng, chuù thích. Chöông trình nguoàn ñöôïc dòch ñeå thu ñöôïïc chöông trình döôùi daïng ngoân ngöõ maùy (chöông trình ñoái töôïng), chöông trình ñoái töôïng coù theå ñöôïc thi haønh tröïc tieáp bôûi Z80 CPU.
Caùc côø chæ thò traïng thaùi.
Thanh ghi côø ( F vaø F’) cung caáp thoâng tin cho ngöôøi duøng veà traïng thaùi Z80 ôû baát kyø thôøi ñieåm naøo. Vò trí bit cho moãi côø ñöôïc chæ ra nhö sau :
S
Z
X
N
X
P/V
N
C
Trong ñoù :
C : côø carry
N : Coäng hay tröø
P/V : côø Parity hay traøn
H : côø nuûa carry
Z : Côø zero
S : côø daáu
X : khoâng duøng.
Moät trong hai thanh ghi côø Z80 bao goàm 6 bit mang thoâng tin veà caùc traïng thaùi ñöôïc set hay reset bôûi caùc pheùp toaùn. ( bit 3 vaø bit 5 khoâng ñöôïc duøng ) 4 bit coù theå kieåm tra ( C, P/V, Z vaø S ) duøng laøm ñieàu kieän cho caùc leänh Jump, Call hay Return. Hai côø khoâng kieåm tra ñöôïc laø ( H vaø N ) vaø ñöôïc duøng cho caùc pheùp toaùn soá hoïc BCD.
Côø carry ( C ) :
Bit côø Carry ñöôïc set hay reset phuï thuoäc vaøo pheùp toaùn ñöôïc thi haønh. Leänh ‘ADD’ vaø leänh ‘Subtract’ coù theå set côø Carry.
Trong caùc leänh RLA, RRA, RLS, vaø RRS bit carry ñöôïc duøng nhö laø moái lieân keát giöõa LSB vaø MSB cho caùc thanh ghi hay boä nhôù baát kyø. Trong caùc leänh RLCA, RLC vaø SLA côø carry chöùa giaù trò cuoái cuøng ñöôïc dòch ra töø bit 7 cuûa thanh ghi hay boä nhôù. Trong caùc leänh RRCA, RRC, SRA, SRL carry chöùa giaù trò cuoái cuøng ñöôïc dòch ra töø bit 0 cuûa thanh ghi hay boä nhôù. Trong caùc leänh logic AND, OR, XOR carry seõ bò reset.
Côø carry cuõng coù theå ñöôïc set ( SFC ) vaø buø ( CCF ).
Côø coäng / tröø ( N ) :
Côø naøy ñöôïc duøng khi hieäu chænh thaäp phaân thanh ghi tích luõy ( DAA ) ñeå phaân bieät leänh ADD vaø SUBTRACT. Khi duøng leänh ADD, N seõ ñöôïc ñaët ôû möùc logic 0. Khi duøng leänh SUBTRACT N seõ ñöôïc ñaët ôû möùc logic 1.
Côø chaün leû / traøn ( P/V) :
Côø naøy ñöôïc set phuï thuoäc vaøo pheùp toaùn ñöôïc thi haønh.
Vôùi caùc pheùp toaùn soá hoïc, côø naøy baùo traøn khi keát quaû trong thanh ghi tích luõy lôùn hôn +127 hay nhoû hôn -128. Ñieàu kieän traøn coù theå ñöôïc xaùc ñònh nhôø vaøo caùc bit daáu cuûa caùc toaùn haïng.
Theâm vaøo ñoù caùc pheùp toaùn khaùc daáu seõ khoâng gaây traøn. Khi coäng caùc toaùn haïng cuøng daáu vaø keát quaû laø daáu khaùc, côø traøn ñöôïc set.
Ví duï :
+120 = 0111 1000 ADDEND
+105 = 0110 1001 AUGEND
+225 = 1110 0001 (-95) SUM
Hai soá coäng laïi vaø keát quaû vöôït quaù +127 vaø 2 toaùn haïng döông coù keát quaû laø soá aâm (-95), ñaây laø keát quaû sai. Côø traøn ñöôïc set.
Ñoái vôùi pheùp tröøø, traøn coù theå xaûy ra khi caùc toaùn haïng khaùc daáu. Caùc toaùn haïng cuøng daáu seõ khoâng bao giôø gaây traøn.
Ví duï :
+127 0111 1111 MINUEND
(-) -64 1100 0000 SUBTRAHEND
+191 1011 1111 DIFFERENCE
Côø baùn Carry ( H ) :
Côø baùn carry ( H ) seõ ñöôïc set hay reset phuï thuoäc vaøo carry vaø borrow giöõa bit 3 vaø 4 cuûa pheùp toaùn soá hoïc 8 bit. Côø naøy ñöôïc duøng khi hieäu chænh thaäp phaân thanh ghi tích luõy ( DAA ) ñeå laøm ñuùng keát quaû cuûa pheùp toaùn coäng hay tröø soá BCD. Côø H seõ laø set(1) hay reset (0) theo baûng sau :
H
Coäng
Tröø
1
Carry töø bit 3 ñeán bit 4
Möôïn töø bit 4
0
Khoâng coù Carry töø bit 3 ñeán bit 4
Khoâng möôïn töø bit 4
Côø zero ( Z ) :
Côø zero ñöôïc set hay reset neáu keát quaû cuûa leänh laø 0.
Ñoái vôùi caùc pheùp toaùn logic vaø soá hoïc 8 bit, côø Z seõ ñöôïc set leân 1 neáu noäi dung thanh ghi tích luõy laø 0.
Ñoái vôùi leänh so saùnh, côø Z seõ ñöôïc set leân 1 neáu noäi dung cuûa thanh ghi tích luõy vaø noäi dung cuûa boä nhôù ñöôïc chæ bôûi caëp thanh ghi HL gioáng nhau.
Khi kieåm tra bit trong thanh ghi hay boä nhôù, côø Z seõ chöùa traïng thaùi buø cuûa bit ñöôïc chæ ñònh ( xem Bit b,s ).
Khi ñang nhaäp hay xuaát 1 byte giöõa boä nhôù vôùi thieát bò I/O ( INI, IND, OUTI, OUTD ) neáu keát quaû cuûa B-1 laø 0 thì côø Z ñöôïc set. Ñoái vôùi byte ñöôïc nhaäp töø thieát bò I/O duøng IN r,(C) , côø Z seõ ñöôïc set ñeå cho bieát byte nhaäp baèng zero.
Côø daáu ( S ) :
Côø daáu chöùa traïng thaùi cuûa bit coù troïng soá lôùn nhaát cuûa thanh ghi tích luõy ( Bit 7 ).Moät soá döông ñöôïc phaân bieät bôûi ‘0’ ôû bit 7 vaø soá aâm laø ‘1’.
Khi nhaäp byte töø thieát bò I/O vaøo thanh ghi, IN r,(C) côø S seõ chæ hoaëc soá döông (S=0) hoaëc soá aâm (S=1).
b. Moâ taû leänh Z80:
Chuù yù: Thôøi gian thöïc thi (E.T) cho moãi leänh ñöôïc tính baèng ms vôùi giaû thieát taàn soá xung clock laø 4 Mhz. Toång chu kyø maùy ñöôïc chæ ra cuøng vôùi toång chu kyø T.
Ví duï :
M Cycle : 2 T status : 7 (4,3) 4 Mhz E.T : 1.75
Cho bieát raèng leänh goàm 2 chu kyø maùy. Chu kyø ñaàu goàm 4 chu kyø xung clock(chu kyøT). Chu kyø thöù hai goàm 3 chu kyø xung clock, toång coäng laø 7 chu kyø xung clock. Leänh naøy ñöôïc thi haønh trong 1.75 ms.
Daïng qui öôùc cuûa thanh ghi ñöôïc chæ ra trong moãi leänh vôùi bit coù troïng soá lôùn nhaát naèm beân traùi vaø bit coù troïng soá nhoû nhaát naèm beân phaûi.
Chuù thích:
Phaàn chi tieát veà taäp leänh xin xem trong taøi lieäu Z80 CPU User’s Manual (chöông Instruction Description).
2.3. Thieát keá chi tieát.
Döïa vaøo ñaëc ñieåm cuûa coång maùy in vaø caáu taïo cuûa Z80 CPU, ñeå ñaùp öùng yeâu caàu cuûa baøi toaùn, coù theå chia quaù trình thieát keá laøm 2 giai ñoaïn:
Giai ñoaïn 1: Thieát keá 1 KIT Z80 chaïy ñoäc laäp vôùi caùc chöùc naêng cô baûn.
Thaønh phaàn cuûa KIT naøy nhö sau: Z80 CPU, ROM chöông trình, boä nhôù chính RAM, caùc maïch giaûi maõ ñòa chæ, caùc maïch ñeäm tuyeán, caùc maïch giao tieáp ñeå ñieàu khieån moät soá coång xuaát nhaäp ñôn giaûn.
Giai ñoaïn 2: Thay ROM chöông trình ñaõ ñöôïc thieát keá ôû böôùc treân baèng moät RAM coù chöùc naêng töông töï. RAM naøy seõ chöùa chöông trình töø maùy tính gôûi ñeán thoâng qua moät maïch giao tieáp, thaønh phaàn chuû yeáu cuûa maïch giao tieáp naøy laø moät vi maïch gheùp noái song song (8255), caùc maïch phuï trôï khaùc seõ ñoùng vai troø tieáp nhaän vaø xöû lyù caùc tín hieäu ñieàu khieån ñöôïc gôûi tôùi töø maùy tính.
2.3.1 Thieát keá KIT Z80 chaïy ñoäc laäp.
Böôùc 1:
Choïn RAM coù dung löôïng 32 Kb (62256) laøm boä nhôù chính.
Choïn ROM coù dung löôïng 32 Kb (27256) laøm boä nhôù chöông trình.
Nhö vaäy caùc ñöôøng ñòa chæ cuûa boä nhôù chính seõ goàm A0 - A14. Caùc ñöôøng ñòa chæ naøy seõ ñöôïc noái tröïc tieáp ñeán caùc ñöôøng ñòa chæ töông öùng cuûa Z80 CPU. Ñoàng thôøi caùc ñöôøng data töø D0 - D7 cuõng seõ ñöôïc noái tröïc tieáp ñeán caùc ñöôøng data töông öùng cuûa Z80 CPU.
Ñeå caùch ly Addr bus cuûa ROM chöông trình vôùi Addr bus cuûa Z80 CPU, duøng 2 IC ñeäm tuyeán döõ lieäu 1 chieàu 74LS244. Lyù do caùch ly laø ñeå traùnh tröôøng hôïp va chaïm tuyeán ñòa chæ trong thôøi gian truy xuaát ROM chöông trình töø maùy tính vaø trong thôøi gian Z80 truy xuaát chöông trình khi hoaït ñoäng.
Böôùc 2: Thieát keá maïch giaûi maõ ñòa chæ.
Ñeå giaûi maõ ñòa chæ cho maïch öùng duïng ñoàng thôøi duøng cho vieäc môû roäng KIT sau naøy, maïch ñöôïc thieát keá dö ra moät soá ñöôøng ñòa chæ.
Caùc IC giaûi maõ 74LS139 vaø 74LS138 ñöôïc duøng.
ROM chöông trình seõ coù ñòa chæ trong khoaûng töø 0000H - 7FFFH.
Boä nhôù RAM seõ coù ñòa chæ trong khoaûng töø 8000H - FFFFH.
Böôùc 3: Thieát keá maïch nhaän vaø phaùt caùc möùc logic ñeán caùc coång xuaát nhaäp ñôn giaûn.
Duøng 1 IC ñeäm tuyeán 2 chieàu 74LS245 (nhöng chæ söû duïng 1 chieàu) ñeå nhaän caùc möùc logic töø caùc SW ñöôïc ñaët ôû ngoõ vaøo. CS cuûa IC naøy ñöôïc noái ñeán ñöôøng ñòa chæ 04H (CS1).
Ñeå xuaát caùc möùc logic töø CPU ra caùc thieát bò ngoaøi (ôû ñaây laø caùc LED chæ thò), duøng 1 IC caøi 74LS574. CS cuûa IC naøy ñöôïc noái ñeán ñöôøng ñòa chæ 00H (CS0).
Ñöôøng data bus cuûa 2 IC 74LS574 (U14) vaø 74LS245 (U15) ñöôïc noái vôùi data bus cuûa Z80 CPU thoâng qua IC ñeäm tuyeán 2 chieàu 74LS245 (U13).
2.3.2. Thieát keá phaàn giao tieáp vôùi maùy tính.
Thay ROM chöông trình baèng 1 RAM (RAM chung) töông öùng (62256), caùch ly Addr bus cuûa RAM naøy vaø Addr bus cuûa Z80 baèng 2 IC ñeäm 1 chieàu 74LS244 cho muïc ñích ñieàu khieån sau naøy.
Duøng vi maïch gheùp noái song song 8255 ñeå choát caùc ñöôøng ñòa chæ khi truy xuaát RAM chung töø maùy tính (lyù do phaûi choát caùc ñöôøng ñòa chæ laø: ñöôøng data cuûa coång maùy in chæ coù 8 bit, trong khi ñoù laïi coù ñeán 15 ñöôøng ñòa chæ (A0 - A14)).
Duøng IC ñeäm 1 chieàu 74LS244 ñeå caùch ly data bus cuûa maùy tính vaø KIT ñoàng thôøi cho muïc ñích ñieàu khieån döõ lieäu.
Moät IC Multiplex (74LS157) ñöôïc söû duïng cho muïc ñích ñoïc döõ lieäu veà maùy tính, 74LS157 laø moät Quad 2-input Multiplexer coù 4 bit ôû loái ra, 4 bit naøy ñöôïc noái ñeán caùc bit töông öùng cuûa thanh ghi traïng thaùi ôû coång maùy in.
Do caùc tín hieäu ñieàu khieån ra töø coång maùy in quaù ít (4 ñöôøng), IC 74LS374 ñöôïc duøng ñeå choát 8 bit data, caùc ñöôøng ra töø 74LS374 ñöôïc duøng trong vieäc ñieàu khieån caùc IC 8255, 74LS157, RAM chung, 74LS244 ñeäm tuyeán ñòa chæ.
2.4. Nguyeân lyù hoaït ñoäng.
2.4.1. Ñöa chöông trình ra RAM chung.
Giaû söû raèng ta ñaõ coù moät file nhò phaân (coù phaàn môû roäng laø.bin; file naøy laø moät chöông trình cuûa Z80 CPU ñaõ ñöôïc dòch ra daïng maõ maùy), nhieäm vuï laø phaûi ñöa file naøy theo töøng byte moät vaøo RAM chung cuûa KIT (töông ñöông vôùi Rom chöông trình cuûa KIT Z80). Ñeå laøm ñöôïc vieäc naøy phaûi tuaân theo caùc böôùc sau:
Böôùc 1: Caám Z80.
Tích cöïc chaân RESET cuûa Z80. Luùc naøy ñöôøng data bus cuûa Z80 ôû traïng thaùi trôû khaùng cao. Caùc IC 74LS244 (U4 & U5) bò caám neân caùc ngoõ ra cuûa IC naøy cuõng ôû traïng thaùi trôû khaùng cao. Do ñoù keát quaû laø moät phaàn maïch bò coâ laäp.
Böôùc 2: Caám RAM chung.
RAM chung seõ ñöôïc caám nhaèm muïc ñích ñöa data bus veà traïng thaùi trôû khaùng cao.
Vieäc naøy ñöôïc thöïc hieän baèng caùch caøi 1 bit thaáp töông öùng qua IC 74LS374 ñeå ñöa CS cuûa RAM chung xuoáng möùc logic '0'.
Böôùc 3: Khôûi ñoäng 8255.
Ñeå khôûi ñoäng 8255 tröôùc heát phaûi choïn caùc tín hieäu ñieàu khieån thích hôïp (CS, A0, A1), caùc tín hieäu naøy ñöôïc gôûi ñeán theo data bus cuûa coång maùy in vaø ñöôïc choát baèng moät xung caøi ñöôïc phaùt ra töø ngoõ ra INIT cuûa coång maùy in.
Töø ñieàu khieån ñöôïc ñöa vaøo 8255 qua IC ñeäm tuyeán 74LS244 ñoàng thôøi vôùi vieäc phaùt xung WR treân ngoõ ra AF cuûa coång maùy in.
8255 ñöôïc khôûi ñoäng ôû cheá ñoä sau: Mode 0, PA laø port xuaát, PC laø port xuaát.
Böôùc 4: Xaùc ñònh ñòa chæ ñeå truy xuaát RAM chung.
Choïn CS 8255 baèng moät bit töông öùng trong soá 8 bit data cuûa coång maùy in, phaùt xung caøi treân ngoõ ra INIT cuûa coång maùy in.
Baét ñaàu töø ñòa chæ 0000H, ñöa byte thaáp cuûa ñòa chæ ra data bus cuûa coång maùy in, phaùt tieáp xung WR, ñöa tieáp byte cao cuûa ñòa chæ ra data bus cuûa coång maùy in, phaùt xung WR. Luùc naøy ñòa chæ ñeå truy xuaát RAM chung ñaõ ñöôïc ñaët taïi ngoõ ra cuûa 8255.
Böôùc 5: Ghi data vaøo RAM chung.
Choïn CS RAM chung baèng moät bit töông öùng treân data bus cuûa coång maùy in, phaùt xung caøi treân ngoõ ra INIT cuûa coång maùy in. Ñöa byte data töông öùng vôùi ñòa chæ ñaõ phaùt leân data bus cuûa coång maùy in, phaùt xung WR ñeå ghi vaøo RAM chung.
Böôùc 6: Ñoïc data veà töø RAM chung vaø kieåm tra.
Giöõ nguyeân giaù trò ñòa chæ, choïn OE cuûa RAM chung baèng 1 bit töông öùng ñeå tieán haønh ñoïc byte vöøa ñöôïc ghi. Ñaàu tieân ñaët pin A/B cuûa 74LS157 ôû möùc logic '0' ñeå ñoïc 4 bit thaáp cuûa data bus vaøo thanh ghi traïng thaùi, caát giaù trò vöøa ñoïc ñöôïc, tieáp ñoù ñaët pin naøy ôû möùc logic cao ñeå ñoïc tieáp 4 bit cao vaøo thanh ghi traïng thaùi, tieán haønh khoâi phuïc byte data vöøa ñoïc, so saùnh vôùi byte ñaõ phaùt. Neáu byte phaùt ñi truøng byte thu veà thì tieán haønh böôùc tieáp theo, neáu khoâng phaùt laïi byte naøy. Neáu phaùt laïi 3 laàn maø vaãn coøn sai thì ngöøng vaø baùo loãi. Caùc loãi coù theå xaûy ra laø:
Coù byte trong vuøng RAM chung bò hö, tröôøng hôïp naøy caàn thay RAM, hoaëc phaàn cöùng hoûng (caùc IC 8255 74LS244, 74LS374, 74LS157, 74LS08, 74LS04), hoaëc ñôn giaûn hôn laø chöa caáp nguoàn cho KIT.
Taêng ñòa chæ vaø data töông öùng.
Laëp laïi böôùc 5 vaø böôùc 6 cho ñeán khi hoaøn taát.
Chuù yù: ÔÛ cuøng 1 thôøi ñieåm chæ coù 1 trong 2 IC hoaëc 8255 hoaëc RAM chung ñöôïc choïn ñeå traùnh söï va chaïm data bus.
Böôùc 7: Laøm pheùp ñoïc giaû ñeå bieán PA & PC trôû thaønh ngoõ vaøo.
Ñeå khôûi ñoäng laïi 8255 tröôùc heát phaûi choïn caùc tín hieäu ñieàu khieån thích hôïp (CS, A0, A1), caùc tín hieäu naøy ñöôïc gôûi ñeán theo data bus cuûa coång maùy in vaø ñöôïc choát baèng moät xung caøi ñöôïc phaùt ra töø ngoõ ra INIT cuûa coång maùy in.
Töø ñieàu khieån ñöôïc ñöa vaøo 8255 qua IC ñeäm tuyeán 74LS244 ñoàng thôøi vôùi vieäc phaùt xung WR treân ngoõ ra AF cuûa coång maùy in.
8255 ñöôïc khôûi ñoäng ôû cheá ñoä sau: Mode 0, PA laø port nhaäp, PC laø port nhaäp.
2.4.2. Chaïy chöông trình töø RAM chung.
Sau khi ñaõ ñöa chöông trình ra RAM chung, ta seõ thieát laäp caùc ñieàu kieän thích hôïp ñeå KIT baét ñaàu hoaït ñoäng theo chöông trình ñaõ ñöôïc ñöa vaøo RAM chung (Rom chöông trình). Trình töï thöïc hieän nhö sau:
Böôùc 1: Caám taát caû caùc CS cuûa caùc IC 8255, RAM chung, 74LS244 (U1), 74LS374 thoâng qua caùc tín hieäu ñieàu khieån thích hôïp.
Böôùc 2: Tích cöïc pin G1 & G2 cuûa 74LS244 (U4 & U5) ñeå thoâng tuyeán ñòa chæ töø Z80 CPU ñeán RAM chung.
Böôùc 3: Ñöa chaân RESET & WAIT cuûa Z80 CPU leân möùc logic '1'. Luùc naøy KIT seõ hoaït ñoäng theo chöông trình ñaõ ñöôïc ghi vaøo RAM chung.
2.4.3. Chaïy töøng böôùc (Debug).
Ñeå coù theå ñaët Z80 CPU vaøo cheá ñoä chaïy töøng böôùc vôùi söï can thieäp tröïc tieáp töø maùy tính sau khi ñaõ ñöa chöông trình ra RAM chung ta laàn löôït thöïc hieän caùc böôùc sau:
Böôùc 1: Caám taát caû caùc CS cuûa caùc IC 8255, RAM chung, 74LS244 (U1), 74LS374 thoâng qua caùc tín hieäu ñieàu khieån thích hôïp.
Böôùc 2: Tích cöïc pin G1 & G2 cuûa 74LS244 (U4 & U5) ñeå thoâng tuyeán ñòa chæ töø Z80 CPU ñeán RAM chung.
Böôùc 3: Ñöa EWT (pin 13 cuûa IC 74LS74 leân möùc logic cao).
Böôùc 4: Ñöa chaân RESET & WAIT cuûa Z80 CPU leân möùc logic '1'. Luùc naøy KIT seõ ôû traïng thaùi baét ñaàu hoaït ñoäng theo chöông trình ñaõ ñöôïc ghi vaøo RAM chung (ôû cheá ñoä Debug). Trình töï hoaït ñoäng cuûa KIT Z80 vaø quaù trình xöû lyù nhö sau:
Khi Z80 truy xuaát Rom chöông trình (ôû ñaây laø RAM chung) tín hieäu CSROM seõ ôû möùc tích cöïc thaáp, tín hieäu naøy qua coång ñaûo seõ ñöôïc ñöa ñeán chaân 11 (ngoõ vaøo CLK cuûa IC 74LS74_U8B), chaân 9 (ngoõ ra Q) cuûa 74LS74 seõ leân möùc logic cao, chaân 8 (ngoõ ra /Q) seõ ôû möùc logic thaáp, möùc logic naøy ñöôïc ñöa vaøo chaân 4 cuûa 74LS74 laøm ngoõ ra Q (chaân 11 U8A) ôû möùc logic cao, ngoõ ra /Q ôû möùc logic thaáp, ngoõ ra /Q ñöôïc ñöa vaøo chaân WAIT cuûa Z80 CPU, do ñoù Z80 CPU seõ ñöôïc ñöa vaøo traïng thaùi chôø cho ñeán khi chaân WAIT ñöôïc ñöa leân möùc logic cao.
Rom chöông trình seõ ñöôïc Z80 truy xuaát trong 2 tröôøng hôïp:
1. Laáy maõ leänh (chu kyø M1).
2. Ñoïc döõ lieäu.
ÔÛ chu kyø laáy maõ leänh seõ coù tín hieäu M1 ñi keøm (möùc tích cöïc thaáp). Tín hieäu naøy seõ ñöôïc PC nhaän bieát qua ñöôøng Busy.
Nhö vaäy, thoâng qua caùc tín hieäu CSROM vaø M1, coù theå can thieäp vaøo töøng leänh cuûa Z80. Cuï theå:
Ñeå ñoïc traïng thaùi cuûa caùc thanh ghi Z80 CPU theo töøng leänh ta thöïc hieän caùc böôùc cô baûn sau:
Giaû söû raèng breakpoint ñöôïc ñaët ôû doøng thöù n trong file coù phaàn môû roäng laø.asm. Khi thöïc hieän chaïy ôû cheá ñoä Debug, chöông trình dòch seõ dòch file naøy ñeå coù moät file töông öùng coù phaàn môû roäng laø.bin vaø moät file thöù hai coù phaàn môû roäng laø.lst (file naøy duøng khi ngöôøi söû duïng muoán in hoaëc xem maõ maùy cuûa töøng leänh trong toaøn boä chöông trình).
Ví duï: Ta coù moät chöông trình vieát baèng ngoân ngöõ assembly Z80 nhö sau:
org 0000h
ld sp,0FFFEh
loop:
ld a,11h
out (00h),a
jp loop
Giaû söû file naøy ñöôïc caát döôùi teân example.asm
Giaù trò trong file example.bin seõ laø:
31 FE FF 3E 11 D3 00 C3 03 00
Giaù trò trong file example.lst seõ laø:
org 0000h
0000 31FEFF ld sp,0FFFEh
lodp:
0003 3E11 ld a,11h
0005 D300 out (00h),a
0007 C30300 jp loop
Nhö vaäy doøng thöù n trong file *.asm seõ töông öùng vôùi doøng thöù m trong file *.lst theo coâng thöùc sau: m=n+(n div 60)*2 (sôû dó coù coâng thöùc naøy laø vì cöù 60 doøng trong file *.asm thì töông öùng seõ coù 2 doøng ñöôïc theâm vaøo trong file *.lst). Taïi doøng thöù m trong file *.lst ta seõ ñoïc ñöôïc ñòa chæ töông öùng cuûa moät leänh. Do ñoù breakpoint seõ töông öùng vôùi moät ñòa chæ cuï theå: breakpoint xxxxh.
Chöông trìbh Debug seõ baét ñaàu taïi ñòa chæ xxxxh ñaõ ñöôïc xaùc ñònh trong böôùc treân.
Khi Z80 truy xuaát Rom chöông trình, ta laàn löôït xeùt moät trong hai tröôøng hôïp:
a. Tröôøng hôïp truy xuaát boä nhôù: Coù tín hieäu choïn CSROM nhöng khoâng coù tín hieäu M1.
b. Tröôøng hôïp CPU laáy maõ leänh: Chia laøm 2 loaïi:
- Loaïi thöù nhaát: Leänh chæ coù 1 chu kyø M1.
- Loaïi thöù hai: Leänh coù 2 chu kyø M1. Chu kyø M1 thöù nhaát luoân baét ñaàu baèng moät trong 4 giaù trò sau: DDH, CBH, FDH, EDH.
Nhö vaäy ta seõ phaân bieät ñöôïc ñaâu laø nôi baét ñaàu cuûa moät leänh. Trong tröôøng hôïp CPU laáy maõ leänh, tín hieäu CSROM xuaát hieän ñoàng thôøi vôùi tín hieäu M1.
Khi Z80 truy xuaát Rom chöông trình chaân WAIT seõ töï ñoäng xuoáng möùc logic '0' nhôø phaàn cöùng nhö ñaõ giôùi thieäu ôû treân. Trong tröôøng hôïp CPU truy xuaát (ñoïc) boä nhôù, ta khoâng xöû lyù gì caû maø chæ caàn set chaân WAIT leân möùc logic '1' ñeå CPU tieáp tuïc chaïy bình thöôøng cho ñeán khi coù tín hieäu truy xuaát boä nhôù tieáp theo CPU seõ töï ñoäng bò ñaët laïi vaøo traïng thaùi chôø. Trong tröôøng hôïp CPU caàn laáy maõ leänh, ñaàu tieân phaûi xaùc ñònh maõ leänh coù bao nhieâu byte nhôø ñoïc giaù trò ñaàu cuûa maõ leänh. Neáu maõ leänh coù 2 bytes thì vieäc xöû lyù maõ leänh thöù hai seõ gioáng nhö trong tröôøng hôïp truy xuaát boä nhôù. Vieäc xöû lyù leänh ñöôïc tieán haønh nhö sau:
Khi coù tín hieäu M1, ñaàu tieân ta seõ ñoïc ñòa chæ ñang ñöôïc ñöa vaøo Rom chöông trình, so saùnh ñòa chæ naøy vôùi ñòa chæ xxxxh (töông öùng vôùi ñieåm breakpoint), neáu chöa baèng thì set chaân WAIT cho Z80 CPU tieáp tuïc chaïy cho ñeán khi ñòa chæ ñoïc veà ñuùng baèng ñòa chæ xxxxh, luùc naøy ta seõ tieán haønh ñoïc traïng thaùi cuûa caùc thanh ghi, trình töï ñoïc nhö sau:
Böôùc 1: Caám CS RAM chung baèng caùch ñöa /OER (pin 15 cuûa 74LS374_U3) xuoáng möùc logic '0' vaø ñöa /CER (pin 6 cuûa 74LS374_U3) leân möùc logic '1'.
Böôùc 2: Ñöa giaù trò C3 (maõ leänh cuûa leänh nhaûy JP HiAddrLoAddr) leân data bus, sau ñoù set chaân WAIT leân möùc logic '1', Z80 CPU seõ tieáp tuïc chaïy vaø hoaït ñoäng tieáp theo seõ laø ñoïc byte thaáp vaø byte cao cuûa ñòa chæ ñi theo sau maõ leänh Jump (C3LLHH), laàn löôït ñöa byte thaáp vaø byte cao cuûa ñòa chæ leân data bus thay cho döõ lieäu töø Rom chöông trình. Ñòa chæ naøy chính laø ñòa chæ ñaàu tieân cuûa ñoaïn chöông trình ñoïc thanh ghi maø ta ñaõ ñöa vaøo RAM chung ôû böôùc treân. Maõ leänh tieáp theo maø Z80 CPU caàn laáy chính laø byte ñaàu tieân cuûa ñoaïn chöông trình naøy, cho pheùp CS RAM chung baèng caùch ñöa /OER leân möùc logic '1', /CER xuoáng möùc logic '0', sau ñoù set chaân WAIT leân möùc logic '1' ñeå CPU tieáp tuïc chaïy. Noäi dung cuûa ñoaïn chöông trình ñoïc thanh ghi bao goàm:
- Caát noäi dung caùc thanh ghi vaøo stack.
- Laàn löôït ñöa noäi dung caùc thanh ghi A, B, C, D, E, H, L, IX, IY, SP ra ñòa chæ 0000h (ñòa chæ naøy chính laø ñòa chæ ñaàu tieân cuûa RAM chung), khi CPU truy xuaát ñeán ñòa chæ naøy chính laø luùc ñoïc noäi dung caùc thanh ghi veà PC. Duøng caùc leänh EX, EXX ñeå hoaùn chuyeån noäi dung caùc thanh ghi AF', BC', DE', HL' sau ñoù ñöa noäi dung caùc thanh ghi naøy ra RAM chung ñeå ñoïc veà PC nhö ñaõ trình baøy. Hoaùn vò laïi caùc thanh ghi AF', BC', DE', HL'.
- Khoâi phuïc noäi dung caùc thanh ghi.
Böôùc 3: Sau khi ñaõ ñoïc noäi dung caùc thanh ghi vaø in ra maøn hình, ñöa giaù trò C3 (maõ leänh cuûa leänh nhaûy JP HiAddrLoAddr) leân data bus, sau ñoù set chaân WAIT leân möùc logic '1', Z80 CPU seõ tieáp tuïc chaïy vaø hoaït ñoäng tieáp theo seõ laø ñoïc byte thaáp vaø byte cao cuûa ñòa chæ ñi theo sau maõ leänh Jump, laàn löôït ñöa byte thaáp vaø byte cao cuûa ñòa chæ trôû veà (chính laø ñòa chæ cuûa leänh maø CPU ñaõ bò chaën laïi tröôùc ñoù) leân data bus thay cho döõ lieäu töø Rom chöông trình.
Böôùc 4: Thöïc hieän leänh, chaën CPU ôû leänh tieáp theo vaø tieáp tuïc ñoïc noäi dung caùc thanh ghi theo töøng leänh.
Nhö vaäy vieäc ñoïc noäi dung caùc thanh ghi seõ ñöôïc tieán haønh tröôùc khi CPU laáy maõ leänh thöù nhaát.
Ñeå thöïc hieän leänh CALL nhö moät leänh ñôn cuûa Z80 trong cheá ñoä Debug ta tieán haønh nhö sau:
Ñoïc maõ leänh, neáu maõ leänh chöa phaûi laø C9 (maõ leänh RET) thì tieáp tuïc set chaân WAIT leân möùc logic '1' ñeå CPU tieáp tuïc chaïy bình thöôøng, neáu maõ leänh ñuùng baèng C9 thì thöïc hieän ñoïc traïng thaùi caùc thanh ghi töông töï nhö khi thöïc hieän moät leänh ñôn.
Moâ taû quaù trình Debug.
Ñaàu tieân chöông trình seõ töï ñoäng tìm doøng töông öùng trong file *.lst (coù noäi dung gioáng vôùi doøng hieän taïi trong cöûa soå maøn hình soaïn thaûo). Trong file *.lst coù löu giöõ ñòa chæ cuûa leänh, do vaäy deã daøng tìm ñöôïc ñòa chæ töông öùng cuûa doøng leänh hieän taïi. Z80 CPU seõ ñöôïc cho chaïy töø ñaàu chöông trình ñeán ñòa chæ naøy, nhôø vaøo vieäc thöôøng xuyeân ñoïc veà PC giaù trò cuûa ñòa chæ ñöôïc ñöa ñeán RAM chung trong moãi laàn coù söï truy xuaát cuûa CPU. Baét ñaàu töø ñaây, sau moãi leänh noäi dung cuûa caùc thanh ghi seõ ñöôïc ñoïc veà PC. CPU seõ laáy maõ leänh keá tieáp sau khi ñaõ thöïc hieän xong moät leänh, trong thôøi gian chôø laáy maõ leänh keá ñòa chæ cuûa leänh seõ ñöôïc ñoïc veà PC, döïa vaøo ñòa chæ naøy, doø tìm trong file *.lst ta seõ tìm ñöôïc soá haøng töông öùng cuûa doøng leänh. Khi cho Z80 CPU tieáp tuïc thöïc hieän leänh cuõng chính laø luùc phaûi ñaûo maøu cuûa doøng leänh hieän taïi töông öùng treân maøn hình. Quaù trình Debug seõ keát thuùc khi ngöôøi söû duïng nhaán phím ESC treân baøn phím.
2.4.4. Ñoïc döõ lieäu töø Ram trong khi KIT Z80 ñang hoaït ñoäng.
Böôùc 1: Döøng Z80 CPU ngay khi vöøa thöïc hieän xong moät leänh.
Böôùc 2: Caám CS RAM chung baèng caùch ñöa /OER (pin 15 cuûa 74LS374_U3) xuoáng möùc logic '0' vaø ñöa /CER (pin 6 cuûa 74LS374_U3) leân möùc logic '1'.
Böôùc 3: Ñöa giaù trò C3 (maõ leänh cuûa leänh nhaûy JP HiAddrLoAddr) leân data bus, sau ñoù set chaân WAIT leân möùc logic '1', Z80 CPU seõ tieáp tuïc chaïy vaø hoaït ñoäng tieáp theo seõ laø ñoïc byte thaáp vaø byte cao cuûa ñòa chæ ñi theo sau maõ leänh Jump, laàn löôït ñöa byte thaáp vaø byte cao cuûa ñòa chæ leân data bus thay cho döõ lieäu töø Rom chöông trình. Ñòa chæ naøy chính laø ñòa chæ ñaàu tieân cuûa ñoaïn chöông trình dump boä nhôù maø ta ñaõ ñöa vaøo RAM chung ôû böôùc treân. Maõ leänh tieáp theo maø Z80 CPU caàn laáy chính laø byte ñaàu tieân cuûa ñoaïn chöông trình naøy, cho pheùp CS RAM chung baèng caùch ñöa /OER leân möùc logic '1', /CER xuoáng möùc logic '0', sau ñoù set chaân WAIT leân möùc logic '1' ñeå CPU tieáp tuïc chaïy. Noäi dung cuûa ñoaïn chöông trình ñoïc thanh ghi bao goàm:
- Caát noäi dung caùc thanh ghi vaøo stack.
- Ñöa noäi dung cuûa vuøng ñòa chæ ñöôïc chæ ñònh ra data bus.
- Khoâi phuïc noäi dung caùc thanh ghi.
Böôùc 4: Sau khi ñaõ ñoïc noäi dung boä nhôù ñöôïc chæ ñònh vaø in ra maøn hình, ta tieáp tuïc ñöa giaù trò C3 (maõ leänh cuûa leänh nhaûy JP HiAddrLoAddr) leân data bus khi coù yeâu caàu laáy maõ leänh töø CPU, sau ñoù set chaân WAIT leân möùc logic '1', Z80 CPU seõ tieáp tuïc chaïy vaø hoaït ñoäng tieáp theo seõ laø ñoïc byte thaáp vaø byte cao cuûa ñòa chæ ñi theo sau maõ leänh Jump, laàn löôït ñöa byte thaáp vaø byte cao cuûa ñòa chæ trôû veà (chính laø ñòa chæ cuûa leänh maø CPU ñaõ bò chaën laïi tröôùc ñoù) leân data bus thay cho döõ lieäu töø Rom chöông trình.
Böôùc 5: Thieát laäp caùc ñieàu kieän thích hôïp ñeå KIT tieáp tuïc hoaït ñoäng bình thöôøng.
&
Chöông III: Giôùi thieäu phaàn soaïn thaûo vaên baûn.
3.1. Caùc thaønh phaàn chính cuûa main menu:
3.1.1. File:
New: Môû moät file môùi.
Open (F3): Môû moät file ñaõ coù.
Save (F2): Caát file ñang môû.
Save As: Caát file ñang môû döôùi moät teân khaùc.
Exit (Alt-X): Thoaùt khoûi chöông trình.
3.1.2 Run:
Run (Ctrl-F9): Dòch chöông trình, ñöa file ñaõ dòch ra RAM chung cuûa KIT. Chaïy chöông trình töø RAM chung.
Trace into (F7): Chaïy chöông trình töøng böôùc töø maùy tính (töøng leänh moät).
Step over (F8): Chaïy chöông trình töøng böôùc töø maùy tính (xem chöông trình con nhö moät leänh, khoâng chaïy caùc leänh trong thaân chöông trình con).
3.1.3. Debug:
Toggle breakpoint (Ctrl-F8): Cho pheùp thieát laäp ñieåm döøng.
Delete breakpoint all: Xoùa ñieåm döøng.
3.1.4 Help:
Introdution for use: Höôùng daãn söûa chöõa.
Instruction Description: Höôùng daãn taäp leänh Z80.
About: Caùc thoâng tin khaùc.
3.2. Höôùng daãn söû duïng trong maøn hình soaïn thaûo.
Chaïy chöông trình lvtn.exe. Cöûa soå maøn hình soaïn thaûo seõ ñöôïc môû.
Caùc phím dòch chuyeån laø caùc phím thoâng thöôøng (ß,à,á,â), Home (chuyeån veà ñaàu doøng), End (veà cuoái doøng), PgUp (trang tröôùc), PgDn (trang sau), Delete (xoaù kyù töï ôû vò trí con troû).
Vieát chöông trình öùng duïng baèng ngoân ngöõ Assembly cuûa Z80 hoaëc môû moät file coù saün ( vôùi phaàn môû roäng.asm).
Do trong tieän ích Debug vaø Dump coù söû duïng Stack ñeå baûo toaøn noäi dung caùc thanh ghi, neân doøng ñaàu tieân cuûa chöông trình bao giôø cuõng phaûi laø doøng khai baùo stack (vd: ld sp,0FFFEh).
Sau khi ñaõ vieát xong chöông trình caàn phaûi löu laïi vôùi phaàn môû roäng.asm. Sau ñoù coù theå chaïy chöông trình theo 2 caùch:
Caùch thöù nhaát: Chaïy tröïc tieáp.
Ñeå chaïy tröïc tieáp chöông trình, chæ caàn nhaán Ctrl-F9. Luùc naøy chöông trình seõ ñöôïc dòch vaø baïn caàn phaûi nhaäp teân file vaøo khi xuaát hieän thoâng baùo yeâu caàu nhaäp teân file. Löu yù:
Chæ caàn nhaäp teân file, khoâng caàn nhaäp phaàn môû roäng.
Khi baïn ñaõ nhaäp xong teân file, ôû doøng tieáp theo seõ xuaát hieän thoâng baùo vôùi noäi dung baïn coù muoán taïo file listing hay khoâng, file naøy ñöôïc duøng khi baïn muoán in, hoaëc seõ ñöôïc duøng trong cheá ñoä chaïy Debug. Baïn coù theå traû lôøi "Y" hoaëc "N" tuøy yù (trong tröôøng hôïp muoán chaïy Debug baïn nhaát thieát phaûi traû lôøi "Y").
Khi chöông trình ñaõ ñöôïc dòch xong vaø khoâng coù loãi, file *.bin seõ ñöôïc taïo vaø file naøy seõ ñöôïc töï ñoäng ñöa ra RAM chung, sau ñoù Z80 CPU seõ ñöôïc khôûi ñoäng vaø baét ñaàu chaïy theo chöông trình ñaõ ñònh.
Trong khi Z80 ñang thöïc thi, treân maøn hình seõ xuaát hieän thoâng baùo hoûi baïn coù muoán xem noäi dung boä nhôù treân KIT hay khoâng (chuù yù: ñòa chæ boä nhôù treân KIT baét ñaàu töø 8000h - FFFFh), neáu muoán baï
Các file đính kèm theo tài liệu này:
- THIET_KE__THI_CONG__VIET_CH.DOC