Thiết kế - Thi công KIT vi xử lý 8086

Tài liệu Thiết kế - Thi công KIT vi xử lý 8086: ... Ebook Thiết kế - Thi công KIT vi xử lý 8086

doc115 trang | Chia sẻ: huyen82 | Lượt xem: 1485 | Lượt tải: 0download
Tóm tắt tài liệu Thiết kế - Thi công KIT vi xử lý 8086, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phaàn 1 GIÔÙI THIEÄU CHUNG CHÖÔNG DAÃN NHAÄP ___ oOo ___ Ngaøy nay, treân theá giôùi khoa hoïc kyõ thuaät phaùt trieån nhanh choùng, ñaëc bieät laø ngaønh ñieän_ñieän töû. Nhöõng tieán boä naøy ngaøy caøng ñöôïc öùng duïng roäng raõi trong coâng nghieäp cuõng nhö trong ñôøi soáng sinh hoaït haèng ngaøy cuûa con ngöôøi. Heä thoáng vi xöû lyù hay coøn goïi laø maùy tính ñieän töû laø moät trong nhöõng öùng duïng ñoù, noù laø thieát bò xöû lyù thoâng tin, ñieàu khieån caùc thieát bò beân ngoaøi hay caùc thieát bò coâng nghieäp moät caùch töï ñoäng. Tröôùc nhu caàu thöïc teá, kit vi xöû lyù laø moät coâng cuï daïy vaø hoïc khoâng nhöõng giuùp cho sinh vieân nghieân cöùu hoïc taäp, maø coøn coù theå öùng duïng moâ phoûng hoaït ñoäng cuûa moät maùy tính ñieän töû, ñöa nhöõng tieán boä cuûa khoa hoïc kyõ thuaät daãn vaøo ñôøi soáng hieän ñaïi. Trong khaû naêng vaø kieán thöùc ñaõ hoïc, toâi quyeát taâm thöïc hieän ñeà taøi: “THIEÁT KEÁ – THI COÂNG KIT VI XÖÛ LYÙ 8086” ñeå ñaùp öùng nhu caàu treân. Vi xöû lyù laø moät heä thoáng soá döïa treân cô sôû linh kieän chuû yeáu laø boä vi xöû lyù (CPU). Tuøy thuoäc vaøo caáu truùc cuûa boä vi xöû lyù rieâng bieät vaø phaàn ñieàu khieån maø ta coù theå bao goàm nhieàu loaïi vi maïch. Döôùi söï ñieàu khieån baèng chöông trình moät boä vi xöû lyù thöïc hieän caùc pheùp tính soá hoïc vaø logic, ñoàng thôøi taïo ra nhöõng tín hieäu ñieàu khieån cho boä nhôù vaø thieát bò vaøo ra. Nhöõng meänh leänh naøy goïi laø chöông trình nguoàn vaø ñöôïc chöùa trong boä nhôù chæ ñoïc (ROM), khi maát ñieän döõ lieäu trong boä nhôù naøy khoâng bò maát, khi Reset maùy chöông trình naøy seõ thi haønh tröôùc tieân khôûi taïo cho maùy laøm vieäc. Khi laøm vieäc CPU ñoïc nhöõng leänh ñoù ra roài thöïc hieän chuùng. Do ñoù ta coù theå noùi boä vi xöû lyù laø caáu truùc phaàn cöùng ñöôïc xöû lyù baèng phaàn meàm. Ñeà taøi naøy khoâng chæ giuùp cho sinh vieân hoøan thaønh luaän vaên toát nghieäp maø coøn hình thaønh trong moãi sinh vieân nhöõng kinh nghieäm, saùng taïo vaø naêng ñoäng. Sau naøy ñeà taøi seõ keát hôïp vôùi caùc ngaønh chuyeân moân khaùc ñeå phaùt trieån moâ hình naøy ñöôïc hoaøn thieän hôn. CHÖÔNG CÔ SÔÛ LYÙ LUAÄN ___ oOo ___ I. XAÂY DÖÏNG ÑEÀ CÖÔNG LUAÄN VAÊN: 1). Xaùc ñònh nhieäm vuï nghieân cöùu: Vieäc choïn ñeà taøi xuaát phaùt töø hai lyù do: Khaùch quan: hieän nay caùc neàn coâng nghieäp coù nhu caàu hieän ñaïi hoùa caùc thieát bò theo xu höôùng caûi tieán hoùa caùc thieát bò baèng cô khí sang thieát bò ñieàu khieån töï ñoäng öùng duïng kyõ thuaät ñieän töû. Chuû quan: do nhu caàu hoïc taäp, nghieân cöùu, reøn luyeän kyõ naêng thöïc haønh, öùng duïng voán kieán thöùc khoa hoïc kyõ thuaät tieân tieán tröïc tieáp vaøo lónh vöïc saûn xuaát. Nhieäm vuï nghieân cöùu nhaèm ñaït ñöôïc caùc muïc ñích chuû yeáu: + Muïc ñích tröôùc maét: thoûa maõn veà cô baûn caùc yeâu caàu ñeà ra theo phöông chaâm “Hoïc ñi ñoâi vôùi haønh”. + Muïc ñích sau cuøng: Tích luõy kinh nghieäm, reøn luyeän vaø naâng cao naêng löïc, taïo baûn lónh ñeå saün saøng tham gia lao ñoäng saûn xuaát, hoøa nhaäp vaøo böôùc tieán cuûa theá heä. 2). Phaân tích taøi lieäu lieân heä: Trong thôøi gian nghieân cöùu ñeà taøi, ngöôøi nghieân cöùu ñaõ thoáng nhaát tham khaûo moät soá taøi lieäu coù lieân quan trong khoaûng thôøi gian cho pheùp. Phöông phaùp luaän nghieân cöùu khoa hoïc: tìm hieåu veà caáu truùc hình thöùc cuûa moät ñeà taøi nghieân cöùu khoa hoïc vaø phöông phaùp tö duy ñeå giaûi quyeát vaán ñeà. Kyõ thuaät vi xöû lyù Traàn Vaên Troïng: Taøi lieäu cung caáp veà caáu truùc cuûa vi xöû lyù 8086. Sô ñoà chaân linh kieän baùn daãn Döông Minh Trí: cung caáp sô ñoà chaân vaø baûng traïng thaùi hoïat ñoäng cuûa caùc IC vaø caùc linh kieän baùn daãn. Caáu truùc maùy tính: Leâ Anh Vieät: Taøi lieäu cung caáp kieán thöùc cô baûn veà caáu truùc maùy tính, toå chöùc CPU, hôïp ngöõ vaø caùch laäp trình. The 8086/8088 Family Design Programing and Interfacing – John uffnbeck: taøi lieäu cung caáp nhöõng kyõ thuaät keát noái vi xöû lyù vaø nhöõng phaàn meàm öùng duïng. Kyõ thuaät vi xöû lyù – Vaên Theá Minh: taøi lieäu cung caáp kyõ thuaät giao tieáp vôùi caùc thieát bò ngoaïi vi. II. KEÁ HOAÏCH NGHIEÂN CÖÙU: 1). Daøn yù nghieân cöùu: Phaàn I: Giôùi thieäu chung. Phaàn II: Thieát keá phaàn cöùng Kit 8086. Phaàn III: Xaây döïng phaàn meàm heä thoáng. Phaàn IV: Thi coâng Kit 8086. 2). Ñoái töôïng nghieân cöùu: Vi xöû lyù laø trung taâm ñieàu khieån caùc ñoái töôïng, ñieàu khieån heä thoáng nhö maùy töï ñoäng, daây chuyeàn saûn xuaát… Ñeå heä thoáng xöû lyù thi haønh caùc chöùc naêng ñieàu khieån nhö mong muoán, chuùng ta phaûi laäp trình baèng ngoân ngöõ töông öùng vôùi heä vi xöû lyù. Vì theá ñoái töôïng nghieân cöùu chính laø thieát keá khoái ñieàu khieån töông quan giöõa phaàn cöùng vaø phaàn meàm ñeå vaän haønh ñuùng chöùc naêng hoïat ñoäng thöïc söï cuûa maùy. Chöông I CAÁU TRUÙC BOÄ VI XÖÛ LYÙ 8086 ___ oOo ___ CAÁU TAÏO: Beân trong goàm hai khoái chính: Khoái thöïc hieän EU (Execution Unit) Khoái giap tieáp bus (Bus Interface Unit) Caùc côø AH AL BH BL CH CL DH DL BP DI SI SP CS ES SS DS IP Ñieàu khieån bus vaø taïo ñòa chæ 6 5 4 3 2 1 Bus ñòa chæ Bus döõ lieäu Caùc thanh ghi ñoaïn Arithmetic logic unit (ALU) Bus döõ lieäu noäi Caùc bus heä thoáng Excution Unit (EU) Bus Interface Unit (BIU) S Hình 1.1: Sô ñoà khoái 8086 Haøng ñôïi leänh Boä vi xöû lyù thöïc hieän caùc leänh theo caùc böôùc sau: Laáy leänh töø boä nhôù. Ñoïc toaùn haïng (neáu leänh yeâu caàu). Thöïc hieän leänh. Ghi keát quaû. 1). Khoái thöïc hieän: Nhieäm vuï cuûa khoái thöïc hieän leänh laø thöïc hieän caùc leänh cuûa chöông trình. Noù goàm coù khoái soá hoïc – logic (ALU) cho pheùp thöïc hieän caùc pheùp tính soá hoïc (+ , - , * , /) vaø caùc pheùp logic (AND, OR, NOT…). Trong khoái thöïc hieän coøn coù moät soá oâ nhôù goïi laø thanh ghi duøng ñeå chöùa döõ lieäu cho caùc pheùp tính. Moãi thanh ghi gioáng nhö moät oâ nhôù ngoaïi tröø chuùng ñöôïc ñaët teân thay vì duøng soá ñeå chæ ñòa chæ. EU (Execution Unit) coù caùc thanh ghi coâng duïng chung chia thaønh hai nhoùm: nhoùm thanh ghi döõ lieäu vaø nhoùm thanh ghi chæ soá. ¨ Caùc thanh ghi döõ lieäu (Data Register): AH AL BH BL CH CL DH DL AX (Accumulator) BX (Base) CX (Count) DX (Data) ¨ Caùc thanh ghi chæ soá vaø con troû (Index & Pointer Register): SP BP SI DI Con troû Stack (Stack Pointer) Con troû neàn (Base Pointer) Chæ soá nguoàn (Source Index) Chæ soá ñích (Destnation Index) ¨ Caùc thanh ghi ñoaïn (Segment Register): CS DS SS ES Ñoaïn maõ (Code Segment) Ñoaïn döõ lieäu (Data Segment) Ñoaïn Stack (Stack Segment) Ñoaïn theâm (Extra Segment) ¨IP Flag Con troû leänh (Intruction Pointer) Côø Caùc thanh ghi traïng thaùi vaø ñieàu khieån (Status & Control Register): ¨ Caùc thanh ghi döõ lieäu: Coù boán thanh ghi döõ lieäu kyù hieäu laàn löôït laø: AX, BX, CX, DX, ñöôïc ngöôøi laäp trình söû duïng cho caùc thao taùc vôùi döõ lieäu. Maëc duø vi xöû lyù coù theå thao taùc vôùi döõ lieäu trong boä nhôù, nhöng moät leänh nhö vaäy seõ ñöôïc thöïc hieän nhanh hôn trong thanh ghi (caàn ít chu kyø ñoàng hoà hôn). Ñoù cuõng laø nguyeân nhaân taïi sao caùc boä vi xöû lyù hieän ñaïi coù xu höôùng nhieàu thanh ghi. Caùc byte cao vaø byte thaáp trong thanh ghi ñöôïc truy caäp ñoäc laäp: Byte cao cuûa thanh ghi AX ñöôïc goïi laø AH vaø byte thaáp ñöôïc goïi laø AL. Töông töï nhö vaäy cho caùc byte cao vaø byte thaáp cuûa caùc thanh ghi BX CX DX laàn löôït laø BH & BL CH & CL, DH & DL. Nhôø ñieàu naøy maø ta coù nhieàu thanh ghi hôn khi laøm vieäc vôùi caùc soá lieäu coù kích thöôùc byte daøi. Trong ña soá leänh caùc thanh ghi döõ lieäu ñöôïc choïn tuøy yù nhöng caùc thanh ghi naøy laïi coù chöùc naêng rieâng coá ñònh trong moät soá ít leänh. · Thanh ghi tích luõy AX (Accumulator): Laø thanh ghi ñöôïc söû duïng nhieàu nhaát trong caùc leänh soá hoïc – logic vaø truyeàn döõ lieäu bôûi vì vieäc söû duïng thanh ghi naøy taïo ra maõ maùy ngaén nhaát. Trong caùc thao taùc nhaân hoaëc chia moät trong caùc soá haïn tham gia phaûi chöùa trong AH hoaëc AL, caùc thao taùc vaøo/ra cuõng söû duïng thanh ghi AH hoaëc AL. · Thanh ghi cô sôû BX (Base): Thanh ghi BX ñöôïc duøng cho tính toaùn ñòa chæ trong phöông phaùp ñònh ñòa chæ giaùn tieáp. · Thanh ghi ñeám CX (Count): Vieäc thöïc hieän caùc chöông trình laäp ñöôïc thöïc hieän deã daøng nhôø thanh ghi CX, trong ñoù CX ñoùng vai troø laø boä ñeám voøng laäp. Moät thí duï khaùc cuûa vieäc söû duïng thanh ghi CX ñoù laø leänh REP (Repeat) leänh naøy ñieàu khieån moät lôùp caùc leänh chuyeân veà caùc thao taùc chuoãi. CL cuõng ñöôïc söû duïng laø moät bieán ñeám trong caùc leänh dòch hay quay caùc bit. · Thanh ghi döõ lieäu DX (Data): DX duøng ñeå ñònh ñòa chæ giaùn tieáp trong caùc thao taùc vaøo ra, noù cuõng coøn ñöôïc söû duïng chöùa toaùn haïn, keát quaû trong pheùp nhaân vaø chia. · Thanh ghi con troû vaø chæ soá: Caùc thanh ghi SP, BP, SI, DI thöôøng troû tôùi caùc oâ nhôù (töùc laø chöùc caùc ñòa chæ offset cuûa caùc oâ nhôù ñoù). Khaùc vôùi thanh ghi ñoaïn, caùc thanh ghi con troû vaø ngaên xeáp ñöôïc söû duïng trong caùc thao taùc soá hoïc vaø moät soá thao taùc khaùc nhau. · Thanh ghi con troû – ngaên xeáp SP (Stack Pointer): Di chuyeån töø ñòa chæ cao ñeán ñòa chæ thaáp, duøng ñeå keát hôïp vôùi thanh ghi ñoaïn Stack SS (Stack Segment) ñeå löu tröõ ñòa chæ trôû veà hoaëc döõ lieäu vaøo trong ngaên xeáp. · Thanh ghi con troû cô sôû BP (Base Pointer): Thanh ghi naøy ñöôïc duøng ñeå truy caäp döõ lieäu trong ngaên xeáp maø khoâng laøm thay ñoåi SP. Tuy nhieân, khaùc vôùi SP thanh ghi BP cuõng coøn ñöôïc söû duïng ñeã truy caäp döõ lieäu ôû caùc ñoaïn khaùc. · Thanh ghi chæ soá nguoàn SI (Source Index): Thanh ghi SI ñöôïc söû duïng ñeå troû tôùi caùc oâ nhôù trong ñoaïn döõ lieäu ñöôïc ñònh bôûi thanh ghi ñoaïn döõ lieäu DS (Data Segment), coù theå truy caäp deã daøng caùc oâ nhôù lieân tieáp baèng caùch taêng SI. · Thanh ghi chæ soá ñích DI (Destination Index): Thanh ghi DI coù chöùc naêng töông töï nhö thanh ghi SI vaø ñöôïc duøng keát hôïp vôùi thanh ghi ñoaïn theâm ES (Extra Segment). Caû hai DI vaø SI thích hôïp trong caùc thao taùc sao cheùp, di chuyeån hoaëc so saùnh caùc khoái döõ lieäu coù dung löôïng ñeán 64KB. · Thanh ghi con troû leänh IP (Intruction Pointer): 8086 khoâng thöïc hieän leänh tröïc tieáp trong boä nhôù maø leänh ñöôïc laáy ôû haøng ñôïi leänh coù caáu taïo gioáng nhö moät thanh ghi dòch (FIFO: First In First Out: vaøo tröôùc ra tröôùc) chöùa caùc maõ leänh cung caáp bôûi khoái BIU. Thanh ghi IP chæ ñeán leänh tieáp theo chöa ñöôïc nhaäp vaøo haøng ñôïi leänh vaø ñöôïc duøng keát hôïp vôùi thanh ghi CS. Thanh ghi IP ñöôïc caäp nhaät moãi khi coù moät leänh ñöôïc thöïc hieän xong, khaùc vôùi caùc thanh ghi khaùc, IP khoâng bò taùc ñoäng tröïc tieáp bôûi caùc leänh. · Thanh ghi côø (Flag Register): Thanh ghi côø cuûa 8086 coù ñoä daøi 16bit (2byte) byte thaáp chöùa caùc bit traïng thaùi gioáng nhö trong 8085 phaûn aùnh traïng thaùi cuûa vi xöû lyù, byte cao chöùa 1bit traïng thaùi ñoù laø bit 11 vaø 3 bit ñieàu khieån duøng ñeå ñieàu khieån hoaït ñoäng cuûa vi xöû lyù. Sau ñaây laø caáu taïo cuûa thanh ghi côø trong 8086: 15 8 7 0 O D I T S Z A P C Thanh ghi côø cuûa 8086: C: carry flag. P: parity flag. A: auxiliary flag. Z: zero flag. S: sign flag. T: trap flag. I: interrupt enable flag. D: direction flag. O: overflow flag. + Côø nhôù CF: Côø nhôù CF ñöôïc thieát laäp khi coù soá nhôù töø bit MSB. Trong pheùp coäng hoaëc soá thieáu trong pheùp tröø (MSB trong caùc leänh byte laø bit 7 vaø trong caùc leänh word laø bit 15) côø CF cuõng bò aûnh höôûng bôûi caùc leänh quay vaø dòch. + Côø chaún leû PF: Sau caùc leänh soá hoïc hoaëc logic ñoái vôùi caùc leänh byte neáu soá löôïng soá ‘1’ trong byte keát quaû laø chaún thì côø PF ñöôïc thieát laäp laø ‘1’ ngöôïc laïi laø ‘0’neáu laø leû, ñoái vôùi caùc leänh word chæ xeùt caùc byte thaáp. + Côø nhôù phuï AF: Côø nhôù phuï ñöôïc thieát laäp neáu coù nhôù (coäng) hoaëc coù thieáu (tröø) töø phaân nöûa döôùi ñeán phaân nöûa treân cuûa toaùn haïn (ñoái vôùi leänh byte ñoù laø bit 3 vaø ñoái vôùi leänh word laø bit 7) côø AF ñöôïc söû duïng trong caùc thao taùc vôùi soá BCD. + Côø zero ZF: Côø zero ñöôïc thieát laäp khi keát quaû baèng 0. + Côø daáu SF: Côø daáu laø ‘1’ khi bit MSB cuûa keát quaû baèng ‘1’ töùc laø soá aâm, ñoái vôùi leänh byte MSB laø bit 7 vaø trong leänh word laø bit 15. + Côø baãy TF: Taïo khaû naêng thöïc hieän chöông trình theo töøng böôùc, khi TF baèng ‘1’ 8086 phaùt sinh ngaét loaïi 1 (ngaét cöùng). Chöông trình DEBUG söû duïng khi thi haønh leänh T (trace) ñeå chaïy töøng böôùc moät leänh. Ñaàu tieân DEBUG thieát laäp côø TF roài môùi chuyeån ñieàu khieån cho leänh ñoù. Sau khi leänh ñöôïc thi haønh vi xöû lyù seõ phaùt sinh moät ngaét do TF ñöôïc laäp DEBUG söû duïng chính phuïc vuï ngaét naøy ñeå laáy quyeàn ñieàu khieån töø vi xöû lyù. + Côø ngaét IF: Côø ngaét ñöôïc söû duïng ñeå ñieàu khieån caùc ngaét phaàn cöùng beân ngoaøi, neáu côø naøy ñöôïc thieát laäp caùc ngaét phaàn cöùng coù theå ngaét 8086. Khi xoùa IF, caùc ngaét beân ngoaøi khoâng coøn taùc duïng nöõa (bò che). Thöïc ra vaãn coøn moät ngaét cöùng khoâng che ñöôïc NMI (Non Maskable Interrupt). Tröôùc khi vi xöû lyù trao quyeàn ñieàu khieån cho moät phuïc ngaét noù xoùa caû IF vaø TF, nhö vaäy phuïc ngaét ñoù seõ khoâng bò ngaét. Taát nhieân moät phuïc vuï ngaét coù theå ñoåi côø ñeå cho pheùp ngaét khi noù ñang thi haønh. + Côø traøn OF: Côø traøn laø ‘1’ khi coù hieän töôïng traøn vaø ngöôïc laïi noù baèng ‘0’. Hieän töôïng traøn cho thaáy moät söï thaät laø phaïm vi bieåu dieãn caùc soá trong maùy tính laø coù giôùi haïn. Phaïm vi bieåu dieãn caùc soá coù daáu trong moät word töø –32768 ñeán +32767 vaø trong moät byte töø –126 ñeán +127. Ñoái vôùi caùc soá khoâng daáu töø 0 ñeán 65535 cho moät word vaø töø 0 ñeán 255 cho moät byte. Neáu keát quaû cuûa moät pheùp tính vöôït ra ngoaøi phaïm vi naøy thì hieän töôïng traøn seõ xaûy ra vaø keát quaû nhaän ñöôïc bò caét bôùt seõ khoâng phaûi laø keát quaû ñuùng. + Côø ñieàu khieån DF: Laø moät trong ba côø ñieàu khieån duøng ñieàu khieån caùc thao taùc cuûa vi xöû lyù coâng duïng cuûa DF laø dòch höôùng cho caùc thao taùc chuoãi, caùc thao taùc naøy ñöôïc thöïc hieän bôûi hai thanh ghi chæ soá SI & DI, noäi dung cuûa hai thanh ghi naøy seõ töï ñoäng taêng leân khi DF = 0 vaø giaûm xuoáng khi DF =1. 2). Khoái giao tieáp (BIU): Khoái giao tieáp laøm ñôn giaûn vieäc lieân laïc giöõa EU vaø boä nhôù hoaëc caùc vi maïch vaøo ra. Noù coù nhieäm vuï gôûi caùc ñòa chæ, soá lieäu vaø tín hieäu ñieàu khieån vaøo caùc bus, BIU & EU lieân heä vôùi nhau baèng caùc bus noäi boä, khi EU ñang thi haønh moät leänh, BIU naïp 6 byte maõ leänh tieáp theo vaøo vaø ñaët chuùng vaøo haøng ñôïi leänh, muïc ñích cuûa vieäc naøy laø laøm taêng toác ñoä cuûa vi xöû lyù. Neáu EU caàn lieân laïc vôùi boä nhôù hay thieát bò ngoaïi vi, BIU seõ treo caùc leänh nhaän tröôùc vaø thöïc hieän thöïc hieän caùc thao taùc caàn thieát. BIU caáu taïo goàm caùc thanh ghi ñoaïn vaø con troû leänh duøng ñeå chöùa ñòa chæ caùc oâ nhôù. a). Caùc thanh ghi ñoaïn: Ñöôïc duøng ñeå löu tröõ ñòa chæ cuûa caùc leänh vaø döõ lieäu trong boä nhôù, vi xöû lyù döïa treân caùc giaù trò naøy ñeå truy caäp boä nhôù. Boä nhôù laø taäp hôïp caùc byte oâ nhôù, moãi byte coù moät ñòa chæ xaùc ñònh baét ñaàu töø 0. 8086 gaùn cho moãi oâ nhôù moät ñòa chæ vaät lyù 20 bit. Nhö vaäy, noù coù theå ñònh ñòa chæ ñeán byte (töông ñöông 1MB) oâ nhôù, caùc byte ñaàu tieân cuûa boä nhôù coù ñòa chæ nhö sau: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0010 0000 0000 0000 0000 0011 0000 0000 0000 0000 0100 Ñeå ñôn giaûn, caùc ñòa chæ treân thöôøng ñöôïc bieåu dieãn baèng soá thaäp luïc phaân nhö sau: 00000H 00001H 00002H ………… H vaø cöù tieáp tuïc cho ñeán giaù trò lôùn nhaát laø FFFFFH Do caùc ñòa chæ quaù lôùn (20 bit) khoâng theå chöùa trong moät thanh ghi cuûa 8086 (16 bit) neân 8086 chia boä nhôù thaønh caùc ñoaïn boä nhôù (Memory Segment). Moät ñoaïn boä nhôù laø moät khoái goàm 216 (64K) oâ nhôù lieân tieáp nhau, moãi ñoaïn ñöôïc xaùc ñònh baèng moät ñòa chæ ñoaïn baét ñaàu töø ñòa chæ 0, ñòa chæ ñoaïn laø moät soá 16 bit neân ñòa chæ ñoaïn lôùn nhaát laø FFFF. Beân trong moãi ñoaïn soá oâ nhôù ñöôïc xaùc ñònh baèng ñòa chæ töông ñoái (offset), ñoù laø soá byte tính töø ñaàu ñoaïn, vôùi moät ñoaïn 64K thì offset cuõng laø moät soá 16 bit, byte ñaàu tieân trong ñoaïn coù offset baèng 0 vaø byte cuoái cuøng baèng FFFF. Moät oâ nhôù coù theå ñöôïc xaùc ñònh baèng ñòa chæ ñoaïn:ñòa chæ töông ñoái trong ñoaïn (segment:offset) vaø ñöôïc goïi laø ñòa chæ logic. Thí duï: oâ nhôù A4FB:4872 coù ñòa chæ ñoaïn laø A4FB vaø ñòa chæ offset laø 4872. Ñeå tìm ñòa chæ vaät lyù cuûa oâ nhôù tröôùc tieân ta dòch ñòa chæ ñoaïn veà beân traùi 4 bit vaø sau ñoù coäng vôùi ñòa chæ offset, nhö vaäy ñòa chæ vaät lyù cuûa oâ nhôù A4FB:4872 ñöôïc tính nhö sau: A4FB0 4872 A9822 b). Saép xeáp ñoaïn: Trong boä nhôù ñoaïn 0 baét ñaàu töø ñòa chæ 0000:0000 = 00000 vaø keát thuùc ôû 0000:FFFF = 0FFFF, ñoaïn 1 baét ñaàu töø ñòa chæ 0001:0000 = 00010 vaø keát thuùc ôû ñòa chæ 0001:FFFF = 1000F. Nhö vaäy, coù raát nhieàu söï choàng nhau giöõa caùc ñoaïn. Caùc ñoaïn baét ñaàu töø caùc ñòa chæ caùch nhau 16byte vaø ñòa chæ ñaàu cuûa moãi ñoaïn luoân keát thuùc baèng caùc soá 0. 16byte ñöôïc goïi laø moät khuùc (Paragraph), caùc ñòa chæ chia heát cho 16 (caùc ñòa chæ keát thuùc baèng 0) laø caùc bieân giôùi khuùc (Paragraph Boundary) c). Caùc ñoaïn cuûa chöông trình: Moãi ñoaïn chöông trình ngoân ngöõ maùy bao goàm caùc leänh vaø döõ lieäu, coøn moät vuøng ñaëc bieät trong RAM goïi laø ngaên xeáp (stack). Maõ leänh, döõ lieäu vaø ngaên xeáp cuûa chöông trình ñöôïc naïp vaøo caùc ñoaïn boä nhôù khaùc nhau ñoù laø ñoaïn maõ (code segment), ñoaïn döõ lieäu (data segment), ñoaïn ngaên xeáp (stack segment). Ñeå theo doõi caùc ñoaïn khaùc nhau cuûa chöông trình 8086 ñöôïc cung caáp 4 thanh ghi ñoaïn ñeå chöùa caùc ñòa chæ ñoaïn, caùc thanh ghi CS, DS, SS laàn löôïc chöùa caùc ñòa chæ ñoaïn maõ, ñoaïn döõ lieäu, vaø ñoaïn ngaên xeáp. Neáu chöông trình muoán truy caäp ñeán moät döõ lieäu thöù hai noù coù theå söû duïng thanh ghi ñoaïn theâm ES (extra segment). Moät chöông trình khoâng phaûi bao giôø cuõng caàn chieám heát moät ñoaïn 64KB, do ñaëc ñieåm choàng nhau giöõa caùc ñoaïn cho pheùp caùc ñoaïn cuûa moät chöông trình nhoû hôn 64KB coù theå ñaët gaàn laïi vôùi nhau. Taïi moät thôøi ñieåm, chæ coù caùc oâ nhôù ñöôïc ñònh ñòa chæ bôûi 4 thanh ghi ñoaïn môùi coù theå truy caäp, nghóa laø chæ coù 4 ñoaïn boä nhôù laø taùc ñoäng. Tuy nhieân noäi dung cuûa caùc thanh ghi ñoaïn coù theå thay ñoåi bôûi chöông trình ñeå truy caäp ñeán caùc ñoaïn khaùc nhau. d). Haøng ñôïi leänh: Nhö ta ñaõ bieát, ñeå taêng toác ñoä vi xöû lyù, khoái BIU tieáp nhaän caùc leänh vaø ñöa vaøo haøng ñôïi leänh (Queue) trong khi ñoù khoái EU ñang thi haønh leänh. Haøng ñôïi leänh coù theå nhaän 6 byte maõ leänh, caùc leänh cuûa 8086 coù ñoä daøi töø 1 ñeán 6 byte, neáu leänh chöa vaøo ñaày ñuû trong haøng ñôïi leänh thì khoái EU seõ chôø cho ñeán khi leänh naïp heát vaøo haøng ñôïi leänh. II. CHÖÙC NAÊNG CUÛA 8086: 1). Sô ñoà chaân cuûa 8086: 8086 laø vi xöû lyù 16 bit noù goàm 16 ñöôøng döõ lieäu vaø 20 ñöôøng ñòa chæ, caùc ñöôøng döõ lieäu töø D0 ñeán D15 vaø caùc ñöôøng ñòa chæ töø A0 ñeán A15 hoaït ñoäng theo phöông phaùp ña loä thôøi gian. 8086 coù theå laøm vieäc ôû hai cheá ñoä: Cheá doä Minimum. Cheá ñoä Maximum. Trong cheá ñoä minimum, 8086 ñieàu khieån caùc thieát bò baèng caùc tín hieäu ñieàu khieån cuûa chính noù, trong cheá ñoä naøy hoã trôï boä xöû lyù toaùn hoïc 8087. Trong cheá ñoä maximum caàn thieát phaûi keát hôïp vôùi vi maïch ñieàu khieån bus 8288 ñeå taïo ra caùc tín hieäu ñoïc – ghi cho boä nhôù vaø caùc thieát bò ngoaïi vi vaø cheá ñoä naøy cho pheùp laøm vieäc vôùi 8087. Sau ñaây laø sô ñoà chaân cuûa 8086 ôû caû hai cheá ñoä minimum vaø maximum: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND Vcc AD15 A16/S3 A17/S4 A18/S5 A17/S6 BHE/S7 MN/MX RD HOLD (RQ/GT0) HLDA (RQ/GT1) WR (LOCK) M/IO (S2) DT/R (S1) DEN (S0) ALE (QS0) INTA (QS1) TEST READY RESET 8086 CPU Hình 1.2: Sô ñoà chaân 8086 2). Chöùc naêng cuûa caùc chaân cuûa 8086: · Vcc = 5V Ñieän aùp nuoâi laø 5V DC, dung sai cho pheùp laø 10%. · GND = 0V Caùc ñöôøng mass neân coù ñieän trôû caøng nhoû caøng toát. · CLK = clock (input) Xung ñoàng hoà ñöa vaøo chaân naøy laø khoâng ñoái xöùng vaø coù tyû leä laø ½ (High/Low). · INTR- Interrupt Request (input): Möùc cao ôû ngoõ naøy baùo cho 8086 bieát coù moät yeâu caàu ngaét (thuôøng ñöôïc gôûi tôùi töø vi maïch xöû lyù ngaét 8259), tín hieäu ngaét taïi chaân naøy coù theå bò che baèng phaàn meàm. Khi vi xöû lyù chaáp nhaän yeâu caàu ngaét, noù seõ ñöa ra moät chu kyø chaáp nhaän ngaét vaø vi maïch xöû lyù ngaét phaûi gôûi ñòa chæ cuûa ngaét leân bus döõ lieäu töông öùng vôùi chu kyø thöù hai. · NMI (Non Maskable Interrupt): Ñaây laø ngaét khoâng che ñöôïc, taùc ñoäng ôû möùc cao vi xöû lyù nhaûy ñeán ñòa chæ ngaét soá 2 trong baûng vector ngaét vaø khoâng taïo ra chu kyø chaáp nhaän ngaét. · Reset (input): Ngoõ vaøo möùc cao ñaët vi xöû lyù veà traïng thaùi ban ñaàu sau ít nhaát 4 chu kyø ñoàng hoà. Thanh ghi CS ñöôïc ñaët giaù trò FFFF vaø thanh ghi IP ñöôïc ñaët giaù trò 0000. Nhö vaäy chæ thò ñöôïc thöïc hieän ñaàu tieân chöùa ôû oâ nhôù FFFF0 quaù trình chuyeån tieáp töø möùc cao xuoáng möùc thaáp ñöôïc ñoàng boä bôûi chu kyø ñoàng boä töø vi maïch taïo xung ñoàng hoà 8284. · Ready (input): Tín hieäu baùo ñaõ hoaøn taát thao taùc truyeàn döõ lieäu cuûa boä nhôù hoaëc thieát bò vaøo – ra, taùc ñoäng ôû möùc cao, vi xöû lyù seõ ñôïi neáu tín hieäu naøy ôû möùc thaáp. · AD0… AD15 - Address/Data bus (input/output): Gioáng nhö trong 8085, caùc ñöôøng ñòa chæ - döõ lieäu naøy laøm vieäc theo nguyeân taéc ña loä thôøi gian, laø ñòa chæ trong chu kyø T1 vaø laø döõ lieäu trong chu kyø T2, T3, Tw, T4, taùc ñoäng ôû möùc cao, coù caáu taïo ba traïng thaùi vaø ôû traïng thaùi toång trôû cao trong luùc vi xöû lyù ‘Interrup acknowlegde’ vaø ‘Hodl acknowleagde’ · A16/S3 …… A19/S6 – Addres/Status (output): Trong chu kyø T1 laø 4 bit ñòa chæ cao khi thao taùc vôùi boä nhôù, trong luùc thao taùc vôùi thieát bò vaøo-ra chaân naøy coù gía trò thaáp. Trong caû hai thao taùc cuõng nhö vaøo – ra caùc bit naøy laø traïng thaùi trong caùc chu kyø T2, T3, Tw, T4. Traïng thaùi bit cao cho pheùp ngaét, S5 ñöôïc caäp nhaät taïi moãi thôøi ñieãm baét ñaàu cuûa moãi chu kyø ñoàng hoà. S3 & S4 cho bieát thanh ghi ñoaïn ñang ñöôïc söû duïng, thoâng tin naøy caàn thieát cho Co-processor xaùc ñònh vò trí cuûa toaùn haïng. Coù caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ‘Hold acknowlegde’. S3 S4 Thanh ghi ñoaïn ñöôïc choïn 0 0 1 1 0 1 0 1 Thanh ghi ñoaïn theâm. Thanh ghi ñoaïn ngaên xeáp. Thanh ghi ñoaïn leänh. Thanh ghi ñoaïn döõ lieäu . Hai bit S3 & S4 ñeå choïn caùc thanh ghi ñoaïn. · BHE/S7 – Bus high enable / status (output): Keát hôïp vôùi bit ñòa chæ A0 ñeå xaùc ñònh cheá ñoä truyeàn döõ lieäu, BHE ôû möùc thaáp trong chu kyøT1 cuûa caùc thao taùc ñoïc – ghi vaø chaáp nhaän ngaét khi moät byte ñöôïc truyeàn trong byte cao cuûa bus döõ lieäu. S7 coù hieäu löïc trong caùc chu kyø T2, T3 & T4, caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold’. BHE A0 Kieåu truyeàn döõ lieäu 0 0 1 1 0 1 0 1 Truy xuaát 16 bit Truy xuaát byte cao töø ñòa chæ leû Truy xuaát byte thaáp ñòa chæ chaün. Khoâng söû duïng . Caùc kieåu truy xuaát döõ lieäu. · RD – Read (output): Tín hieäu ra ñieàu khieån vieäc ñoïc boä nhôù hoaëc khoái vaøo ra phuï thuoäc vaøo bit traïng thaùi S2, möùc thaáp taïi T2, T3 vaø Tw trong moãi chu kyø ñoïc, caáu taïo ba traïng thaùi vaø toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’. · Test (input): Tín hieäu vaøo ñöôïc kieãm tra bôûi leänh ‘WAIT’ vi xöû lyù seõ khoâng laøm gì caû khi ñieän aùp chaân naøy coù giaù trò thaáp, ñoàng boä taïi caïnh leân cuûa moãi xung ñoàng hoà. · MN-MX – Minimum-Maximum (input): Chaân choïn cheá ñoä laøm vieäc cuûa 8086, cheá ñoä laøm vieäc laø minimum töông öùng vôùi möùc cao vaø cheá ñoä laøm vieäc laø maximum öùng vôùi möùc thaáp. Bus ñieàu khieån ôû hai cheá ñoä coù chöùc naêng khaùc nhau. · M/IO (output): Ngoû ra traïng thaùi gioáng nhö bit S0 ôû cheá ñoä maximum duøng ñeå baùo vò trí ñang truy xuaát döõ lieäu. Möùc cao laø boä nhôù vaø möùc thaáp laø khoái vaøo-ra. Caáu taïo ba traïng thaùi, toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’. · WR – write (output): Tín hieäu ra ñieàu khieån thao taùc ghi vaøo boä nhôù hoaëc khoái vaøo-ra tuøy theo giaù trò cuûa ngoõ M/IO. Taùc ñoäng möùc thaáp ôû T2, T3 vaø Tw cuûa moãi chu kyø ghi, caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’. · INTRA – Interrup Acknowlegde (output): Tín hieäu chaáp thuaän ngaét, taùc ñoäng möùc thaáp taïi T2, T3 vaø Tw duøng ñeå ñöa ñòa chæ cuûa ngaét leân bus döõ lieäu. · ALE – Adress Latch Enable Tín hieäu ñieàu khieån choát ñòa chæ 74LS373 hoaëc 8282/8283 taùc ñoäng möùc cao trong khoaûng T1 cuûa moãi chu kyø bus : + Khi ALE = 1 caùc bit AD0 … AD15 laø ñòa chæ. · Hold (input): Tín hieäu vaøo cho bieát moät linh kieän ñoøi quyeàn söû duïng bus, taùc ñoäng ôû möùc cao. · HLDA – Hold acknowlegde (output): Tín hieäu ra ôû möùc cao cho bieát yeâu caàu Hold ñöôïc chaáp thuaän, vi xöû lyù seõ treo bus noäi boä vaø caùc ñöôøng ñieàu khieån cuûa noù ôû traïng thaùi toång trôû cao. · DT/R – Data Transmit/Receive (output): Tín hieäu ra duøng ñeå ñieàu khieån höôùng truyeàn döõ lieäu cuûa vi maïch thu - phaùt. Caáu taïo ba traïng thaùi vaø traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’. · DEN – Data enable (output): Tín hieäu ra ôû möùc thaáp cho moãi chu kyø thao taùc boä nhôù vaø I/O vaø caû INTRA ñieàu khieån ngoõ ra cho pheùp cuûa 8286/8287 trong hoaït ñoäng thu – phaùt döõ lieäu. Caáu taïo ba traïng thaùi, traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’. · S0, S1, S2 (thoâng tin traïng thaùi): Vi maïch 8288 döïa treân caùc thoâng tin naøy ñeå thöïc hieän caùc thao taùc ñieàu khieån. Caáu taïo ba traïng thaùi, traïng thaùi toång trôû cao khi ‘Hold acknowlegde’. Taùc ñoäng trong caùc chu kyø T4, T1 & T2 vaø trôû veà traïng thaùi thuï ñoäng ôû T3 hoaëc Tw khi Ready ôû möùc cao. Moät söï thay ñoåi baát kyø cuûa tín hieäu naøy trong chu kyø T4 ñöôïc duøng ñeå ñaùnh daáu thôøi ñieåm baét ñaàu cuûa chu kyø bus vaø trôû veà thuï ñoäng ôû trong T3 hoaëc Tw xaùc ñònh ñieåm keát thuùc cuûa chu kyø bus. S2 S1 S0 Thoâng tin ñieàu khieån 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Chaáp nhaän ngaét. Ñoïc töø coång. Vieát ra coång Döøng. Nhaäp maõ leänh. Ñoïc töø boä nhôù. Vieát ra boä nhôù. Thuï ñoäng. · RQ/GT0, RQ/GT1 – Request/Gram (input/output): Hai tín hieäu yeâu caàu vi xöû lyù nhöôøng quyeàn söû duïng bus, tín hieäu RQ/GT0 coù möùc öu tieân cao hôn. Nguyeân lyù hoaït ñoäng ñöôïc moâ taû nhö sau: + Moät xung coù beà roäng moät chu kyø ñoàng hoà cho bieát moät linh kieän caàn söû duïng bus. + Trong chu kyø ñoàng hoà T4 hoaëc T1 vi xöû lyù gôûi ñeán linh kieän ñoù xung coù beà roäng chu kyø ñoàng hoà cho bieát vi xöû lyù chaáp nhaän nhöôøng quyeàn söû duïng bus vaø noù seõ tieán vaøo traïng thaùi ‘Hold acknowlegde’ sau xung ñoàng hoà keá tieáp ñeå treo bus cuûa chính noù. + Xung beà roäng chu kyø ñoàng hoà ñöôïc gôûi ñeán 8086 cho bieát quaù trình ‘Hold’ keát thuùc vaø vi xöû lyù trôû laïi quaûn lyù bus xau khi chaám döùt chu kyø ñoàng hoà keá tieáp. Neáu yeâu caàu naøy xaûy ra trong khi vi xöû lyù ñang truy xuaát boä nhôù, noù seõ treo bus trong khoaûngT4 neáu thoûa nhöõng dieàu kieän sau ñaây: Yeâu caàu xaûy ra trong khi hoaëc trö-ùc T2. Chu kyø hieän haønh khoâng phaûi laø byte thaáp cuûa word (ôû ñòa chæ leû). Chu kyø hieän haønh khoâng ôû traïng thaùi chaáp nhaän ngaét. Khoâng coù chæ thò khoùa. Neáu bus khoâng baän khi coù yeâu caàu thì coù hai tröôøng hôïp seõ xaûy ra. Bus seõ treo ôû chu kyø ñoàng hoà keá tieáp. Moät chu boä nhôù seõ khôûi ñoäng trong voøng 3 chu kyø ñoàng hoà. · Clock (output): Möùc cao baùo cho caùc linh kieän ngoaøi bieát (Co-processor) raèng chu kyø bus tieáp theo khoâng ñöôïc pheùp giaùn ñoaïn, ñieàu naøy xaûy ra khi trong chöông trình coù chæ thò ‘Clock’. Caáu taïo ngoõ ra ba traïng thaùi, traïng thaùi toång trôû cao khi vi xöû lyù ôû cheá ñoä ‘Hold acknowlegde’ · QS1, QS0 – Queue status (output): Ngoõ ra cho bieát traïng thaùi cuûa haøng ñôïi leänh, nhöõng thoâng tin naøy caàn thieát cho Co-processor. QS0 QS1 Traïng thaùi haøng ñôïi leänh 0 0 1 1 0 1 0 1 Khoâng hoaït ñoäng . Xoùa noäi dung haøng ñôïi keänh. Naïp byte maõ leänh ñaàu tieân vaøo thanh ghi leänh. Naïp byte maõ leänh tieáp theo cuûa leänh nhieàu byte +Vcc RES 8284 MN/ M/ DT/ ALE Vcc GND ADDR/DATA AD0¸AD15 A16¸A19 8086 CPU STB OE T OE 73LS373 OCTAL LATCH 8286 Transceiver ÑÒA CHÆ DÖÕ LIEÄU BHE OD RAM ROM PERIPHERAL Wait State Genarator RDY CLK READY RESET Hình 1.3: Moâ phoûng keát noái heä thoáng vi xöû lyù 8086 - ÔÛ hai cheá ñoä neâu treân toâi thöïc hieän chæ nghieân cöùu cheá ñoä minimum. 3). Giaûn ñoà thôøi gian cuûa chu kyø bus: Moät chu kyø bus T1 T2 T3 T4 A16 ¸ A19 BHE A0 ¸ A15 D0 ¸D15 Döõ lieäu vaøo “Noåi” “Noåi” Chu kyø ñoïc Chu kyø ghi A0 ¸A15 D0 ¸ D15 CLK ALE M/IO Ñòa chæ/traïng thaùi AD0 ¸ AD15 RD DT/R DEN AD0 ¸ AD15 WR DT/R DEN Hình 1.4: Giaûn ñoà thôøi gian ñoïc vaø ghi cuûa mP8086 a). Giaûi thích giaûn ñoà thôøi gian ñoïc vaø ghi: + ÔÛ chu kyø T1: Trong chu kyø naøy ñòa chæ cuûa boä nhôù hay thieát bò ngoaïi vi ñöa ra treân caùc ñöôøng ñòa chæ hoaëc ñòa chæ döõ lieäu vaø ñòa chæ traïng thaùi. Caùc tín hieäu ñieàu khieån ALE, DT/R, M/IO cuõng ñöôïc ñöa ra ñeå giuùp hoaøn taát vieäc giöõ thoâng tin ñòa chæ naøy. + ÔÛ chu kyø T2: Trong chu kyø naøy CPU ñöa ra caùc tín hie._.äu ñieàu khieån RD hoaëc WR, DEN vaø tín hieäu döõ lieäu treân D0 ¸ D15 neáu laø leänh ghi. DEN thöôøng duøng ñeå môû caùc boä ñeäm cuûa bus döõ lieäu neáu chuùng ñöôïc duøng trong heä thoáng. Taïi cuoái chu kyø T2 CPU laáy maãu tín hieäu Ready ñeå xöû lyù trong chu kyø tieáp theo khi noù phaûi laøm vieäc vôùi boä nhôù, thieát bò ngoaïi vi chaäm. + ÔÛ chu kyø T3: Trong chu kyø naøy CPU daøng thôøi gian cho boä nhôù hay thieát bò ngoaïi vi truy caäp döõ lieäu. Neáu laø chu kyø ñoïc döõ lieäu thì taïi cuoái T3 CPU seõ laáy maãu tín hieäu cuûa bus döõ lieäu. Neáu taïi cuoái chu kyø T2 maø CPU phaùt hieän ra tín hieäu Ready = 0 thì CPU töï xen vaøo T3 moät chu kyø T ñeå taïo chu kyø ñôïi Tw = n * T nhaèm keùo daøi thôøi gian ñeå thöïc hieän leänh, taïo ñieàu kieän cho boä nhôù vaø thieát bò ngoaïi vi chaäm coù ñuû thôøi gian hoaøn taát coâng vieäc ñoïc-ghi döõ lieäu. + ÔÛ chu kyø T4: Trong chu kyø naøy caùc tín hieäu treân bus ñöôïc giaûi hoaït (ñöa veà traïng thaùi khoâng tích cöïc) ñeå chuaån bò cho chu kyø bus môùi. Tín hieäu WR trong khi chuyeån traïng thaùi töø ‘0’ leân ‘1’ seõ kích hoïat traïng thaùi ghi vaøo boä nhôù hay thieát bò ngoaïi vi. b). Nguyeân taéc thöïc hieän chöông trình cuûa vi xöû lyù 8086: Caùc chæ thò cuûa 8086 coù ñoä daøi 1 byte ñeán 6 byte, töøng chæ thò ñöôïc khoái thöïc hieän laáy ra töø haøng ñôïi leänh sau ñoù giaûi maõ vaø thöïc hieän. Caùc maõ leänh khaùc tieáp theo laïi ñöôïc naïp vaøo haøng ñôïi leänh bôûi khoái BIU: 2 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 CS DS SS ES 0 1 0 6 IP BB 00 02 6B 07 43 BB 00 02 8B 07 43 03 07 28A00 1 2 3 4 5 28A06 7 Bus Interface unit Boä nhôù + Hình 1.5: Quaù trình naïp haøng ñôïi leänh cuûa BIU c). Truy xuaát boä nhôù vaø söï saép xeáp caùc ñoaïn: 8086 coù theå quaûn lyù ñeán 1MB boä nhôù, ñeå ñaùnh ñòa chæ ñöôïc 1MB (1.048.576 byte) caàn phaûi coù 20 ñöôøng ñòa chæ. BIU xaùc ñònh ñòa chæ vaät lyù naøy baèng caùch coäng ñòa chæ segment vôùi ñòa chæ offset. Tröôùc tieân nhaân ñòa chæ segment vôùi 16 (vì dòch sang traùi 4bit) vaø sau ñoù coäng vôùi offset, toång soá nhaän ñöôïc chính laø ñòa chæ vaät lyù cuûa oâ nhôù vaø seõ ñöôïc ñöa vaøo bus ñòa chæ. 0 0 1 2 0 0 0 0 0 0 8 0 0 0 0 0 AX BX CX DX 0 0 0 0 3 4 0 0 0 0 0 0 0 0 0 0 CS DS SS ES 1280 3400 35280 + 8B 07 34 12 35280 1 EU BIU Boä nhôù Hình 1.6: Truy xuaát döõ lieäu trong boä nhôù Ñòa chæ offset ñöôïc laáy ra töø moät thanh ghi cuûa khoái EU (thanh ghi döõ lieäu, chæ soá hoaëc boä ñeám leänh). Thanh ghi naøy ñöôïc BIU saép xeáp coá ñònh thaønh töøng caëp. Hình treân seõ moâ taû vieäc saép xeáp caùc thanh ghi ñeå xaùc ñònh ñòa chæ vaät lyù. Ñoaïn leänh (CS) Ñoaïn ngaên xeáp (SS) Ñoaïn döõ lieäu (DS) Ñoaïn theâm (ES) Thanh ghi ñoaïn Thanh ghi offset IP SP, BP BX, SI, DI hoaëc haèng soá DI (trong caùc leänh chuoåi) Hình 1.7: Saép xeáp caùc thanh ghi ñoaïn Chöông II KHAÛO SAÙT TOÅNG QUAÙT TAÄP LEÄNH VI XÖÛ LYÙ 8086 ___ oOo ___ I. CAÁU TRUÙC LEÄNH: Vi xöû lyù 8086 coù nhieàu phöông phaùp ñònh ñòa chæ vaø cuõng coù nhieàu khaû naêng keát hôïp caùc phöông phaùp ñoù laïi vôùi nhau. Tuy nhieân, moät leänh chæ caàn 6 byte ñeå maõ hoùa, vaø byte baét ñaàu laø maõ coâng taùc (Operations code), byte tieáp theo chöùa kieåu ñòa chæ vaø tieáp theo ñoù coù theå laø moät hoaëc hai byte duøng ñeå chöùa ñòa chæ. Caùc byte cuoái cuøng goàm moät hoaëc hai chöùa toaùn haïng 8 hoaëc 16 bit. Thöïc teá ñeå bieåu dieån daïng thöùc caùc byte duøng ñeå maõ hoùa leänh Mov. Ta thaáy raèng ñeå maõ hoùa leänh Mov ta phaûi caàn ít nhaát laø hai byte, trong ñoù 6 bit cuûa byte ñaàu duøng ñeå chöùa maõ leänh. Ñoái vôùi leänh Mov ñeå chuyeån döõ lieäu kieåu: Tröø thanh ghi ñoaïn Thanh ghi « thanh ghi Boä nhôù « thanh ghi Thì bit ñaàu (opcode) naøy luoân laø ‘100010’ (ñoái vôùi thanh ghi ñoaïn thì khaùc). Ñoái vôùi bit ‘D’ duøng ñeå chæ höôùng ñi cuûa döõ lieäu. D = 0 thì döõ lieäu ñi töø thanh ghi cho bôûi 3 bit cuûa REG. D = 1 döõ lieäu ñi ñeán thanh ghi cho bôûi 3 bit REG. Ñoái vôùi bit W duøng ñeå chæ raèng moät byte (W = 0) hoaëc moät töø (W = 1) seõ ñöôïc chuyeån. D W Mod DispL DispH Ñòa chæ tröïc tieáp phaàn thaáp Ñòa chæ tröïc tieáp phaàn cao hoaëc Byte1 Byte 2 Byte 3 Byte 4 1 0 0 0 1 0 Opcode REG M/R Disp: displacement (dòch chuyeån) II. CAÙC PHÖÔNG PHAÙP ÑÒNH ÑÒA CHÆ CUÛA VI XÖÛ LYÙ 8086: Phöông phaùp ñònh ñòa chæ (Addressing Mode) laø caùch ñeå CPU tìm thaáy toaùn haïng cho caùc leänh cuûa noù khi hoaït ñoäng. Moät boä vi xöû lyù coù theå coù nhieàu cheá ñoä ñònh ñòa chæ. Caùc cheá ñoä ñònh ñòa chæ naøy ñöôïc xaùc ñònh ngay töø khi cheá taïo ra boä vi xöû lyù vaø sau naøy ngöôøi ta laáy ñoù ñeå laøm chuaån maø khoâng thay ñoåi. Ngoaøi caùc phöông phaùp ñònh ñòa chæ: töùc thôøi, tröïc tieáp, giaùn tieáp gioáng nhö cuûa 8085, vi xöû lyù 8086 coøn coù theâm caùc caùch ñònh ñòa chæ khaùc vaø ñöôïc phaân loaïi nhö sau: Ñònh ñòa chæ baèng thanh ghi. Ñònh ñòa chæ töùc thôøi. Ñònh ñòa chæ tröïc tieáp. Ñònh ñòa chæ giaùn tieáp. Ñònh ñòa chæ töông ñoái. Baèng caùch keát hôïp caùc phöông phaùp ñònh ñòa chæ khaùc nhau trong moät chæ thò, coù theå taïo ra nhieàu khaû naêng phöùc taïp ñeå truy xuaát toaùn haïng (operand) caùc thieát bò vaøo – ra chæ ñöôïc truy caäp baèng caùc phöông phaùp tröïc tieáp vaø giaùn tieáp. Thöù töï moâ taû byte cuûa moät word ñöôïc löu trong boä nhôù gioáng nhö qui ñònh cuûa 8085, coù nghóa laø caùc byte thaáp (LSB) ôû ñòa chæ thaáp vaø caùc byte cao (MSB) ñöôïc ñaët ôû ñòa chæ cao hôn keá caän. Trong caùc trình baøy sau ñaây, boä ñeám chöông trình PC (Program Counter) chöùa ñòa chæ offset cuûa chæ thò keá tieáp seõ thöïc hieän, chæ thò naøy ñaõ saün saøng trong haøng ñôïi leänh. Con troû leänh IP troû ñeán ñòa chæ cao hôn, ñoù laø byte tieáp theo seõ ñöôïc BIU nhaäp vaøo haøng ñôïi leänh. 1). Caùc phöông phaùp ñònh ñòa chæ thoâng duïng: 1.1) Ñònh ñòa chæ töùc thôøi: Trong phöông phaùp naøy toaùn haïng nguoàn chính laø döõ lieäu caàn xöû lyù cuûa chæ thò. Mov Ax, 1200 Boä nhôù CPU Thí duï: Mov ax, 1200 AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI B8 00 12 CS DS SS ES 2300 B8 00 12 O D I T S Z A P C O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 0103 PC Sau Tröôùc 1200 2300 2300 0100 0103 Hình 2.1 :Phöông phaùp ñònh ñòa chæ töùc thôøi 1.2). Phöông phaùp ñònh ñòa chæ tröïc tieáp: Trong chæ thò bao goàm ñòa chæ offset cuûa toaùn haïng, ñòa chæ ñoaïn ñöôïc quy ñònh laø noäi dung cuûa thanh ghi DS. Thí duï: Mov ax, [0230] AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI B8 00 12 CS DS SS ES 2300 B8 00 12 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 1003 PC Sau Tröôùc CPU Boä nhôù 1200 2300 2300 0100 0103 Hình 2.2: Phöông phaùp ñònh ñòa chæ tröïc tieáp 2780 2780 00 12 00 12 2080 2080 Mov ax, [0230] 1.3). Ñònh ñòa chæ giaùn tieáp: Trong phöông phaùp truy xuaát giaùn tieáp caùc coång luoân luoân taùc ñoäng ñeán thanh ghi DX, noäi dung cuûa DX laø ñòa chæ 16 bit cuûa coång. Soá löôïng coång laø 64B. Boä nhôù CPU Thí duï: IN AL, DX Hình 2.3:Phöông phaùp ñònh ñòa chæ giaùn tieáp AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI EC CS DS SS ES 2300 EC O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 0101 PC Sau Tröôùc 1200 2300 2300 0100 0101 0260 1C 260 I/O 1C 260 I/O 1.4). Ñònh ñòa chæ töông ñoái: Trong phöông phaùp ñònh ñòa chæ töông ñoái, thanh ghi BX hoaëc BP chöùa ñòa chæ cô sôû, caùc ñòa chæ naøy laø offset cuûa toaùn haïng. Ñòa chæ töông ñoái coù theå ñöôïc duøng chung vôùi ñòa chæ tröïc tieáp hoaëc giaùn tieáp. Hình 2.4: Phöông phaùp ñònh ñòa chæ töông ñoái AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI 8B 07 CS DS SS ES 2300 8B 07 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 1002 PC Sau Tröôùc CPU Boä nhôù 1200 2300 2300 0100 0103 2780 2780 00 12 00 12 2080 2080 0280 0280 Thí duï: Mov AX, [BX] 2). Khaûo saùt toång quaùt taäp leänh 8086: Taäp leänh cuûa 8086 goàm 9 nhoùm leänh: Nhoùm leänh truyeàn soá lieäu. Nhoùm leänh soá hoïc. Nhoùm leänh thao taùc chuoåi. Nhoùm leänh logic. Nhoùm leänh xöû lyù bit. Nhoùm leänh ñieàu khieån chöông trình. Nhoùm leänh ngoân ngöõ baäc cao. Nhoùm leänh ôû cheá ñoä baûo veä. Nhoùm leänh ñieàu khieån caùc boä vi xöû lyù. Qua nhöõng nhoùm leänh giôùi thieäu treân nhoùm thöïc hieän ñeà taøi chæ khaûo saùt nhöõng nhoùm leänh thoâng duïng nhaèm phuïc vuï cho vieäc laäp trình baèng ngoân ngöõ maùy. 2.1). Nhoùm leänh truyeàn soá lieäu: Caùc leänh truyeàn döõ lieäu seõ sao cheùp döõ lieäu giöõa thanh ghi vôùi thanh ghi, vôùi boä nhôù hoaëc vôùi khoái vaøo-ra. Chuùng coù theå söû duïng nhieàu caùch ñònh ñòa chæ khaùc nhau. Trong caùch vieát leänh döôùi daïng gôïi nhôù: toaùn haïng ñaàu tieân laø thanh ghi ñích hoaëc ñòa chæ ñích vaø tieáp sau daáu phaåy laø thanh ghi nguoàn hoaëc ñòa chæ nguoàn. Khaùc vôùi 8085, trong 8086 taát caû caùc leänh truyeàn döõ lieäu ñeàu duøng leänh “Mov”. ¨ Truyeàn töø thanh ghi vaøo thanh ghi: Mov (Reg1), (Reg2) Noäi dung (Reg2) ñöôïc sao cheùp vaøo (Reg1). Thí duï: Mov AL, BL Sao cheùp noäi dung BL vaøo thanh ghi AL. ¨ Truyeàn töø thanh ghi vaøo boä nhôù: Mov (Mem), (Reg) Ñoái vôùi leänh byte, noäi dung cuûa thanh ghi ñöôïc ñöa vaøo ñòa chæ cuûa oâ nhôù. Ñoái vôùi leänh word thì noäi dung cuûa thanh ghi ñöôïc ñöa vaøo hai oâ nhôù coù ñòa chæ laàn löôïc laø (Mem) vaø (Mem + 1). Thí duï: Mov [1200], BL Sao cheùp noäi dung cuûa thanh ghi BL vaøo oâ nhôù coù ñòa chæ töông ñoái laø 1200. ¨ Truyeàn töø oâ nhôù vaøo thanh ghi: Mov (Reg), (Mem) Ñoái vôùi leänh byte, noäi dung oâ nhôù ñöôïc cheùp vaøo thanh ghi. Ñoái vôùi leänh word, noäi dung cuûa 2 oâ nhôù (Mem) vaø (Mem + 1) ñöôïc cheùp vaøo thanh ghi. Thí duï: Mov BL, [1500] Sao cheùp noäi dung oâ nhôù taïi ñòa chæ 1500 vaøo thanh ghi BL. Mov BX, [1500] Sao cheùp noäi dung hai oâ nhôù taïi ñòa chæ 1500 vaø 1501 vaøo thanh ghi BX (oâ 1500 vaøo BL vaø oâ 1501 vaøo BH) Chuù yù: neáu söû duïng AL hoaëc AX trong caùc leänh truyeàn töø thanh ghi vaøo oâ nhôù vaø ngöôïc laïi seõ nhaän ñöôïc maõ coâng taùc ngaén hôn khi söû duïng caùc thanh ghi khaùc. ¨ Truyeàn töùc thôøi vaøo thanh ghi: Mov (Reg), (Data) Trong leänh naøy, döõ lieäu ñöôïc truyeàn töùc thôøi vaøo thanh ghi. Thí duï: Mov BL, 20 Giaù trò 20 ñöôïc ñöa vaøo thanh ghi BL. ¨ Truyeàn töùc thôøi vaøo boä nhôù: Mov (Mem), (Data) Trong leänh byte döõ lieäu ñöôïc truyeàn töùc thôøi vaøo oâ nhôù coù ñòa chæ (Mem). Trong leänh word döõ lieäu ñöôïc truyeàn töùc thôøi vaøo 2 oâ nhôù coù ñòa chæ (Mem) vaø (Mem + 1). Thí duï: Mov [1200], 50 Giaù trò 50 ñöôïc ñöa vaøo oâ nhôù coù ñòa chæ 1200. Mov Word PTR [1200], 50 Giaù trò Word 0050 ñöôïc ñöa vaøo 2 oâ nhôù baét ñaàu taïi ñòa chæ 1200, 50 (LSB) vaøo ñòa chæ 1200, 00 (MSB) vaøo ñòa chæ 1201. Truy xuaát tröïc tieáp coång: IN (Reg), (Port) Ñoïc noäi dung cuûa coång vaøo thanh ghi. thanh ghi söû duïng laø AL (daïng byte) vaø AX (daïng Word), ñòa chæ coång laø moät soá 8 bit. OUT (Reg), (Port) Xuaát noäi dung cuûa thanh ghi ra coång. Truy xuaát giaùn tieáp coång: IN (Reg), DX Ñoïc noäi dung cuûa coång coù ñòa chæ chöùa trong DX vaøo thanh ghi. Thanh ghi söû duïng laø AL hoaëc AX, ñòa chæ coång laø soá 16 bit. OUT DX, (Reg) Gôûi noäi dung thanh ghi ra coång coù ñòa chæ chöùa trong DX 2.2). Nhoùm leänh soá hoïc: Bao goàm caùc pheùp tính cô baûn (coäng, tröø, nhaân vaø chia) vaø pheùp so saùnh, toaùn haïng coù theå laø döõ lieäu 8 bit hoaëc 16 bit, keát quaû coù theå laø 8 bit, 16 bit hoaëc 32 bit. Caùc toaùn haïng ñöôïc chöùa trong thanh ghi boä nhôù töùc thôøi. Tuøy theo thao taùc, keát quaû coù theå ñöôïc chöùa trong 1 hoaëc 2 thanh ghi trong boä nhôù. · Pheùp coäng: Vi xöû lyù 8086 thöïc hieän pheùp coäng coù löu yù soá nhôù hoaëc khoâng löu yù soá nhôù 8 bit hoaëc 16 bit. + Soá haïng ñaàu tieân ñöôïc chöùa trong caùc thanh ghi döõ lieäu (AX, BX, CX, DX, AH, AL, BH …), trong moät thanh ghi chæ soá hoaëc moät oâ nhôù. Soá haïng thöù hai coù theå laø töùc thôøi trong thanh ghi hoaëc trong boä nhôù. Hai soá haïng khoâng theå cuøng ôû trong boä nhôù, keát quaû pheùp coäng ñöôïc chöùa trong toaùn haïng thöù nhaát. Sau ñaây laø baûng lieät keâ leänh coäng döôùi daïng gôïi nhôù: Coäng khoâng löu yù soá nhôù Coäng coù löu yù soá nhôù Thí duï ADD (accu), (data) ADD (mem), (data) ADD (reg), (data) ADD (reg1), (reg2) ADD (reg), (mem) ADD (mem), (reg) ADC (accu), (data) ADC (mem), (data) ADC (reg), (data) ADC (reg1), (reg2) ADC (reg), (mem) ADC (mem), (reg) ADD AX, 1250 ADD Byte PTR [0900],50 ADD BL, 50 ADC AL, AH ADD CX, [0800] ADC [0600], DL · Pheùp tröø: 8086 coù theå thöïc hieän pheùp tröø vôùi 8 bit hoaëc 16 bit, leänh SBB coù löu yù soá thieáu vaø leänh SUB khoâng löu yù soá thieáu. Sau ñaây laø baûng lieät keâ leänh tröø döôùi daïng gôïi nhôù: Tröø coù soá thieáu Tröø khoâng coù soá thieáu Thí duï SUB (accu), (data) SUB (mem), (data) SUB (reg), (data) SUB (reg1), (reg2) SUB (reg), (mem) SUB (mem), (reg) SBB (accu), (data) SBB (mem), (data) SBB (reg), (data) SBB (reg1), (reg2) SBB (reg), (mem) SBB (mem), (reg) SUB AX, 1230 SBB Byte PTR [5000], 90 SUB BL, 50 SBB AL, DL SUB CX, [1230] SBB [0300], DL · Pheùp so saùnh AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI 39 08 CS DS SS ES 39 08 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 0102 PC Sau Tröôùc CPU Boä nhôù 0123 2300 2300 0100 0102 0246 0 1 0 1 1 1 Trong pheùp so saùnh hai toaùn haïng caàn so saùnh ñöôïc tröø vôùi nhau nhöng noäi dung cuûa caùc thanh ghi vaø oâ nhôù khoâng bò thay ñoåi, keát quûa so saùnh chæ aûnh höôûng ñeán thanh ghi côø seõ ñöôïc minh hoïa ôû hình sau: Hình 2.5: Phöông phaùp ñònh ñòa chæ töông ñoái Nhoùm leänh logic: AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI 8B 07 CS DS SS ES 2300 23 07 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 0102 PC Sau Tröôùc CPU Boä nhôù 0811 2300 2300 0100 0102 2780 2780 39 1A 39 1A 2080 0280 0280 0280 8086 thöïc hieän ñöôïc caùc pheùp tính logic : AND ,OR , EXOR, vaø pheùp ñaûo NOT. Caùc ñòa chæ gioáng nhö pheùp coäng: 2780 0815 2780 0 0 0 0 1 0 Hình 2.6: Phöông phaùp ñònh ñòa chæ töông ñoái Caùc daïng gôïi nhôù cuûa pheùp Logic: Daïng gôïi nhôù cuûa pheùp AND: AND (mem), (reg) AND (reg), (mem) AND (reg1), (reg2) AND (mem), (data) AND (reg), (data) AND (accu), (data) Daïng gôïi nhôù cuûa pheùp OR OR ( mem), (reg) OR (reg), (mem) OR ( reg1), (reg2) OR (mem), (data) OR (reg), (data) OR (accu), (data) Daïng gôïi nhôù cuûa pheùp NOT NOT (reg) NOT (mem) Daïng gôïi nhôù cuûa pheùp EXOR XOR (mem), (reg) XOR (reg), (mem) XOR (reg1), (reg2) XOR (mem), (data) XOR (reg), (data) XOR (accu), (data) Nhoùm leänh quay: 8086 coù caùc leänh quay, dòch döõ lieäu 8 bit vaø 16 bit, coù theå dòch nhieàu bit baèng moät leänh trong tröôøng soá laàn dòch chöùa trong CL. Thao taùc quay coù theå quay qua Carry hoaëc khoâng. Daïng gôïi nhôù cuûa pheùp quay khoâng qua Carry: + Quay phaûi: ROL (mem), (count) ROL (reg), (count) + Quay traùi: ROR (mem), (count) ROR (reg), (count) Nhoùm leänh nhaûy coù ñieàu kieän: Caùc leänh nhaûy coù ñieàu kieän cuûa 8086 luoân luoân daøi hai byte vaø chæ thöïc hieän caùc böôùc nhaûy baèng (Short Jmp). Byte thöù nhaát laø maõ coâng taùc, Byte thöù hai laø khoaûng caùch nhaûy döôùi daïng soá buø hai, coù toång coäng 31 ñieàu kieän nhaûy. Caáu taïo toång quaùt moät leänh nhaûy coù ñieàu kieän ñöôïc trình baøy nhö sau: Hình 2.7: Phöông phaùp ñònh ñòa chæ töùc thôøi AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI 72 03 CS DS SS ES 2300 B8 00 12 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 0105 PC Sau Tröôùc CPU Boä nhôù 2300 2300 0100 0105 Daïng gôïi nhôù cuûa leänh nhaûy coù ñieàu kieän: JC (CF=1) JNC (CF=0) JZ (ZF=1) JNZ (Z=0 ) JE (ZF=1) JNE (ZF=0) Leänh goïi chöông trình phuï: Chöông trình phuï ñöôïc goïi baèng leänh Call vaø chaám döùt baèng leänh Ret. Vi xöû lyù 8086 chæ coù caùc leänh goïi khoâng ñieàu kieän ñöôïc trình baøy döôùi daïng gôïi nhôù nhö sau: Daïng gôïi nhôù Thí duï CALL (addr) CALL [(addr)] CALL BX CALL Seg : Offset CALL 0200 CALL [0200] CALL 2350 : 0200 Caùc leänh Call ñöôïc phaân loaïi döïa theo vò trí cuûa chöông trình phuï trong boä nhôù goàm hai loaïi: Chöông trình phuï naèm trong ñoaïn maõ hieän haønh. Chöông trình phuï naèm ngoaøi ñoaïn maõ hieän haønh. Trong tröôøng hôïp chöông trình phuï naèm trong ñoaïn maõ hieän haønh thì ñòa chæ ñoïan trong thanh ghi CS khoâng thay ñoåi, thanh ghi traïng thaùi vaø con troû leänh seõ ñöôïc löu vaøo ngaên xeáp. Sau ñoù ñòa chæ cuûa chöông trình phuï seõ ñöôïc naïp vaøo con troû leänh khoái BIU xoùa noäi dung cuûa caùc haøng ñôïi leänh vaø thay vaøo ñoù noäi dung cuûa oâ nhôù ñöôïc chæ ñònh bôûi leänh Call. Trong tröôøng hôïp chöông trình phuï naèm ngoaøi ñoaïn maõ hieän haønh, thanh ghi traïng thaùi vaø ñòa chæ seg:offset seõ ñöôïc caát vaøo ngaên xeáp Phaàn 2 THIEÁT KEÁ PHAÀN CÖÙNG KIT 8086 Chöông I: CAÙC LINH KIEÄN BAÙN DAÃN COÙ LIEÂN QUAN oOo Trong thieát keá toâi ñaõ phaûi tính toaùn löïa choïn qua caùc coâng ñoïan: Linh kieän phaûi coù saün treân thò tröôøng. Linh kieän phaûi phuø hôïp vôùi heä thoáng. Heä thoáng ñôn giaûn tieát kieäm. Keát noái sao cho phaàn meàm ñôn giaûn nhaát, maø phaàn cöùng khoâng quùa phöùc taïp, coàng keành. IC 8086 ña hôïp caùc ñöôøng ñòa chæ vaø döõ lieäu töø AD0 – AD15 vôùi nhau, neân muoán söû duïng ñöôïc phaûi keát hôïp vôùi IC giaûi ña hôïp caùc ñöôøng ñòa chæ vaø döõ lieäu rieâng bieät. I . IC choát 74LS373: 1). Toång quaùt: Trong thieát keá toâi choïn IC choát 74LS373 laøm nhieäm vuï taùch rieâng töøng ñöôøng ñòa chæ vaø döõ lieäu, ñaây laø IC choát 8 bit vôùi 8 traïng thaùi ngoõ ra theo Bus, nhöõng öùng duïng cuûa heä thoáng ñöôïc toå chöùc FLIP-FLOP (F-F) cho döõ lieäu qua. Ngoõ cho pheùp choát (LE) ôû möùc cao khi LE laø thaáp döõ lieäu ñöôïc choát, döõ lieäu xuaát treân Bus khi ngoõ ra cho pheùp OE laø thaáp. Khi OE cao thì Bus ngoõ ra seõ ôû traïng thaùi cao . IC 74LS373 laø IC choát toác ñoä cao, coâng suaát thaáp, 8D FF vôùi ñaëc ñieåm nhöõng ngoõ vaøo D cho moãi FF vaø ba traïng thaùi ngoõ ra cuûa nhöõng Bus öùng duïng ñaõ ñònh höôùng. Xung Clock ñeäm vaøo ngoõ ra OE laø chung cho taát caû caùc FF. 2). Sô ñoà chaân 74LS373: D0 – D7 : Data input LE : Cho pheùp OE : Cho pheùp xuaát O0 – O7 : Ngoõ ra Baûng söï thaät: LE (G) OE (OC) Dn On H H L L L L L H H L X X H L Q0 Z Thoâng soá ngöôõng: Kyù hieäu Thoâng soá Min Type Max Ñôn vò Vcc TA IOH IOL Nguoàn cung caáp Nhieät ñoä hoaït ñoäng Doøng ra cao. Doøng ra thaáp. 4,75 0 5 25 5,25 70 -2,6 24 V oC mA mA 3). Sô ñoà moâ phoûng keát noái 74LS373 vôùi 8086: 74LS373 74LS373 74LS373 8086 A15 – A0 Hình II.2: Sô ñoà moâ phoûng keát noái 74LS373 vôùi 8086 II. IC ÑEÄM 74LS244: Ñeå naâng cao khaû naêng taûi cuûa caùc bus, ñeå ñaûm nhaän vieäc nuoâi caùc maïch beân ngoaøi, caùc tín hieäu ra cuûa CPU caàn phaûi ñöôïc khueách ñaïi thoâng qua caùc maïch ñeäm moät chieàu, hai chieàu vôùi caùc ñaàu ra thöôøng hay ñaàu ra ba traïng thaùi ñoù laø IC 74LS244 IC 74LS244 laø moät vi maïch coù 8 boä ñeäm vaø boä laùi ñöôøng ñöôïc thieát keá nhö nhöõng boä laùi ñòa chæ nhôù. 1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11 1G 1A1 2Y1 1A2 2Y3 1A3 2Y2 1A4 2Y1 GND Vcc 2G 1Y1 2A4 1Y2 2A3 1Y3 2A2 1Y4 2A1 74LS244 Hình II.3: Sô ñoà chaân 74LS244 Sô ñoà chaân 74LS244: Baûng söï thaät: H: möùc ñieän theá cao L: möùc ñieän theá thaáp X: khoâng quan taâm Z: toång trôû cao INPUT OUTPUT 1G 2G D L L H L H X L H Z Thoâng soá ngöôõng: Kyù hieäu Thoâng soá Min Type Max Ñôn vò Vcc Nguoàn cung caáp 4,45 5,0 5,25 V TA Nhieät ñoä hoaït ñoäng 0 2,5 70 oC IOH Doøng ra cao -1,5 mA IOL Doøng ra thaáp 24 mA III. MAÏCH TAÏO XUNG NHÒP 8284: Cho duø laøm vieäc ôû cheá ñoä naøo ñi nöûa CPU 8086 luoân caàn xung nhòp ñeå hoaït ñoäng, maïch taïo xung nhòp 8284 seõ ñaûm nhaän vieäc taïo xung nhòp clock cho CPU 8086. Maïch taïo xung nhòp khoâng nhöõng cung caáp xung clock vôùi taàn soá thích hôïp cho toaøn boä maø noù coøn coù aûnh höôûng tôùi vieäc ñoàng boä tín hieäu Reset vaø tín hieäu Ready cuûa CPU. 1). Sô ñoà chaân 8284: 1 2 3 4 5 6 7 8 9 18 17 16 15 14 13 12 11 10 CSYNC PCLK AEN1 RDY1 READY RDY2 AEN2 CKL GND Vcc X1 X2 ASYNC EFI F/C OSC RES RESET 8284 Hình II.4: Sô ñoà chaân 8284 2). Chöùc naêng caùc chaân 8284: ¨ AEN1, AEN2: tín hieäu cho pheùp choïn ñaàu vaøo töông öùng RDY1, RDY2 laøm tín hieäu baùo traïng thaùi cuûa boä nhôù vaø thieát bò ngoaïi vi. ¨ RDY1, RDY2: cuøng vôùi AEN1, AEN2 duøng gaây ra caùc chu kyø ñôïi ôû CPU. ¨ ASYNC: choïn ñoàng boä hai taàng hay ñoàng boä moät taàng cho tín hieäu RDY1, RDY2. Trong cheá ñoàng boä moät taàng (ASYNC = 1) tín hieäu RDY coù aûnh höôûng ñeán tín hieäu Ready ñeán taän söôøn xuoáng cuûa xung ñoàng hoà tieáp theo. Coøn trong cheá ñoä ñoàng boä hai taàng (ASYNC = 0) tín hieäu RDY chæ coù aûnh höôûng tôùi tín hieäu Ready khi coù söôøn xuoáng cuûa xung ñoàng hoà tieáp theo. ¨ Ready: noái ñeán ñaàu vaøo Ready cuûa CPU. Tín hieäu naøy ñöôïc ñoàng boä vôùi caùc tín hieäu RDY1 vaø RDY2. ¨ X1, X2: noái vôùi hai chaân cuûa thaïch anh taïo dao ñoäng chuaån vôùi taàn soá fx, thaïch anh naøy laø boä phaän cuûa moät maïch dao ñoäng beân trong 8284 coù nhieäm vuï taïo xung chuaån duøng laøm tín hieäu ñoàng hoà cho toaøn heä thoáng. ¨ F/C: duøng ñeå choïn nguoàn tín hieäu chuaån cho 8284, khi chaân naøy ôû möùc cao thì xung ñoàng hoà beân ngoaøi seõ ñöôïc duøng laøm xung nhòp cho 8284, ngöôïc laïi thì xung ñoàng hoà cuûa maïch dao ñoäng beân trong duøng thaïch anh seõ ñöôïc choïn laøm xung nhòp. ¨ EFI: loái vaøo cho xung töø boä dao ñoäng ngoaøi. ¨ CLK: xung nhòp vôùi ñoä roãng 77% noái ñeán chaân CLK cuûa CPU 8086. ¨ PCLK: xung nhòp vôùi ñoä roãng 50% daøng cho thieát bò ngoaïi vi. ¨ OSC xung nhòp ñaõ ñöôïc khueách ñaïi coù taàn soá baèng cuûa boä dao ñoäng. ¨ RES chaân khôûi ñoäng, noái vôùi maïch RC ñeå 8284 coù theå töï khôûi ñoäng khi baät nguoàn. ¨ Reset: noái vaøo Reset cuûa 8086 vaø laø tín hieäu khôûi ñoäng laïi cho toaøn boä heä thoáng. +5V CLK CLK 8086 RESET RESET F/C CSYNC X1 X2 RES K Khôûi ñoäng heä thoáng 8284 Hình II.5: Sô ñoà caùc ñöôøng tín hieäu chính cuûa 8284 ¨ CSYNC: loái vaøo cho xung ñoàng boä chung khi trong heä thoáng coù caùc 8284 duøng dao ñoäng ngoaøi taïi chaân EFI. Khi duøng maïch dao ñoäng trong thì phaûi noái mass chaân naøy. Hình treân bieåu dieãn caùc ñöôøng noái tín hieäu chính cuûa 8284. Maïch 8284 nhaän xung khôûi ñoäng töø beân ngoaøi thoâng qua maïch RC, khi baét ñaàu baät ñieän hoaëc xung khôûi ñoäng laïi khi baám coâng taéc K töø xung naøy 8284 coù nhieäm vuï ñöa ra xung khôûi ñoäng ñoàng boä cho CPU cuøng vôùi taát caû caùc thaønh phaàn khaùc cuûa heä thoáng. IV. TOÅNG QUAN VEÀ BOÄ NHÔÙ: Tröôùc khi noùi veà keát noái boä nhôù vôùi vi xöû lyù 8086 nhoùm thöïc hieän noùi qua veà boä nhôù baùn daãn thöôøng duøng ñeå keát noái vôùi vi xöû lyù. Bao goàm: Boä nhôù coá ñònh ROM (Read Only Memory – Boä nhôù chæ ñoïc), thoâng tin trong boä nhôù seõ khoâng maát ñi khi maïch bò maát ñieän nguoàn cung caáp. Boä nhôù baùn coá ñònh EPROM (Erasable Programnable ROM) laø boä nhôù ROM coù theå laäp trình ñöôïc baèng xung ñieän vaø xoùa ñöôïc baèng tia cöïc tím. Boä nhôù khoâng coá ñònh RAM (Random Access Memory – Boä nhôù truy caäp ngaãu nhieân). Trong noäi dung ñeà taøi nhoùm thöïc hieän duøng SRAM (Static RAM – RAM tónh, trong ñoù moãi phaàn töû nhôù laø moät maïch laät hai traïng thaùi oån ñònh) vaø DRAM (Dynamic RAM – RAM ñoäng, trong ñoù moãi phaàn töû nhôù laø moät tuï ñieän raát nhoû ñöôïc cheá taïo baèng coâng ngheä MOS) ñeå keát noái vôùi vi xöû lyù. Moãi boä nhôù thöôøng ñöôïc cheá taïo neân töø nhieàu vi maïch nhôù. Moät vi maïch nhôù thöôøng coù caáu truùc tieâu bieåu nhö sau: Tín hieäu döõ lieäu Tín hieäu ñòa chæ A0 A1 A2 . . . Am WE D0 D1 D2 . . . Dn CS OE Chaân choïn RD Hình II.6: Sô ñoà moät vi maïch nhôù WR: Write – ghi WE: Write Enable-cho pheùp ñoïc. OE: Output Enable-ñaàu vaøo ñieàu khieån. CS: Chip Select- chaân choïn. RD: Read – ñoïc. Theo sô ñoà treân ta thaáy moät vi maïch nhôù coù caùc nhoùm tín hieäu sau: Nhoùm tín hieäu ñòa chæ: · Caùc tín hieäu ñòa chæ coù taùc duïng choïn ra moät oâ nhôù (moät töø nhôù) cuï theå ñeå ghi/ñoïc. Caùc oâ nhôù coù ñoä daøi khaùc nhau tuøy theo nhaø saûn xuaát: 1, 4, 8… bit. Soá ñöôøng tín hieäu ñòa chæ coù lieân quan ñeán dung löôïng cuûa maïch nhôù. Vôùi moät maïch nhôù coù n bit ñòa chæ thì dung löôïng cuûa maïch nhôù ñoù laø 2n töø nhôù. · Thí duï: vôùi boä nhôù 8 bit ta coù n = 8 neân dung löôïng boä nhôù laø 256 byte (28=256 byte), 16 bit neân n = 16 ta coù dung löôïng boä nhôù laø 65536 byte… Nhoùm tín hieäu döõ lieäu: Caùc tín hieäu döõ lieäu thöôøng laø ñaàu ra ñoái vôùi maïch ROM hoaëc ñaàu vaøo/ra döõ lieäu chung ñoái vôùi RAM. Cuøng toàn taïi maïch nhôù RAM vôùi ñaàu ra vaø ñaàu vaøo döõ lieäu rieâng bieät, ñoái vôùi RAM loaïi naøy khi duøng trong maïch bus döõ lieäu ngöôøi söû duïng phaûi noái hai ñaàu ñoù laïi. Caùc maïch nhôù thöôøng coù ñaàu ra döõ lieäu kieåu ba traïng thaùi, soá ñöôøng döõ lieäu quyeát ñònh ñoä daøi töø nhôù cuûa maïch nhôù. Nhoùm tín hieäu choïn vi maïch: Caùc tín hieäu choïn laø CS (Chip Select) hoaëc CE (Chip Enable) thöôøng ñöôïc duøng ñeå choïn vi maïch nhôù cuï theå ñeå ghi/ñoïc. Tín hieäu choïn ôû caùc maïch RAM thöôøng laø CS, coøn ôû caùc maïch ROM thöôøng laø CE. Caùc tín hieäu choïn thöôøng noái vôùi ñaàu ra cuûa boä giaõi maõ ñòa chæ. Khi moät maïch nhôù khoâng ñöôïc choïn thì bus döõ lieäu cuûa noù bò treo. Nhoùm tín hieäu ñieàu khieån: Tín hieäu ñieàu khieån caàn coù trong taát caû caùc maïch nhôù. Caùc maïch ROM thöôøng coù moät ñaàu vaøo ñieàu khieån OE (Output Enable) ñeå cho pheùp döõ lieäu ñöôïc xuaát ra bus. Moät maïch nhôù khoâng ñöôïc môû bôûi OE thì bus döõ lieäu cuûa noù bò treo. Moät maïch RAM neáu chæ coù moät tín hieäu ñieàu khieån thì thöôøng ñoù laø R/W ñeå ñieàu khieån quaù trình ghi ñoïc. Neáu maïch nhôù RAM coù hai tín hieäu ñieàu khieån thì thöôøng laø WE (Write Enable) ñeå ñieàu khieån ghi vaø OE ñeå ñieàu khieån ñoïc. Hai tín hieäu naøy phaûi ngöôïc pha nhau ñeå ñieàu khieån vieäc ñoïc vaø ghi cuûa maïch nhôù. Moät thoâng soá ñaëc tröng khaùc cuûa boä nhôù laø thôøi gian truy xuaát tac. Noùi chung, noù ñöôïc ñònh nghóa nhö laø thôøi gian keå töø coù xung ñòa chæ treân bus ñòa chæ cho ñeán khi coù döõ lieäu ra oån dònh treân bus döõ lieäu. Thôøi gian truy xuaát cuûa boä nhôù phuï thuoäc raát nhieàu vaøo coâng ngheä cheá taïo cuûa noù. Caùc boä nhôù laøm baèng coâng ngheä löôõng cöïc coù thôøi gian truy xuaát nhoû (10 ¸ 30 ns) coøn boä nhôù laøm baèng coâng ngheä MOS coù thôøi gian truy xuaát lôùn hôn nhieàu ( > 150 ns). Boä nhôù ñöôïc söû duïng trong vieäc keát noái kit 8086 laø EPROM 2764: 1). EPROM 2764: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 10 19 18 17 16 15 Vpp A12 A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 GND Vcc PCM NC A8 A9 A11 OE A10 CE D7 D6 D5 D4 D3 2764 Hình II.7: Sô ñoà chaân 2764 Khi ñoïc EPROM coù caùc ñaëc tính sau: CE [20] Vi (low) OE [22] Vi (low) PGM [27] Vcc (high) Vpp [1] Vcc Vcc [28] Vcc A0 ® A15 Address D0 ® D7 Data Caùc cheá ñoä hoaït ñoäng cuûa EPROM 2764: Traïng thaùi CE OE PGM Vpp Out Ñoïc Chôø Laäp trình Kieãm tra Caám laäp trình Vl Vh Vl Vl Vh Vl X X Vl X Vh X Vl Vh X Vcc Vcc 21V 21V 21V Out Taét In Out Taét D8 ¸ D15 D0 ¸ D7 OE CS OE CS CS töø boä giaõi maõ MEMR Hình II.8: Moâ hình keát noái boä giaûi maõ vôùi boä nhôù 2). RAM 62256: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 10 19 18 17 16 15 A14 A12 A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 GND Vcc WE A13 A8 A9 A11 OE A10 CE D7 D6 D5 D4 D3 62256 Hình II.9: Sô ñoà chaân 62256 Sô ñoà chaân: Baûng traïng thaùi laøm vieäc: MODE WR OE OUTPUT Not select X H X X High Z Not select X X L X High Z Output disable H L H H High Z Read H L H L Dout Write L L H H Dout Sô ñoà keát noái boä nhôù RAM vôùi vi xöû lyù: D8 ¸ D15 D0 ¸ D7 WE OE WE OE MEMW MEMR BHE CS1 A0 CS0 ODD EVEN Hình II.10: Sô ñoà keát noái RAM vôùi vi xöû lyù Thöïc hieän vieäc giaûi maõ baèng caùc vi maïch giaõi maõ: 74LS138, 74LS139, 74LS145, 74LS154. Khi muoán coù nhieàu ñaàu ra choïn töø boä giaûi maõ maø vaãn duøng caùc maïch logic ñôn giaûn thì vieäc thieát keá trôû neân raát coàng keành do soá löôïng caùc maïch taêng leân. Trong tröôøng hôïp nhö vaäy ta thöôøng söû duïng caùc maïch giaûi maõ coù saün. Moät trong caùc maïch giaõi maõ coù saün hay söû duïng laø caùc IC 74138, 74139, 74154, 74145… 1 2 3 4 5 6 7 8 16 15 14 13 12 11 10 9 A B C E1 E2 E3 O7 GND Vcc O0 O1 O2 O3 O4 O5 O6 74LS138 Hình II.11: Sô ñoà chaân 74LS138 V. IC GIAÛI MAÕ 74LS138: 1). Sô ñoà chaân 74LS138: Baûng traïng thaùi : INPUT OUTPUT ENABLE SELECT G1 G2* C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 X H L X H L H L H L H L H L H L H L H L X X X X X X L L L L L H L H L L H H H L L H L H H H L H H H H H H H H H H H H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L G2 = G2A + G2B 2). Maïch giaõi maõ cuï theå nhö sau: Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A B C Bus A Bus B ._.ä thoáng ña xöû lyù. Neáu coù leänh LOCK ñaët tröôùc moät leänh naøo ñoù, thì khi chaïy leänh naøy, 8086 ñöa ra tín hieäu khoùa bus. Tín hieäu naøy seõ noái ra thieát bò ñieàu khieån bus ngoaøi ñeå caám caùc boä xöû lyù khaùc trong heä thoáng söû duïng bus. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. Leänh XCHG caàn 2 laàn thaâm nhaäp bus ñeå hoaøn taát vieäc thöïc hieän leänh, do ñoù caàn ñaët sau LOCK ñeå traùnh nguy cô tranh chaáp bus coù theå xaûy ra trong heä thoáng ña xöû lyù. v LODS/LODSB/LODSW – Load String Byte/Word into AL/AX (Naïp vaøo AL/AX 1 phaàn töû cuûa chuoãi byte/töø) Cuù phaùp: LODS Chuoãi goác LODSB LODSW Moâ taû : AL ¬ Phaàn töû hieän thôøi, SI ¬ SI + tuøy theo DF, neáu laø chuoãi byte AX ¬ Phaàn töû hieän thôøi, SI ¬ SI + 2 tuøy theo DF, neáu laø chuoãi töø (Phaàn töû hieän thôøi cuûa chuoãi laø do DS : SI hieän thôøi chæ ra) Leänh LODS naïp vaøo AL/AX 1 bytes/ töø (1 phaàn töû cuûa chuoãi ñaõ ñöôïc ñònh nghóa tröôùc laø chuoãi goàm caùc byte hoaëc töø do SI chæ ra trong ñoaïn DS, sau ñoù SI töï ñoäng taêng/giaûm ñeå chæ vaøo phaàn töû tieáp theo tuøy theo côø höôùng. Khi phaûi dòch leänh LODS Chuoãigoác, chöông trình dòch duøng teân Chuoãigoác ñeå xaùc ñònh xem luùc khai baùo thì Chuoãigoác coù caùc phaàn töû laø byte hay töø. Muoân chæ roõ cho chöông trình dòch hôïp ngöõ raèng ta laøm vieäc vôùi chuoãi caùc byte hoaëc caùc töø, ta cuõng coù theå duøng leänh LODSB hoaëc LODSW. Leänh naøy khoâng taùc ñoäng ñeán caùc côø v LOOP – Jump to Speciafied Label if CX # O after Autodecrement (laëp laïi ñoaïn chöông trình do nhaõn chæ ra cho ñeán khi CX = 0. Cuù phaùp: LOOP NHAN Moâ taû: Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûng töø nhaõn NHAN ñeán heát leänh LOOP NHAN) cho ñeán khi soá laàn laëp CX = 0. Ñieàu naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi ñöa soá laàn laëp mong muoán vaøo thanh ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP NHAN thì ñoàng thôøi CX töï ñoäng giaûm ñi 1 (töùc laø CX ¬ CX – 1) Nhaõn NHAN phaûi naèm caùch xa dòch ñi moät khoaûng) – 128 byte so vôùi leänh tieáp theo sau leänh LOOP. Leänh naøy khoâng taùc ñoäng ñeán caùc côø v LOOPE/LOOPZ – Loop White CX # O and ZF = 1 (Laëp laïi ñoaïn chöông trình do nhaõn chæ ra cho ñeán khi CX=0 hoaëc ZF = 0) Cuù phaùp: LOOPE NHAN LOOPZ NHAN Moâ taû: Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûn töø nhaõn NHAN ñeán heát leänh LOOPE NHAN hoaëc LOOPZ NHAN) cho ñeán khi soá laàn laëp CX = 0, hoaëc ZF = 0. Ñieàu naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi ñöa soá laàn laëp mong muoán vaøo thanh ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP NHAN thì ñoàng thôøi CX töï ñoäng giaûm ñi 1 (töùc laø CX ¬ CX – 1) Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) –128 byte so vôùi leänh tieáp theo sau leänh LOOPE / LOOPZ. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v LOOPNE/LOOPNZ – Loop While CX # O and ZF = 0 (Laëp laïi ñoaïn chöông trình do nhaõn chæ ra cho ñeán khi CX = 0 hoaëc ZF = 1) Cuù phaùp: LOOPE NHAN LOOPZ NHAN Moâ taû: Leänh naøy duøng ñeå laäp laïi ñoaïn chöông trình (goàm caùc leänh naèm trong khoaûng töø nhaõn NHAN ñeán heát leänh LOOPNE NHAN hoaëc LOOPNZ NHAN) cho ñeán khi soá laàn laëp CX = 0 hoaëc ZF = 1. Ñieàu naøy coù nghóa laø tröôùc khi vaøo voøng laëp ta phaûi ñöa soá laàn laëp mong muoán vaøo thanh ghi CX vaø sau moãi laàn thöïc hieän leänh LOOP NHAN thì ñoàng thôøi CX töï ñoäng giaûm ñi 1 (töùc laø CX ¬ CX – 1) Nhaõn NHAN phaûi naèm caùch xa (dòch ñi moät khoaûng) – 128 byte so vôùi leänh tieáp theo sau leänh LOOPNE/LOOPNZ. Leänh naøy khoâng taùc ñoäng ñeán caùc côø LOOPNZ – Xem LOOPNE LOOPZ – Xem LOOPE v MOV – Move a Word or Byte (Chuyeån moät töø hay moät byte) Cuù phaùp: MOV Ñích, Goác Moâ taû : Ñích ¬ Goác Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù hoaëc 2 thanh ghi ñoaïn. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v MOVS/MOVSB/MOVSW – Move String Byte or String Word (Chuyeån 1 phaàn töû cuûa 1 chuoãi sang moät chuoãi khaùc) Cuù phaùp: MOVS Chuoãiñích, Chuoãigoác MOVSB MOVSW Moâ taû : Phaàn töû Chuoãiñích ¬ Phaàn töû Chuoãigoác Leänh naøy duøng chuyeån töøng byte hay töøng töø cuûa chuoãi goác sang chuoãi ñích trong ñoù: + DS:SI laø ñòa chæ cuûa phaàn töû trong chuoãi goác. + ES:DI laø ñòa chæ cuûa phaàn töû trong chuoãi ñích. + Sau moãi laàn chuyeån SI ¬ SI + 1. DI ¬ DI + 1 hoaëc SI ¬ SI + 2. DI ¬ DI + 2 moät caùch töï ñoäng tuøy thuoäc côø höôùng DF laø 0/1 vaø chuoãi laø chuoãi byte hoaëc chuoãi töø. Coù 2 caùch ñeå chæ ra chuoãi byte hoaëc chuoãi töø. Caùch ñaàu tieân laø ta khai roõ baèng teân chuoãi nguoàn vaø chuoãi ñích laø loaïi gì ngay töø ñaàu chöông trình. Caùch thöù hai laø ta theâm vaøo leänh MOVS ñuoâi “B” cho chuoãi byte hoaëc ñuoâi “W” cho chuoãi töø (xem moâ taû caùch söû duïng taïi leänh COMPS). Leänh MOVS/MOVSB/MOVSW coù theå duøng keøm vôùi leän REPE hoaëc REPNE ñeå so saùnh taát caû caùc phaàn töû trong chuoãi. v MUL – Multiply Unsigned Byte or Word (Nhaõn soá khoâng daáu) Cuù phaùp: MUL Goác Trong ñoù toaùn haïng Goác laø soá nhaân vaø coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Moâ taû: Tuøy theo ñoä daøi cuûa toaùn haïng Goác ta coù 2 tröôøng hôïp toå chöùc pheùp nhaân, choã ñeå ngaàm ñònh cho soá bò nhaân vaø keát quaû. + Neáu Goác laø soá 8 bit : AL x Goác soá bò nhaân phaûi laø soá 8 bit ñeå trong AL. sau khi nhaân : AX ¬ tích + Neáu Goác laø soá 16 bit : AX x Goác soá bò nhaân phaûi laø soá 16 bit ñeå trong AX. sau khi nhaân : DXAX ¬ tích Neáu byte cao (hoaëc 16 bit cao) cuûa 16 (hoaëc 32) bit keát quaû chöùa 0 thì CF = OF = 0. Nhö vaäy caùc côø CF vaø OF seõ baùo cho ta bieát coù theå boû ñi bao nhieâu soá 0 trong keát quaû. Caäp nhaät : CF, OF Khoâng xaùc ñònh : AF, PF, SF, ZP v NEG – Negate a Operand (Form its 2’s Complement) (Laáy buø hai cuûa moät toaùn haïng, ñaûo daáu cuûa moät toaùn haïng). Cuù phaùp: NEG Ñích Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Moâ taû : Ñích ¬ 0 - (Ñích) Ñieàu naøy hoaøn toaøn töông ñöông vôùi vieäc laáy (Ñích + 1) laøm keát quaû. Neáu ta laáy buø hai cuûa –128 hoaëc –32768 thì ta seõ ñöôïc keát quaû khoâng ñoåi nhöng côø OF = 1 ñeå baùo laø keát quaû bò traøn (vì soá döông lôùn nhaát bieåu dieãn ñöôïc laø +127 vaø +32767) Caäp nhaät : AF, CF, OF, PF, SF, ZF. v NOP – No Operation (CPU khoâng laøm gì) Leänh naøy khoâng thöïc hieän moät coâng vieäc gì ngoaïi tröø vieäc taêng noäi dung cuûa IP vaø tieâu toán 3 chu kyø ñoàng hoà. Noù thöôøng ñöôïc duøng ñeå tính thôøi gian trong caùc voøng treã hoaëc ñeå chieám choã cho caùc leänh caàn theâm vaøo chöông trình sau naøy maø khoâng laøm aûnh höôûng toái ñoä daøi cuûa chöông trình. Leänh naøy khoâng taùc ñoäng ñeán caùc côø v NOT – Invert Each Bit of an Operand (From its 1’s Complement) (Laáy buø cuûa moät toaùn haïng, ñaûo bit cuûa moät toaùn haïng) Cuù phaùp: NOT Ñích Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Moâ taû: Ñích ¬ (Ñích) Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v OR – Logically Or Corresponding Bits of Two Operands (Hoaëc 2 toaùn haïng) Cuù phaùp: OR Ñích, Goác. Moâ taû: Ñích ß Ñích v Goác Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi chöùa döõ lieäu cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Pheùp OR thöôøng duøng ñeå laäp moät vaøi bit naøo ñoù cuûa toaùn haïng baèng caùch coäng logic toaùn haïng ñoù vôùi toaùn haïng töùc thôøi coù caùc bit 1 taïi caùc vò trí töông öùng caàn thieát laäp. Xoaù: CF, OF Caäp nhaät : PF, SF, ZP, PF chæ coù nghóa khi toaùn haïng laø 8 bit Khoâng xaùc ñònh : AF v OUT – Output a Byte or a Word to a Port (Ñöa döõ lieäu töø Acc ra coång) Cuù phaùp: OUT Port, Acc Moâ taû: Acc ® {Port} Trong ñoù {Port} laø döõ lieäu cuûa coång coù ñòa chæ laø Port. Port laø ñòa chæ 8 bit cuûa coång, noù coù theå coù caùc giaù trò trong khoaûng 00H…FFH. Nhö vaäy ta coù theå coù caùc khaû naêng sau: + Neáu Acc laø AL thì döõ lieäu 8 bit ñöôïc ñöa ra coång Port + Neáu Acc laø AX thì döõ lieäu 16 bit ñöôïc ñöa ra coång Port vaø coång Port + 1 Coù moät caùch khaùc ñeå bieåu dieãn ñòa chæ coång laø thoâng qua thanh ghi DX. Khi duøng thanh ghi DX ñeå chöùa ñòa chæ coång ta seõ coù khaû naêng ñòa chæ hoùa coång meàm deûo hôn. Luùc naøy ñòa chæ coång naèm trong daûi 0000H…FFFFH vaø ta phaûi vieát leänh theo daïng: OUT DX, Acc Trong ñoù DX phaûi ñöôïc gaùn töø tröôùc giaù trò öùng vôùi ñòa chæ coång. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v POP – Pop Word from Top of Stack (Laáy laïi 1 töø vaøo thanh ghi töø ñænh ngaên xeáp) Cuù phaùp: POP Ñích Moâ taû : Ñích ¬ {SP} SP ¬ SP + 2 Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau: coù theå laø caùc thanh ghi ña naêng, thanh ghi ñoaïn (nhöng khoâng ñöôïc laø thanh ghi ñoaïn maõ CS) hoaëc oâ nhôù. Döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi. Giaù trò cuûa SS khoâng thay ñoåi. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v POPF – Pop Word from Top of Stack to Flag Register (Laáy 1 töø töø ñænh ngaên xeáp roài ñöa vaøo thanh côø) Cuù phaùp: POPF Moâ taû : RF ¬ {SP} SP ¬ SP + 2 Sau leänh naøy döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi, SS khoâng thay ñoåi. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v PUSH – Push Word on the Stack (Caát 1 töø vaøo ngaên xeáp) Cuù phaùp: Push Goác Moâ taû : SP ¬ SP – 2 Goác ® {SP} Trong ñoù toaùn haïng goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau: coù theå laø caùc thanh ghi ña naêng, thanh ghi ñoaïn hoaëc oâ nhôù. Leänh naøy thöôøng duøng vôùi leänh POP nhö laø moät caëp ñoái ngaãu ñeå xöû lyù caùc döõ lieäu vaø traïng thaùi cuûa chöông trình chính (CTC) khi vaøo/ra chöông trình con (ctc). Leänh naøy khoâng taùc ñoäng ñeán caùc côø v PUSHF – Push Flag Register to the Stack (caát thanh côø vaøo ngaên xeáp) Cuù phaùp: PUSHF Moâ taû : SP ¬ SP – 2 RF ® {SP} Döõ lieäu ñeå taïi ngaên xeáp khoâng thay ñoåi. SS khoâng thay ñoåi. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v RCL – rotate though CF to the Left (Quay traùi thoâng qua côø nhôù) Cuù phaùp: RCL Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Leänh naøy duøng ñeå quay toaùn haïng sang traùi thoâng qua côø CF. CL phaûi ñöôïc chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc tieáp : RCL Ñích, 1 (Töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu soá laàn quay laø 9 thì keát quaû khoâng thay ñoåi vì caëp CF vaø toaùn haïng quay troøn ñuùng moät voøng. Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng Sau leänh RCL côø CF mang giaù trò cuõ cuûa MSB bò thay ñoåi so vôùi tröôùc khi quay. Côø OF seõ khoâng ñöôïc xaùc ñònh nhieàu laàn quay. v RCR – Rotate though CF to the Right (Quay phaûi thoâng qua côø nhôù) Cuù phaùp: RCR Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau Leänh naøy duøng ñeå quay toaùn haïng sang phaûi thoâng qua côø CF, CL phaûi ñöôïc chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc tieáp : RCR Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu soá laàn quay laø 9 thì keát quaû khoâng thay ñoåi vì caëp CF vaø toaùn haïng thanh ghi quay troøn ñuùng moät voøng Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng Sau leänh RCR côø CF mang giaù trò cuõ cuûa LSB, coøn côø OF ¬ 1 neáu sau khi quay 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi quay. Côø OF seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn quay v REP – Repeat String Instruction until CX = 0 (laëp laïi leänh vieát sau ñoù cho tôùi khi CX = 0) Ñaây laø tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu maø ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX. Khi caùc leänh naøy ñöôïc laëp laïi thì CX töï ñoäng giaûm ñi 1 sau moãi laàn laëp. Quaù trình seõ keát thuùc khi CX = 0. v REPE/REPZ – Repeat String Instruction until CX = 0 or ZF = 0 (Laëp laïi leänh vieát sau ñoù cho tôùi CX=0 hoaëc ZF=0 Ñaây laø caùc tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu maø ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX. Khi caùc leänh naøy ñöôïc laëp laïi thì CX töï ñoäng giaûm ñi 1 sau moãi laàn laëp. Khi duøng REPE/REPZ vôùi leänh so saùnh chuoãi, quaù trình seõ keát thuùc khi ñeám heát (CX = 0) hoaëc sau khi 2 phaàn töû so saùnh khaùc nhau (ZF = 0). v REPNE/REPNZ – Repeat String Instruction until CX = 0 or ZF = 1 (laëp laïi leänh vieát sau ñoù cho tôùi khi CX = 0 hoaëc ZF = 1) Ñaây laø caùc tieáp ñaàu ngöõ duøng ñeå vieát tröôùc caùc leänh thao taùc vôùi chuoãi döõ lieäu maø ta muoán laëp laïi moät soá laàn. Soá laàn laëp phaûi ñeå tröôùc trong CX töï ñoäng giaûm ñi sau moãi laàn laëp. Khi duøng REPNE/REPNZ vôùi leänh queùt chuoãi, quaù trình seõ keát thuùc khi ñeám heát (CX=0) hoaëc khi Acc baèng phaàn töû cuûa chuoãi (ZF = 1). v RET – Return from Procedure to Calling Program (Trôû veà chöông trình chính töø chöông trình con) Cuù phaùp: RET hoaïc RET n, n laø soá nguyeân döông Moâ taû : RET ñöôïc ñaët taïi cuoái ctc ñeå boä vi xöû lyù laáy laïi ñòa chæ trôû veà (ñòa chæ cuûa leänh tieáp theo leänh goïi ôû chöông trìng chính), noù ñöôïc töï ñoäng caát ôû ngaên xeáp khi coù leänh goïi chöông trình con. Tuøy theo loaïi leänh goïi gaàn hay xa ta cuõng seõ coù caùc xöû lyù khaùc nhau ñoái vôùi ñòa chæ trôû veà (xem theâm phaàn moâ taû chung vôùi leänh CALL) Ñaëc bieät neáu ta duøng RET n thì sau khi ñaõ laáy laïi ñöôïc ñòa chæ trôû veà (chæ coù IP hoaëc coù caû CS vaø IP) thì SP ¬ SP + n (duøng ñeå nhaûy qua maø khoâng laáy laïi caùc thoâng soá khaùc cuûa chöông trình coøn laïi trong ngaên xeáp) Leänh naøy khoâng taùc ñoäng ñeán caùc côø v ROL – Rotate All Bits to the Left (Quay voøng sang traùi) Cuù phaùp: ROL Ñích, CL Trong ñoù toaùn haïng ñich coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Leänh naøy duøng ñeå quay voøng toaùn haïng sang traùi, MSB seõ ñöôïc ñöa qua côø CF vaø LSB, CL phaûi ñöôïc chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc tieáp : ROL Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu CL = 8 vaø toaùn haïng ñeå quay laø 8 bit thì keát quaû khoâng bò thay ñoåi vì toaùn haïng quay troøn ñuùng moät voøng, coøn neáu: CL = 4 thì 2 nibble cuûa toaùn haïng bò ñoåi choã. Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng Sau leänh ROL côø CF mang giaù trò cuõ cuûa MSB, coøn côø OF ¬ 1 neáu sau khi quay 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi quay. Côø OF seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn quay. Leänh naøy thöôøng duøng ñeå taïo côø CF töø giaù trò cuûa MSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän. v ROR – Rotate All Bits to the Right (Quay voøng sang phaûi) Cuù phaùp: ROR Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Leänh naøy duøng ñeå quay voøng toaùn haïng sang phaûi, LSB seõ ñöôïc ñöa qua côø CF, MSB. CL phaûi ñöôïc chöùa saün soá laàn quay mong muoán. Trong tröôøng hôïp quay moät laàn coù theå vieát tröïc tieáp : ROR Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 801286, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn quay lôùn nhaát laø 32). Ta nhaän thaáy neáu CL = 8 thì keát quaû khoâng bò thay ñoåi vì toaùn haïng quay troøn ñuùng moät voøng, coøn neáu CL = 4 thì 2 nibble cuûa noù bò ñoåi choã. Taùc ñoäng vaøo côø : Chæ coù CF vaø OF bò aûnh höôûng Sau leänh ROR côø CF mang giaù trò cuõ LSB, coøn côø OF ¬ 1 neáu sau khi quay 1 laàn maø bòt MSB bò thay ñoåi so vôùi tröôùc khi quay. Côø OF seõ khoâng ñöôïc xaùc ñònh nhieàu laàn quay. Leänh naøy thöôøng duøng ñeå taïo côø CF töø giaù trò cuûa LSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän. v SAHF – Store AH Register into Low byte of Flag Register (caát thanh ghi AH vaøo byte thaáp cuûa thanh côø) Moâ taû : FRL ¬ AH Duøng leänh naøy phoái hôïp vôùi leänh POP AX thì coù theå moâ phoûng leänh POP PSW cuûa boä vi xöû lyù 8085 treân 8086 Caäp nhaät : AF, CF, OF, PF, SF, ZP v SAL – Shift Arithmetically Left (Dòch traùi soá hoïc) / SHL – Shift (Logically) Left (Dòch traùi logic) Cuù phaùp: SAL Ñích, CL SHL Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau Hai leänh naøy coù cuøng taùc duïng dòch traùi soá hoïc toaùn haïng (coøn goïi laø dòch traùi logic ñeå coù leänh ñoái nhau vôùi leänh dòch phaûi logic seõ noùi ôû phaàn sau). Moãi laàn dòch MSB seõ ñöôïc ñöa qua côø CF vaø 0 ñöa vaøo LSB. Thao taùc kieåu naøy ñöôïc goïi laø dòch logic. CL phaûi ñöôïc chöùa saün soá laàn dòch mong muoán. Trong tröôøng hôïp dòch moät laàn coù theå vieát tröïc tieáp : SAL Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn dòch lôùn nhaát laø 32). Ta nhaän thaáy moät laàn dòch traùi kieåu naøy töông ñöông vôùi moät laàn laøm pheùp nhaân vôùi 2 cuûa soá khoâng daáu. Vì vaäy ta coù theå laøm pheùp nhaân moät soá vôùi soá nhaân khoâng daáu töông ñöông vôùi 2 baèng caùc dòch traùi soá hoïc soá bò nhaân i laàn. Chính vì vaäy thao taùc naøy coøn ñöôïc goïi laø dòch traùi soá hoïc. Trong chöøng möïc nhaát ñònh leänh naøy chaïy nhanh hôn MUL Taùc ñoäng vaøo côø : Sau leänh SAL hoaëc SHL côø CF mang giaù trò cuõ cuûa MSB (vì vaäy leänh naøy coøn duøng ñeå taïo côø CF töø giaù trò cuûa MSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän), coøn côø OF ¬ 1 neáu sau khi dòch 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi dòch. Côø OF seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn dòch. Caäp nhaät : SF, ZF, PF, PF chæ coù yù nghóa khi keát quaû laø 8 bit. Khoâng xaùc ñònh : AF v SAR – Shift Arithmetically Right (Dòch phaûi soá hoïc) Cuù phaùp: SAR Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Leänh naøy coù taùc duïng dòch phaûi soá hoïc toaùn haïng. Sau moãi laàn dòch MSB seõ ñöôïc giöõ laïi (neáu ta hieåu ñaây laø bit daáu cuûa moät soá coù daáu thì daáu luoân khoâng ñoåi sau pheùp dòch phaûi soá hoïc) coøn LSB ñöôïc ñöa vaøo côø CF. CL phaûi ñöôïc chöùa saün soá laàn dòch mong muoán. Trong tröôøng hôïp dòch moät laàn coù theå vieát tröïc tieáp: SAR Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn dòch lôùn nhaát laø 32). Ta nhaän thaáy moät laàn dòch phaûi kieåu naøy töông ñöông vôùi moät laàn laøm pheùp chia cho 2 cuûa soá coù daáu. Vì vaäy coù theå laøm pheùp chia soá coù daáu cho moät soá khoâng daáu töông ñöông vôùi 2 baèng caùch dòch phaûi soá hoïc soá bò chia i laàn. Chính vì vaäy thao taùc naøy coøn ñöôïc goïi laø dòch phaûi soá hoïc. Taùc ñoäng vaøo côø: Sau leänh SAR côø CF mang giaù trò cuõ cuûa MSB (vì vaäy leänh naøy coøn duøng ñeå taïo côø CF töø giaù trò cuûa MSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän), coøn côø OF ¬ 1 neáu sau khi dòch 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi dòch. Côø OF seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn dòch. Caäp nhaät: SF, ZF, PF, PF chæ coù yù nghóa khi keát quaû laø 8 bit. Khoâng xaùc ñònh: AF. v SBB – Substract with Borrow (Tröø coù möôïn) Cuù phaùp: SBB Ñích, Goác Moâ taû : Ñích ¬ Ñích – Goác – CF Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi chöùa cuøng moät loaïi döõ lieäu vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Caäp nhaät : AF, CF, OF, PF, SF, ZP (AP vaø PF chæ lieân quan ñeán 8 bit thaáp) v SCAS/SCASB/SCASW – Scan a String Byte or a String Word (Queùt chuoãi byte hay chuoãi töø) Cuù phaùp: SCAS chuoãi ñích SCASB SCASW Moâ taû: AL – Phaàn töû chuoãi ñích, DI ¬ DI + tuøy theo DF, neáu laø chuoãi byte AX – Phaàn töû chuoãi ñích, DI ¬ DI + 2 tuøy theo DF, neáu laø chuoãi töø (Phaàn töû chuoãi ñích laø do ES:DI hieän thôøi chæ ra) Leänh SCAS so saùnh AL hoaëc Ax vôùi töøng byte hay töøng töø cuûa xaâu ñích chæ ñeå taïo caùc côø, khoâng löu keát quaû so saùnh, caùc toaùn haïng khoâng bò thay ñoåi. Sau ñoù DI töï ñoäng taêng/giaûm ñeå chæ vaøo phaàn töû tieáp theo tuøy theo côø höôùng. Khi dòch leänh SCAS Chuoãiñích, chöông trình dòch duøng teân Chuoãiñích ñeå xaùc ñònh xem luùc khai baùo thì Chuoãiñích coù caùc phaàn töû laø byte hay töø. Muoán chæ roõ cho chöông trình dòch hôïp ngöõ raèng ta laøm vieäc vôùi chuoãi byte (chöùc caùc byte) hoaëc chuoãi töø (chöùa caùc töø), ta cuõng coù theå duøng leänh SCASB hoaëc SCASW. Caùc leänh naøy coøn thöôøng duøng keøm vôùi REPNE/REPNZ ñeå laëp laïi vieäc queùt moät soá laàn hoaëc queùt cho tôùi khi tìm ñöôïc maãu caàn tìm. Caäp nhaät : AF, CF, OF, PF, SF, ZP v SHL – Xem SAL v SHR – Shift (Logically) Right (Dòch phaûi logic) Cuù phaùp: SHR Ñích, CL Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Leänh naøy duøng ñeå dòch phaûi logic toaùn haïng. Sau moãi laàn dòch LSB seõ ñöôïc ñöa qua côø CF vaø 0 ñöa vaøo MSB. Thao taùc kieåu naøy ñöôïc goïi laø dòch logic. CL phaûi ñöôïc chöùa saün soá laàn dòch mong muoán. Trong tröôøng hôïp dòch moät laàn coù theå vieát tröïc tieáp: SHR Ñích, 1 (töø caùc boä vi xöû lyù theá heä sau nhö 80186, 80286 ... thì coù theå vieát tröïc tieáp kieåu naøy vôùi soá laàn dòch lôùn nhaát laø 32). Ta nhaän thaáy moät laàn dòch traùi kieåu naøy töông ñöông vôùi moät laàn laøm pheùp chia cho 2 cuûa soá khoâng daáu. Vì vaäy coù theå laøm pheùp chia soá khoâng daáu cho moät soá khoâng daáu töông ñöông vôùi 2 baèng caùch dòch phaûi logic soá bò chia i laàn. Taùc ñoäng vaøo côø : Sau leänh SHR côø CF mang giaù trò cuõ cuûa LSB (vì vaäy leänh naøy coøn duøng ñeå taïo côø CF töø giaù trò cuûa LSB laøm ñieàu kieän cho caùc leänh nhaûy coù ñieàu kieän), coøn côø OF ¬ 1 neáu sau khi dòch 1 laàn maø bit MSB bò thay ñoåi so vôùi tröôùc khi dòch. Côø OF seõ khoâng ñöôïc xaùc ñònh sau nhieàu laàn dòch Caäp nhaät: SF, ZF, PF, PF chæ coù yù nghóa khi keát quaû laø 8 bit. Khoâng xaùc ñònh: AF. v STC – Set the Carry Flag (Laäp côø nhôù) Moâ taû: CF ¬ 1 Khoâng taùc ñoäng ñeán caùc côø khaùc v STD – Set the Direction Flag (Laäp côø höôùng) Moâ taû: DF ¬ 1 Leänh naøy ñònh höôùng thao taùc cho caùc leänh laømvieäc vôùi chuoãi theo chieàu luøi (¬). Caùc thanh ghi SI vaø DI lieân quan seõ ñöôïc töï ñoäng giaûm khi laøm vieäc xong vôùi moät phaàn töû cuûa chuoãi. Khoâng taùc ñoäng ñeán caùc côø khaùc v STI – Set the Interrupt Flag (Laäp côø cho pheùp ngaét) Moâ taû: IF ¬ 1 Leänh naøy laäp côø cho pheùp ngaét ñeå cho pheùp caùc yeâu caàu ngaét taùc ñoäng vaøo chaân INTR ñöôïc CPU nhaän bieát. Khi IF = 1 neáu coù tín hieäu INTR = 1 thì 8086 seõ bò ngaét, noù seõ töï ñoäng caát thanh ghi côø vaø ñòa chæ trôû veà vaøo ngaên xeáp roài chuyeån sang chaïy chöông trình (con) phuïc vuï ngaét CTPVN. Taïi cuoái CTPVN seõ coù leänh trôû veà CTC töø CTPVN (IRET) ñeå 8086 laáy laïi töø ngaên xeáp giaù trò cuûa thanh ghi côø vaø ñòa chæ trôû veà. Khoâng taùc ñoäng ñeán caùc côø khaùc. v STOS/STOSB/STOSW – Store AL/AX in String Byte/Word (caát AL/AX vaøo 1 phaàn töû cuûa chuoãi byte/töø) Cuù phaùp: STOS Chuoãiñích STOSB STOSW Moâ taû : AL ® Phaàn töû hieän thôøi, DI ¬ DI + tuøy theo DF, neáu laø chuoãi byte AX ® Phaàn töû hieän thôøi, DI ¬ DI + 2 tuøy theo DF, neáu laø chuoãi töø (Phaàn töû chuoãi ñích laø do ES:DI hieän thôøi chæ ra) Leänh STOS caát AL/AX vaøo 1 byte/töø (1 phaàn töû cuûa chuoãi ñaõ ñöôïc ñònh nghóa tröôùc laø chuoãi goàm caùc byte hoaëc töø) do DI chæ ra trong ñoaïn ES, sau ñoù DI töï ñoäng taêng/giaûm ñeå chæ vaøo phaàn töû tieáp theo tuøy theo côø höôùng. Khi dòch leänh STOS Chuoãiñính, chöông trình dòch duøng teân Chuoãiñích ñeå xaùc ñònh xem luùc khai baùo thì Chuoãiñích coù caùc phaàn töû laø byte hay töø. Muoán chæ roõ cho chöông trình dòch hôïp ngöõ raèng ta laøm vieäc vôùi chuoãi caùc byte hoaëc caùc töø, ta cuõng coù theå duøng leänh STOSB hoaëc STOSW. Leänh naøy khoâng taùc ñoäng ñeán caùc côø Trong thí duï treân chöông trình dòch hôïp ngöõ seõ duøng teân STR1 ñeå xaùc ñònh kieåu STR1 laø byte hay laø töø roài töï ñoäng caát AL hay AX vaøo chuoãi. v SUB – Substract (Tröø 2 toaùn haïng) Cuù phaùp: SUB Ñích, Goác Moâ taû : Ñích ¬ Ñích – Goác. Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc thanh ghi ñoaïn. Caäp nhaät : AF, CFm OFm PFm SF, ZP (AP vaø PF chæ lieân quan ñeá 8 bit thaáp) v TEST – And Operands to Update Flag (Vaø 2 toaùn haïng ñeå taïo côø) Cuù phaùp: TEST Ñích, Goác. Moâ taû : Ñích ^ Goác Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Sau leänh naøy caùc toaùn haïng khoâng bò thay ñoåi vaø keát quaû khoâng ñöôïc löu giöõ. Caùc côø ñöôïc taïo ra seõ ñöôïc duøng laøm ñieàu kieän cho caùch leänh nhaûy coù ñieàu kieän. Leänh nhaø cuõng coù taùc duïng che nhö moät maët naï. Xoùa: CF, OF Caäp nhaät: PF, SF, ZP, ZP (PF chæ lieân quan ñeán 8 bit thaáp) Khoâng xaùc ñònh: AF v WAIT – Wait for TEST or INTR Signal (Chôø tín hieäu töø chaân TEST hoaëc INTR) Moâ taû: Leänh naøy ñöa vi xöû lyù vaøo traïng thaùi nghæ noù seõ ôû traïng thaùi naøy cho tôùi khi coù tín hieäu ôû möùc thaáp taùc ñoäng vaøo chaân TEST hoaëc khi coù tín hieäu ôû möùc cao taùc ñoäng vaøo chaân INTR. Neáu coù yeâu caàu ngaét vaø yeâu caàu naøy ñöôïc pheùp taùc ñoäng trong khi 8086 ñang ôû traïng thaùi nghæ thì sau khi thöïc hieän chöông trình phuïc vuï ngaét noù laïi quay veà traïng thaùi nghæ. Leänh naøy duøng ñeå ñoàng boä hoaït ñoäng cuûa 8086 vaø caùc boä phaän beân ngoaøi nhö boä ñoàng xöû lyù toaùn hoïc 8087. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. XCHG – Exchange 2 Operands (Traùo noäi dung 2 toaùn haïng) Cuù phaùp: XCHG Ñích, Goác. Moâ taû: Ñích « Goác Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñònh ñòa chæ nhau, nhöng phaûi chöùa döõ lieäu vaø cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Sau leänh XCHG toaùn haïng naøy chöùa noäi dung cuõ cuûa toaùn haïng kia vaø ngöôïc laïi. Leänh naøy khoâng taùc ñoäng ñeán caùc côø. v XLAT – Translate a Byte in AL (Noäi dung cuûa AL theo baûng cho tröôùc) Cuù phaùp: XLAT Moâ taû: AL ¬ {AL + BX} Leänh naøy duøng ñeå ñoåi 8 bit hoaëc ít hôïn töø maõ naøy (goác) sang maõ khaùc (ñích) theo 1 baûng tra cho saün. Tröôùc khi thöïc hieän leänh ñoåi, baûng tra phaûi chöùa caùc maõ ñích vaø BX phaûi chöùa ñòa chæ leäch cuûa baûng naøy trong ñoaïn döõ lieäu, coøn maõ goác (caàn ñoåi) phaûi ñöôïc chöùa trong AL. Khi chaïy leänh XLAT thì pheùp coäng AL + BX ñöôïc thöïc hieän ñeå taïo ra ñòa chæ oâ nhôù trong baûng soá maø noäi dung cuûa noù seõ ñöôïc caát trôû laïi vaøo thanh ghi AL. Leänh naøy khoâng taùc ñoäng ñeán caùc côø v XOR – Exclusive Or Corresponding Bits of Two Operands (Hoaëc loaïi tröø 2 toaùn haïng) Cuù phaùp: XOR Ñích, Goác. Moâ taû : Ñích ¬ Ñích Å Goác Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau, nhöng phaûi chöùa döõ lieäu cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Töø tính chaát cuûa pheùp hoaëc loaïi tröø, ta thaáy neáu toaùn haïng ñích truøng vôùi toaùn haïng goác thì keát quaû baèng 0, do ñoù leänh naøy coøn ñöôïc duøng ñeå xoùa veà 0 moät thanh ghi naøo ñoù vaø keøm theo caùc côø CF vaø OF cuõng bò xoùa. Caäp nhaät: PF, SF, ZP. PF chæ coù nghóa khi toaùn haïng laø 8 bit. Khoâng xaùc ñònh: AF Treân ñaây nhoùm thöïc hieän ñaõ giôùi thieäu qua taát caû caùc leänh coù trong taäp leänh cuûa boä vi xöû lyù 8086, maëc duø trong thöïc teá laäp trình nhieàu khi ta khoâng söû duïng heát ñöôïc taát caû caùc leänh coù trong taäp leänh naøy. Taäp leänh cuûa caùc boä vi xöû lyù cao caáp hôn trong hoï 80x86 ngoaøi nhöõng leänh naøy coøn bao goàm nhieàu leänh khaùc nöõa. Ta coù theå coi ñaây laø moät ví duï veà taäp leänh cuûa moät boä vi xöû lyù duøng ñeå cheá taïo ra maùy tính vôùi taäp leänh ñaày ñuû (Complete Instruction Set Computer, CISC) vôùi ñaëc tröng laø coù raát nhieàu leänh vôùi caùc cheá ñoä ñòa chæ raát ña daïng, caùc leänh coù ñoä daøi khaùc nhau vaø thôøi gian ñeå thöïc hieän cuõng khaùc nhau. Boä vi xöû lyù vì theá thöôøng coù caáu truùc raát phöùc taïp. Theá maø treân thöïc teá, trong caùc chöông trình hôïp ngöõ ñeå giaûi quyeát caùc coâng vieäc cuï theå, thöôøng coù nhieàu leänh ñöôïc duøng vôùi taàn suaát lôùn nhöng cuõng coù nhöõng leänh raát ít khi hoaëc thaäm chí khoâng heà söû duïng. Ñaây cuõng chính laø lyù do ñeå caùc nhaø saûn xuaát cho ra ñôøi caùc boä vi xöû lyù coù caáu truùc caûi tieán theo höôùng ñôn giaûn hoùa vôùi taäp leänh raát hieäu duïng (coù soá leänh ít hôn vôùi cheá ñoä ñòa chæ ñôn giaûn, caùc leänh coù ñoä daøi thoáng nhaát vaø coù thôøi gian thöïc hieän nhö nhau) nhöng laïi coù khaû naêng thöïc hieän leänh nhanh hôn gaáp boäi so vôùi loaïi CISC. Ñoù laø caùc boä vi xöû lyù duøng laøm CPU cho caùc maùy tính vôùi taäp leänh ruùt goïn (Reduced Instruction Set Computer, RISC). ._.

Các file đính kèm theo tài liệu này:

  • docDO4.DOC
Tài liệu liên quan