Bài giảng Vi xử lý và lập trình hợp ngữ

pdf 152 trang ngocly 1280
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý và lập trình hợp ngữ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_vi_xu_ly_va_lap_trinh_hop_ngu.pdf

Nội dung text: Bài giảng Vi xử lý và lập trình hợp ngữ

  1. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ MỤC LỤC Trang Ch−¬ng 1. Giíi thiÖu chung 1.1 Sù ra ®êi vµ ph¸t triÓn cña c¸c bé vi xö lý 4 1.2 S¬ ®å khèi cÊu tróc vµ ho¹t ®éng cña hÖ vi xö lý 4 Ch−¬ng 2. Bé nhí b¸n dÉn 2.1 Ph©n lo¹i bé nhí 6 2.1.1 Bé nhí cè ®Þnh (ROM, PROM) 7 2.1.2 Bé nhí b¸n cè ®Þnh (EPROM, EEPROM, FLASH) 8 2.1.3 Bé nhí ®äc ghi (SRAM, DRAM) 10 2.1.4 Bé nhí ngoµi 10 2.2 Ph©n cÊp bé nhí 10 2.3 CÊu tróc cña m¹ch nhí tÜnh SRAM 2.3.1 Giíi thiÖu c«ng nghÖ 12 2.3.2 CÊu tróc m¹ch nhí SRAM 12 2.3.2.1 Bit nhí 12 2.3.2.2 Thanh ghi 14 2.3.2.3 Bé gi¶i m· 15 2.3.2.4 M¹ch nhí SRAM (C¸c thµnh phÇn, quy tr×nh ®äc ghi, biÓu ®å thêi gian) 18 2.3.3 ThiÕt kÕ thÎ nhí SRAM 19 2.4 CÊu tróc cña m¹ch nhí DRAM 19 Ch−¬ng 3. C¸c bé vi xö lý và vi điều khiển 3.1 Giíi thiÖu bé vi xö lý 8 bit tæng qu¸t 23 3.2 Bé vi xö lý 8 bit (8086/8088) 3.2.1 S¬ ®å khèi bé vi xö lý 8 bit 23 3.2.2 C¸c thanh ghi của 8086/88 24 3.2.3 BiÓu ®å thêi gian cña chu kú ®äc ghi sè liÖu 27 3.2.5 GhÐp nèi c¸c ch©n tÝn hiÖu 8088 30 3.2.6 HÖ lÖnh cña bé vi xö lý 8 bit 31 3.3 Giíi thiÖu c¸c bé vi xö lý tiªn tiÕn dòng 80x86 Thái Nguyên 8-2008 1
  2. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 3.4 Vi ®iÒu khiÓn 8x51/52 80 3.5 Vi ®iÒu khiÓn thÕ hÖ míi AVR 3.5.1. Giíi thiÖu chung vÒ AVR 96 3.5.2. Bus I2C vµ SPI 103 3.5.3. AVR 90S8535 105 3.6 C¸c hÖ thèng trªn mét chip cã kh¶ n¨ng t¸i cÊu h×nh (SoC) 3.6.1. SoC lµ g×? 105 3.6.2. Giíi thiÖu PSoC 108 3.6.3. PSoC CY8C29446 108 Ch−¬ng 4. C¸c bé ®iÒu khiÓn vµ ghÐp nèi d÷ liÖu 4.1. Vµo/ ra sè liÖu ®iÒu khiÓn b»ng ng¾t 4.1.1 Nguyªn lý vµo/ra ®iÒu khiÓn b»ng ng¾t 117 4.1.2 Bé ®iÒu khiÓn ng¾t PIC (8259) 119 4.1.3 Ng¾t trong m¸y tÝnh IBM/PC 126 4.2. Vµo/ra sè liÖu ®iÒu khiÓn b»ng th©m nhËp bé nhí trùc tiÕp DMA 4.2.1 Nguyªn lý vµo/ ra b»ng DMA 127 4.2.2 Bé th©m nhËp bé nhí trùc tiÕp DMAC (8237) 129 4.2.3 Sö dông bé ®iÒu khiÓn DMAC trong hÖ vi xö lý 132 4.3. Bé ®Õm lËp tr×nh ®−îc 4.3.1 S¬ ®å khèi bé ®Õm lËp tr×nh ®−îc (8254) 132 4.3.2 C¸c chÕ ®é lµm viÖc cña bé ®Õm lËp tr×nh 133 4.3.3 Sö dông bé ®Õm trong hÖ vi xö lý 135 4.4. Phèi ghÐp vµo ra nèi tiÕp 4.4.1 Nguyªn lý vµo/ ra nèi tiÕp 136 4.4.2 M¹ch thu ph¸t th«ng tin nèi tiÕp UART 139 4.5. Phèi ghÐp víi thiÕt bÞ vµo/ra qua cæng song song 4.5.1 GhÐp nèi song song ®¬n gi¶n 147 4.5.2 M¹ch phèi ghÐp vµo/ra song song lËp tr×nh ®−îc PPI 8255A 4.5.2.1 C¸c khèi cña PPI 148 4.5.2.2 C¸c tÝn hiÖu cña PPI 148 4.5.2.3 C¸c chÕ ®é lµm viÖc cña PPI 149 4.5.2.5 GhÐp nèi PPI trong hÖ vi xö lý 149 Thái Nguyên 8-2008 2
  3. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ch−¬ng 5 ThiÕt kÕ hÖ thèng vi xö lý 5.1 ThiÕt kÕ phÇn cøng 150 5.2 ThiÕt kÕ phÇn mÒm 150 5.2.1 ROM Mapping 5.2.2 RAM Mapping 5.2.3 ThiÕt kÕ c¸c ch−¬ng tr×nh hÖ thèng 5.2.4 ThiÕt kÕ c¸c ch−¬ng tr×nh øng dông Thái Nguyên 8-2008 3
  4. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ch−¬ng 1. GIỚI THIỆU CHUNG 1.1 Sù ra ®êi vµ ph¸t triÓn cña c¸c bé vi xö lý • Bé vi xö lý lµ 1 thµnh phÇn kh«ng thÓ thiÕu ®−îc trong c¸c hÖ thèng tÝnh to¸n m¸y vi tÝnh. • Sù ph¸t triÓn: − ThÕ hÖ 1 (1971 - 1973): Bé vi xö lý ®Çu tiªn ra ®êi 1971 lµ 4004 s¶n phÈm cña h·ng Intel 4 bit sè liÖu, 12 bit ®Þa chØ. TiÕp theo lµ 4040, 8008 §Æc ®iÓm chung: + Sö dông c«ng nghÖ PMOS ( lç trèng) + Tèc ®é thùc hiÖn lÖnh 10-60µs. Tèc ®é xung ®ång hå 0.1 ®Õn 0.8 MHz + TËp lÖnh ®¬n gi¶n − ThÕ hÖ 2 (1974-1977): ThÕ hÖ c¸c vi xö lý 8 bit nh− 6800, 8080, 8085 cã thÓ qu¶n lý 64KB bé nhí. §Æc ®iÓm: + Sö dông c«ng nghÖ NMOS (Cã mËt ®é phÇn tö trªn mét ®¬n vÞ diÖn tÝch lín h¬n PMOS) + Tèc ®é thùc hiÖn lÖnh 1-8µs. Tèc ®é xung ®ång hå 1-5MHz − ThÕ hÖ 3(1978-1982): Thêi kú c¸c vi xö lý 16 bit 8086/80186/80286 hoÆc 68000. + Cã tËp lÖnh ®a d¹ng h¬n + Kh¶ n¨ng ph©n biÖt bé nhí cao h¬n: 1-16MB bé nhí 64KB thiÕt bÞ ngo¹i vi + S¶n xuÊt b»ng c«ng nghÖ HMOS (HMOS, XMOS, VMOS: c¶i tiÕn cña NMOS) + Tèc ®é 0.1 - 1µs. Xung ®ång hå 5-10MHz − ThÕ hÖ 4(1983 - nay): Thêi kú c¸c bé vi xö lý 32 bit nh− 80386/486/PI,PII,PIII, PIV víi c¸c kü thuËt tiªn tiÕn pipeline, cache, vitual memory, HT TÊt c¶ ®Òu cã bé ®ång xö lý to¸n häc, bé qu¶n lý bé nhí MMU. 1.2 S¬ ®å khèi cÊu tróc vµ ho¹t ®éng cña hÖ vi xö lý − Bé vi xö lý lµ 1 thµnh phÇn kh«ng thÓ thiÕu ®−îc ®Ó x©y dùng c¸c hÖ thèng tÝnh to¸n, m¸y vi tÝnh. Nh−ng bé vi xö lý cßn ph¶i kÕt hîp víi c¸c thµnh phÇn kh¸c ®Ó t¹o nªn hÖ vi xö lý − S¬ ®å d−íi ®©y lµ s¬ ®å tæng qu¸t cña c¸c hÖ vi xö lý kinh ®iÓn ¸p dông cho c¸c hÖ nhá vµ c¸c m¸y tÝnh ®êi ®Çu. C¸c m¸y tÝnh hiÖn nay cã cÊu tróc kh¸c h¬n. Thái Nguyên 8-2008 4
  5. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ In CPU M I/O Out Abus Dbus Cbus • CPU (Central Processing Unit): Bé n·o cña m¸y tÝnh gåm c¸c m¹ch vi ®iÖn tö cã ®é tÝch hîp rÊt cao (hµng triÖu tranzito trong 1 chip). Nã gåm cã c¸c phÇn: + CU (Control Unit): Khèi ®iÒu khiÓn cã chøc n¨ng: ®äc m· lÖnh d−íi d¹ng tËp hîp c¸c bit 0/1 tõ c¸c « nhí trong bé nhí. Gi¶i m· c¸c lÖnh thµnh d·y c¸c xung ®iÒu khiÓn ®Ó ®iÒu khiÓn c¸c khèi kh¸c thùc hiÖn nh− ®iÒu khiÓn ALU, ®iÒu khiÓn ra ngoµi µPC + ALU (Arithmetic Logic Unit): Khèi tÝnh to¸n sè häc vµ logic: Tæ hîp c¸c m¹ch logic ®iÖn tö phøc t¹p cho phÐp thùc hiÖn c¸c thao t¸c trªn c¸c thanh ghi nh− +, -, *, /, AND, OR, NOT + Registers: C¸c thanh ghi − Mét CPU cã thÓ cã nhiÒu thanh ghi: + Thanh ghi con trá lÖnh IP (bé ®Õm ch−¬ng tr×nh) chøa ®Þa chØ cña lÖnh s¾p thùc hiÖn: C¸c ch−¬ng tr×nh m¸y tÝnh lµ tËp hîp cña c¸c lÖnh. CPU sÏ lÊy tõng lÖnh ra ®Ó ch¹y. §Ó ®iÒu khiÓn chÝnh x¸c viÖc thùc hiÖn nµy cÇn cã mét bé ®Õm ch−¬ng tr×nh. + C¸c thanh ghi kh¸c: C¸c thanh ghi ®o¹n, thanh ghi lÖch, thanh ghi con trá vµ chØ sè, thanh ghi cê lµ c¸c thanh ghi ®¶m nhiÖm c¸c chøc n¨ng nhÊt ®Þnh trong ho¹t ®éng cña bé vi xö lý (SÏ nghiªn cøu kü qua VXL 8086/8088) • Bé nhí (Memory): Cã hai lo¹i chÝnh − ROM: Chøa c¸c ch−¬ng tr×nh vµ sè liÖu cè ®Þnh, chóng kh«ng bÞ mÊt khi ng¾t ®iÖn cung cÊp cho vi m¹ch nhí ROM. Ch−¬ng tr×nh khëi ®éng m¸y tÝnh, c¸c ch−¬ng tr×nh vµo ra c¬ së th−êng ®−îc chøa trong ROM. − RAM: Khi ng¾t ®iÖn nguån nu«i vi m¹ch RAM néi dung l−u tr÷ trong nã sÏ bÞ mÊt. RAM l−u gi÷ mét phÇn ch−¬ng tr×nh hÖ thèng, mét sè sè liÖu cña hÖ thèng, c¸c ch−¬ng tr×nh øng dông, c¸c kÕt qu¶ trung gian cña qu¸ tr×nh tÝnh to¸n, xö lý. Thái Nguyên 8-2008 5
  6. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ • ThiÕt bÞ vµo/ra(I/O): §©y lµ khèi t¹o kh¶ n¨ng giao tiÕp gi÷a hÖ vi xö lý vµ bªn ngoµi. Do ®Æc ®iÓm cña c¸c thiÕt bÞ ngoµi vµ hÖ trung t©m (Gåm CPU+Bé nhí) ho¹t ®éng cã sù kh¸c nhau vÒ tèc ®é lµm viÖc, møc vËt lý ®iÖn, ph−¬ng thøc nªn cÇn cã bé phèi ghÐp ®Öm, ®¶m b¶o cho c¸c khèi thiÕt bÞ ngoµi giao tiÕp ®−îc víi hÖ trung t©m. Bé ghÐp gi÷a bus hÖ thèng vµ thiÕt bÞ ngoµi gäi lµ cæng. Mçi cæng cã mét ®Þa chØ x¸c ®Þnh. • HÖ thèng bus: Lµ tËp hîp c¸c ®−êng d©y dÉn ghÐp nèi c¸c ch©n ®Þa chØ, d÷ liÖu, c¸c ch©n tÝn hiÖu ®iÒu khiÓn cña 3 khèi ®· nªu trªn. − Abus: Nèi c¸c ®−êng d©y ®Þa chØ cña CPU víi 2 khèi M vµ I/O. Kh¶ n¨ng ph©n biÖt ®Þa chØ cña CPU phô thuéc sè ch©n ®Þa chØ cña nã. Sè nµy cã thÓ lµ 16, 20, 24, 36 ch©n. ChØ cã CPU míi cã kh¶ n¨ng ph¸t ra tÝn hiÖu ®Þa chØ - Cã mét thiÕt bÞ n÷a cã thÓ ph¸t ra tÝn hiÖu ®Þa chØ lµ DMAC (DMA Controller). − Dbus: Dïng ®Ó vËn chuyÓn d÷ liÖu. §é réng cña nã 8, 16, 32, 64 bit. Dbus cã tÝnh 2 chiÒu. C¸c phÇn tö cã ®Çu ra nèi th¼ng víi bus d÷ liÖu ®Òu ph¶i ®−îc trang bÞ ®Çu ra 3 tr¹ng th¸i ®Ó cã thÓ lµm viÖc b×nh th−êng víi bus nµy. − Cbus: Gåm nhiÒu ®−êng d©y tÝn hiÖu kh¸c nhau. Mçi tÝn hiÖu cã 1 chiÒu x¸c ®Þnh. C¸c tÝn hiÖu trªn Cbus bao gåm c¸c tÝn hiÖu ®iÒu khiÓn tõ CPU nh− ®/k ®äc viÕt, tÝn hiÖu tr¹ng th¸i tõ bé nhí, thiÕt bÞ ngo¹i vi b¸o cho CPU nh− INTR, HOLD • Ho¹t ®éng cña hÖ: Ch−¬ng tr×nh vµ d÷ liÖu ®−îc chøa trong bé nhí ngoµi ®−îc ®−a vµo bé nhí trong (RAM). Sau ®ã ®−îc CPU lÊy dÇn ra ®Ó xö lý. CPU thùc hiÖn: + LÊy lÖnh + Gi¶i m· lÖnh + ®iÒu khiÓn thùc hiÖn lÖnh §ã lµ mét vßng lÆp, trong qu¸ tr×nh thùc hiÖn vßng lÆp ®ã nÕu cã t¸c ®éng ng¾t hoÆc yªu cÇu DMA CPU sÏ ®¸p øng c¸c yªu cÇu nµy sau ®ã l¹i quay trë laÞ chu tr×nh ho¹t ®éng chÝnh. Ch−¬ng 2. BỘ NHỚ BÁN DẪN 2.1 Ph©n lo¹i bé nhí − Bé nhí dïng ®Ó l−u tr÷ lÖnh vµ d÷ liÖu − Bé nhí ®−îc x©y dùng tõ c¸c phÇn tö nhí c¬ b¶n, mçi phÇn tö lµ mét bit th«ng tin. Thái Nguyên 8-2008 6
  7. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Bé nhí Bé nhí b¸n dÉn Ngoµi Cè ®Þnh B¸n cè ®Þnh §äc/Ghi ROM PROM EPROM EEPROM FLASH SRAM DRAM 2.1.1 Bé nhí cè ®Þnh (ROM, PROM) D1 D0 C¸c « nhí ®Þa chØ 0 0 0 1 1 0 1 1 §Çu ra D3 D2 D1 NÕu cã diot: §Çu ra =1. NÕu kh«ng cã diot: §Çu ra = 0 Thái Nguyên 8-2008 7
  8. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ CS=1. §Çu ra khi ®Þa chØ ®óng b»ng 1, ®¶o ®i b»ng 0. §Çu tiªn c¸c cÇu ch× cßn nguyªn. NÕu vÉn cßn cÇu ch×: ®iot th«ng ®Çu ra di = 0 NÕu c¾t cÇu ch×, kh«ng bÞ sôt ¸p ®Çu ra di = 1 2.1.2 Bé nhí b¸n cè ®Þnh (EPROM, EEPROM, FLASH) • EPROM (Erasable Programmable ROM): Cã cÊu t¹o ®Æc biÖt dùa trªn nguyªn t¾c lµm viÖc cña tranzito tr−êng cã cùc ®iÒu khiÓn và thêm cửa nổi. ViÖc n¹p ch−¬ng tr×nh cho EPROM ®−îc thùc hiÖn b»ng ®iÖn. Xo¸ ch−¬ng tr×nh b»ng tia cùc tÝm, do tia cùc tÝm ¶nh h−ëng ®Õn cùc nguån vµ cùc m¸ng. Bộ nhớ EPROM có thể ghi lại được. Ký hiÖu 27xxx hv Sounce Gate Drain Control Gate Floating Gate File oxide File oxide n-Sounce n-Drain H×nh : CÊu tróc cña 1 EPROM Trong « nhí dïng tranzito nµy, cùc cöa ®−îc nèi víi ®−êng tõ, cùc m¸ng nèi víi ®−êng bit vµ cùc nguån nèi víi nguån chuÈn ®−îc coi lµ nguån cho møc logic 1. Kh¸c víi tranzito MOS b×nh th−êng, ë ®©y cã thªm 1 cöa gäi lµ cöa næi; §ã lµ mét vïng vËt liÖu ®−îc thªm vµo gi÷a líp c¸ch ®iÖn cao nh− h×nh trªn. NÕu cöa næi kh«ng cã ®iÖn tÝch th× kh«ng cã ¶nh h−ëng g× tíi cùc cöa ®iÒu khiÓn vµ tranzito ho¹t ®éng b×nh th−êng. Tøc lµ khi d©y tõ ®−îc kÝch ho¹t (cùc cöa cã ®iÖn tÝch d−¬ng) th× Thái Nguyên 8-2008 8
  9. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ tranzito th«ng, cùc m¸ng vµ cùc nguån ®−îc nèi víi nhau qua kªnh dÉn vµ d©y bit cã møc logic 1. NÕu cöa næi cã c¸c ®iÖn tö trong ®ã víi c¸c ®iÖn tÝch ©m, chóng sÏ ng¨n tõ tr−êng ®iÖn ®iÒu khiÓn cña cùc ®iÒu khiÓn vµ dï d©y tõ cã ®−îc kÝch ho¹t th× còng kh«ng thÓ ph¸t ra tr−êng ®ñ m¹nh víi cùc cöa ®iÒu khiÓn ®Ó lµm th«ng tranzito. Lóc nµy ®−êng d©y bit kh«ng ®−îc nèi víi nguån chuÈn vµ « nhí ®−îc coi nh− gi÷ gi¸ trÞ logic 0. ViÖc n¹p c¸c ®iÖn tö vµo cöa næi , tøc lµ t¹o ra c¸c « nhí cã gi¸ trÞ logic 0, ®−îc thùc hiÖn bëi c¸c xung ®iÖn cã ®é dµi cì 50 ms vµ ®é lín +20V khi ®Æt vµo cùc cöa vµ cùc m¸ng. Lóc ®ã c¸c ®iÖn tÝch mang cã n¨ng l−îng lín sÏ ®i qua líp c¸ch ®iÖn gi÷a ®Õ vµ cöa næi. Chóng tÝch tô trong vïng cöa næi vµ ®−îc gi÷ ë ®©y sau khi xung ch−¬ng tr×nh t¾t. §ã lµ do cöa næi ®−îc c¸ch ®iÖn cao víi xung quanh vµ c¸c ®iÖn tö kh«ng cã ®ñ n¨ng l−îng sau khi l¹nh ®i, ®Ó cã thÓ v−ît ra ngoµi líp c¸ch ®iÖn ®ã n÷a. Chóng sÏ ®−îc gi÷ l¹i ë ®©y trong mét thêi gian dµi (kho¶ng 10 n¨m). §Ó xãa th«ng tin, ph¶i chiÕu tia tö ngo¹i vµo chip nhí. Nh÷ng ®iÖn tö ë ®©y ®−îc hÊp thô n¨ng l−¬ng nh¶y lªn møc n¨ng l−îng cao, chóng sÏ rêi cöa næi nh− c¸ch th©m nhËp vµo ®ã. Trong chip EPROM cã mét cöa sæ b»ng th¹ch anh chØ ®Ó cho ¸nh s¸ng tö ngo¹i ®i qua khi cÇn xãa sè liÖu trong bé nhí. • EEPROM (Electric Erasable PROM): Cã cÊu t¹o t−¬ng tù EPROM nh−ng n¹p xo¸ b»ng ®iÖn. Ký hiÖu 28xxx (ví dụ vi mạch EEPROM 2864, 28128). im khác ca EEPROM lµ mét líp kªnh mµng máng «xit gi÷a vïng cöa næi tr¶i xuèng d−íi ®Õ vµ cùc m¸ng gi÷ vai trß quan träng. C¸c líp c¸ch ®iÖn kh«ng thÓ lý t−ëng ®−îc, c¸c líp ®iÖn tÝch mang cã thÓ thÊm qua líp ph©n c¸ch víi mét x¸c suÊt thÊp. X¸c suÊt nµy t¨ng lªn khi bÒ dµy cña líp gi¶m ®i vµ ®iÖn thÕ gi÷a hai cùc ë hai mÆt cña líp c¸ch ®iÖn t¨ng lªn. Muèn phãng c¸c ®iÖn tÝch trong vïng cöa næi, mét ®iÖn thÕ (- 20V) ®−îc ®Æt vµo cùc cöa ®iÒu khiÓn vµ cùc m¸ng. Lóc nµy c¸c ®iÖn tö ©m trong cöa næi ®−îc ch¶y vÒ cùc m¸ng qua kªnh mµng máng «xit vµ sè liÖu l−u gi÷ ®−îc xãa ®i. §iÒu chó ý lµ ph¶i l−u ý lµm sao cho dßng ®iÖn tÝch nµy ch¶y kh«ng qu¸ l©u, v× nÕu kh«ng vïng cöa næi nµy l¹i trë nªn ®iÖn tÝch d−¬ng lµm cho ho¹t ®éng cña trazito kh«ng ®−îc ë tr¹ng th¸i b×nh th−êng(1). C¸c chÝp ROM hiÖn nay cã thêi gian th©m nhËp cì tõ 120-150 ns dµi h¬n nhiÒu thêi gian ®ã trong c¸c chip nhí RAM. • Flash ROM: CÊu t¹o t−¬ng tù EEPROM sö dông víi ®iÖn ¸p thÊp h¬n. Ký hiÖu 29xxx, 39xxx Thái Nguyên 8-2008 9
  10. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 2.1.3 Bé nhí ®äc ghi (SRAM, DRAM) + Bé nhí RAM tÜnh lµ SRAM (Static RAM) th−êng ®−îc x©y dùng trªn c¸c m¹ch ®iÖn tö flip – flop. + Bé nhí RAM ®éng lµ DRAM (Dynamic RAM) ®−îc x©y dùng trªn c¬ së c¸c ®iÖn tÝch ë tô ®iÖn. Bé nhí nµy ph¶i ®−îc håi phôc néi dung ®Òu ®Æn, nÕu kh«ng néi dung sÏ mÊt theo sù rß ®iÖn tÝch trªn tô. EDORAM, VRAM, SDRAM, SGRAM ®Òu RAM ®éng. C¸c bé nhí DRAM th−êng tho¶ m·n c¸c yªu cÇu khi cÇn bé nhí cã dung l−îng lín. Khi cÇn cã tèc ®é truy xuÊt lín th× l¹i ph¶i dïng c¸c bé nhí SRAM víi gi¸ thµnh ®¾t h¬n; c¶ hai lo¹i nµy ®Òu bị mất thông tin khi nguån ®iÖn nu«i bÞ mÊt, V× lý do nµy, c¸c ch−¬ng tr×nh dïng cho viÖc khëi ®éng PC nh− BIOS th−êng ph¶i n¹p trong c¸c bé nhí ROM. 2.1.4 Bé nhí ngoµi Bé nhí chÝnh b»ng vËt liÖu b¸n dÉn trªn b¶n m¹ch chÝnh kh«ng thÓ l−u tr÷ mét khèi l−îng rÊt lín c¸c th«ng tin, do vËy cÇn ph¶i cã thªm c¸c thiÕt bÞ nhí bªn ngoµi nh− b¨ng giÊy ®ôc lç b¨ng cassette, trèng tõ, ®Üa tõ, ®Üa quang laser. Nh÷ng thiÕt bÞ l−u tr÷ d÷ liÖu ë ngoµi nh− vËy ®−îc gäi lµ bé nhí khèi (mass storage) hay gäi lµ nhí ngoµi. ThiÕt bÞ nhí khèi th«ng dông nhÊt lµ ®Üa tõ. §Üa tõ lµ mét tÊm ®Üa trßn máng lµm b»ng chÊt dÎo mylar, hoÆc b»ng thñy tinh cøng hoÆc b»ng kim lo¹i cøng, trªn cã phñ mét líp bét tõ tÝnh «xit s¾t tõ. §Üa tõ sö dông kü thuËt ghi tõ ®Ó l−u tr÷ gi÷ liÖu, ®ã lµ viÖc ®Þnh h−íng c¸c domain tõ ®Ó t¹o ra c¸c bit th«ng tin 0 vµ 1. Khi ®· ghi lªn ®Üa, d÷ liÖu cã thÓ tån t¹i c¶ khi c¾t ®iÖn PC. Tuy nhiªn gièng nh− b¨ng tõ, d÷ liÖu cò còng cã thÓ xãa ®i thay thÕ bëi d÷ liÖu míi nhiÒu lÇn. Kỹ thuật điện tử tương lai sẽ cho phép có các khối nhớ dung lượng lớn hoàn toàn bằng vi mạch thay thế đĩa từ- hiện nay đã có các mạch nhớ bán dẫn với dung lượng tới vài GB. 2.2 Ph©n cÊp bé nhí CPU Bé Bé Cache nhí nhí Registers chÝnh ngoµi Bé nhí ¶o: Trong c¸c hÖ VXL hiÖn ®¹i ®−îc t¹o nªn bëi Cache, M vµ Bé nhí ngoµi. Thái Nguyên 8-2008 10
  11. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Bé nhí th−êng ®−îc tæ chøc gåm nhiÒu vi m¹ch nhí ®−îc ghÐp l¹i víi nhau ®Ó cã ®é dµi tõ vµ tæng sè tõ cÇn thiÕt. Nh÷ng chip nhí ®−îc thiÕt kÕ sao cho cã ®Çy ®ñ chøc n¨ng cña mét bé nhí: • Mét ma trËn nhí gåm c¸c « nhí, mçi « nhí øng víi mét bit nhí. • M¹ch logic gi¶i m· ®Þa chØ « nhí. • M¹ch logic cho phÐp ®äc néi dung « nhí. • M¹ch logic cho phÐp viÕt néi dung « nhí. • C¸c bé ®Öm vµo, bé ®Öm ra vµ bé nhí më réng. C¸ch tæ chøc ®¬n gi¶n nhÊt lµ tæ chøc theo tõ víi sù chän tuyÕn tÝnh. Mét ma trËn nhí nh− vËy cã ®é dµi cña cét b»ng sè l−îng tõ W vµ ®é dµi cña hµng b»ng sè l−îng bit B trong mét tõ. Bé chän tõ gi¶i m· mét tõ W, nghÜa lµ gi¶i m· ®Ó cã mét ®Çu ra duy nhÊt cho mçi tõ trong bé nhí. Râ rµng ph−¬ng ph¸p chän tuyÕn tÝnh cã thêi gian th©m nhËp ng¾n nh−ng cÇn mét bé gi¶i m· lín khi tæng sè tõ lín, lµm t¨ng gi¸ thµnh s¶n phÈm. KÝch th−íc cña phÇn gi¶i m· ®Þa chØ sÏ gi¶m ®i khi tæ chøc ma trËn nhí vµ phÇn logic chän tõ W cho phÐp gi¶i m· hai b−íc. Ma trËn nhí sö dông gi¶i m· hai b−íc øng víi tõ vËt lÝ vµ tõ logic. Tõ vËt lÝ bao gåm sè l−îng bit trong mét hµng cña ma trËn. Tõ logic bao gåm sè l−îng bit t−¬ng øng víi mét tõ logic nhËn biÕt ®−îc vµ göi ra cïng mét bé gi¶i m·. CÇn hai bé gi¶i m·: Mét bé gi¶i m· hµng ®Ó chän mét tõ vËt lý vµ mét bé gi¶i m· cét gåm 1 vµi m¹ch dån kªnh chän mét tõ logic tõ mét tõ vËt lý ®· chän. Mét tõ vËt lý chia S tõ logic. Bé gi¶i m· hµng lµ bé gi¶i m· chän 1 tõ W, mµ B=W/S vµ bé chän cét chøa B bé dån mét ®−êng tõ S. §Öm 7 7 Gi¶i m· 12 Ma trËn vµo hµng 1 tõ rom A0-A6 128 128 X 128 12 4 8 Bé gi¶i A7-A10 m· cét 1 tõ 16 8 CS §Öm ra Gi¶i m· hai b−íc cho ma trËn ROM 128x128 8 07 01 Thái Nguyên 8-2008 11
  12. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ở trªn lµ ví dô vÒ s¬ ®å ROM dung l−îng 2048x8 bit, tæ chøc theo gi¶i m· hai b−íc. Ma trËn nhí lµ 128x128 bit, nh− vËy cã 128 = 27 tõ vËt lÝ. Mét tõ vËt lÝ nh− vËy ®−îc chän bëi 7 ®−êng d©y ®Þa chØ tõ A0-A6. Bé gi¶i ®Þa chØ hµng chän 1 hµng tõ 128 hµng. Mét tõ vËt lÝ ®−îc chia thµnh 128/8=16 nhãm 8 bit. Nh− vËy, nh÷ng bé gi¶i m· cét gåm 8 bé dån kªnh mét ®−êng tõ 16 ®−êng ®Ó cung cÊp mét tõ logic 8 bit. Nh÷ng bit ®Þa chØ tõ A7-A10 ®iÒu khiÓn nh÷ng bé gi¶i m· cét. Tr−êng hîp ®Æc biÖt khi sè phÇn tö trong mét tõ vËt lÝ b»ng sè bit trong 1 tõ vËt lÝ thi ®ã lµ bé nhí tæ chøc theo bit nghÜa lµ mçi tõ logic cã ®é dµi 1 bit. C¸c bé ®Öm ra ®¶m b¶o kh«ng nh÷ng møc logic mong muèn vµ cung cÊp ®ñ dßng ®iÖn mµ cßn cã ®Çu ra collector hë hoÆc 3 tr¹ng th¸i cho phÐp nèi chung ®Çu ra cña mét vµi chip víi nhau. Bé ®Öm ra ®−îc ®iÒu khiÓn bëi 1 hay nhiÒu ®Çu vµo nh− chän m¹ch CS, cho phÐp CE hay cho phÐp më ®Çu ra 3 tr¹ng th¸i OE. 2.3 CÊu tróc cña m¹ch nhí tÜnh SRAM 2.3.1 Giíi thiÖu c«ng nghÖ CÊu tróc m¹ch ®iÖn cña RAM phô thuéc vµo c«ng nghÖ chÕ t¹o. Cã mét sè c«ng nghÖ chÕ t¹o th«ng dông: − Mức điện áp chuẩn TTL: + Qui ®Þnh 2 møc 0/1.("0" , "1" ) + §iÖn ¸p sö dông 5V − MOS: C«ng nghÖ ®¬n cùc (Metal Oxit Semi Conductor) − ECL(M¹ch logic ghÐp cùc ph¸t - Emitor Coupler Logic), I2L, SOS − Các khối nhớ NOR Flash 2.3.2 CÊu tróc m¹ch nhí SRAM 2.3.2.1 Bit nhí • Bit nhí Mçi phÇn tö nhí c¬ b¶n 1 bit lµ 1 m¹ch F-F (Flip-Flop) cã hai tr¹ng th¸i c©n b»ng æn ®Þnh ®Ó biÓu diÔn hai gi¸ trÞ nhÞ ph©n 0 vµ 1. Khi phÇn tö nhí ®· ®−îc thiÕt lËp gi¸ trÞ th× nã nhí m·i gÝa trÞ ®ã cho ®Õn khi thiÕt lËp tr¹ng th¸i míi. Thái Nguyên 8-2008 12
  13. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ §Çu vµo d÷ liÖu Din M¹ch §Çu ra d÷ liÖu Dout §Þa chØ hµng cét Xi, Yi F-F CS WE D÷ liÖu ®−îc ®−a vµo Din, lÊy ra Dout X¸c ®Þnh ®Þa chØ Xi, Yi WE: ®iÒu khiÓn ®äc viÕt; tuú theo tÝn hiÖu ®−a ®Õn lµ 0 hay 1 mµ cho phÐp viÕt vµo hay ®äc ra CS (Chipselect): TÝn hiÖu chän chip. Mét bé nhí cã thÓ do nhiÒu chip nhí t¹o nªn. Khi CPU lµm viÖc víi chip nhí nµo th× nã sÏ kÝch ho¹t tÝn hiÖu chän chip cña chip nhí ®ã. TÝn hiÖu nµy th−êng t¸c ®éng ë møc thÊp. Rn Sn Qn+1 Q/n+1 0 0 Qn Q/n 0 1 1 0 1 0 0 1 1 1 x x Một bit nhớ F-F RS sử dụng tranzixtor phân cực Một bit nhớ F-F RS sử dụng tranzixtor trường Thái Nguyên 8-2008 13
  14. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ghi: + Dây từ = 0 + Đưa dữ liệu vào dây bit. Giả sử là "1" + Dây từ =1 → TI/O 1 thông → D1 của T1 =1 → T2 thông D2 = 0 → G của T1 = 0 → T1 không thông và duy trì ngay cả khi dữ liệu không đặt trên dây bit + Dây từ =0. Dữ liệu được ghi trong bit nhớ Đọc: + Trước khi đọc đây từ = 0 + Dây từ = 1. T1, T2 thông đưa dữ liệu ra dây bit. 2.3.2.2 Thanh ghi • Thanh ghi: Lµ nhãm c¸c phÇn tö nhí cã liªn hÖ víi nhau cïng ho¹t ®éng nhí 1 ®¬n vÞ nhí: − Thanh ghi nhí tõ − Thanh ghi dÞch − Cã c¸c lo¹i thanh ghi 8 bit, 16 bit, 32 bit mçi bit lµ 1 phÇn tö nhí c¬ b¶n C¸c thanh ghi lµm nhiÖm vô nhí t¹m thêi mét tõ nhÞ ph©n th−êng ®−îc x©y dùng tõ c¸c flip-flop. C¸c bé xö lý th−êng cã mét tËp thanh ghi ®−îc sö dông ®Ó chøa t¹m d÷ liÖu hoÆc c¸c chØ thÞ trong qu¸ tr×nh thi hµnh ch−¬ng tr×nh. C¸c thanh ghi nh− vËy cÇn cã kh¶ n¨ng ho¹t ®éng ë tèc ®é cao h¬n c¸c thanh ghi kh¸c ®−îc sö dông trong bé nhí chÝnh. H×nh d−íi m« t¶ thanh ghi ®Öm 4 bit, sö dông flip-flop D chuyÓn m¹ch bëi s−ên d−¬ng cña xung ®ång hå. LOAD H×nh : Thanh ghi ®Öm Thái Nguyên 8-2008 14
  15. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + Xi (i=1 3) lµ c¸c bit cña word X cÇn nhí, khi s−¬n xung d−¬ng ®Çu tiªn ®i tíi, word ®−îc nhí vµo trong thanh ghi lµ Q3Q2Q1Q0=X3X2X1X0, hay viÕt lµ Q=X. Tõ nhÞ ph©n cã thÓ lÊy ra ë ®Çu ra Q3Q2Q1Q0. + CLR lµ ®Çu vµo tÝn hiÖu ®iÒu khiÓn xo¸ néi dung thanh ghi, tÝch cùc ë møc cao, nghÜa lµ khi CLR lµ cao th× tÊt c¶ c¸c flip-flop bÞ xo¸ vµ tõ ®−îc nhí trë thµnh Q=0. + LOAD lµ ®Çu vµo ®iÒu khiÓn tÝch cùc ë møc cao, khi LOAD = 0 c¸c bit kh«ng thÓ ®i vµo c¸c flip-flop, ®ång thêi qua NOT ®−êng d©y kia sÏ cã møc cao, lµm cho c¸c gi¸ trÞ ë ®Çu ra cña c¸c flip-flop ®−a ng−îc l¹i lèi vµo, t¹i c¸c s−ên d−¬ng cña xung ®ång hå chóng sÏ l¹i ®−îc ghi l¹i vµo trong flip-flop, nãi c¸ch kh¸c khi LOAD=0 th× thanh ghi kh«ng thay ®æi néi dung. + Khi LOAD=1 c¸c bit cña X ®−îc ®−a tíi lèi vµo cña flip-flop, khi s−ên d−¬ng cña xung ®ång hå ®i tíi chóng sÏ ®−îc ghi vµo trong thanh ghi. 2.3.2.3 Bé gi¶i m· • Bé gi¶i m· §é dµi 1 « nhí th−êng lµ 8bit(1byte). Trong mét vi m¹ch nhí cã nhiÒu « nhí. Mçi mét « nhí khi ghÐp víi hÖ vi xö lý sÏ cã mét ®Þa chØ x¸c ®Þnh. CPU muèn lµm viÖc víi « nhí nµo nã sÏ ®−a ra tÝn hiÖu ®Þa chØ cña « nhí ®ã. Qua bé gi¶i m· ®Þa chØ, « nhí ®ã ®−îc chän chÝnh x¸c, sau ®ã cho phÐp ®äc/viÕt trªn « nhí ®ã. Bªn trong 1 vi m¹ch nhí TÝn hiÖu ®Þa chØ Bé ¤ nhí 0 gi¶i Chän « nhí 0 ¤ nhí 1 m· ®Þa TÝn hiÖu ®iÒu khiÓn D÷ liÖu chØ WR RD Chän « nhí N ¤ nhí N CS Thái Nguyên 8-2008 15
  16. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Bé gi¶i m· ®Þa chØ gióp ta chän ®−îc « nhí nµo trong vi m¹ch ®Ó lµm viÖc §Çu vµo bé gi¶i m· cã n bit ®Þa chØ sÏ ph©n biÖt ®−îc 2n tr¹ng th¸i → sÏ ph©n biÖt ®−îc 2n « nhí. NÕu 1 « nhí 8 bit cã thÓ hiÖn nh− sau §Þa chØ « nhí Néi dung « sè 0 0000 0101 « nhí 1 11110100 §Ó ®äc hay ghi « nhí cÇn cã thªm c¸c tÝn hiÖu : RD: §äc « nhí C¸c tÝn hiÖu nµy th−êng dïng møc thÊp WR: Ghi vµo « nhí Khi cÇn cã dung l−îng « nhí lín h¬n cÇn ghÐp nhiÒu vi m¹ch nhí. Khi ®ã ®Ó chän vi m¹ch nhí nµo l¹i cÇn cã mét bé gi¶i m· ®Þa chØ n÷a ®Ó chän ®−îc vi m¹ch cÇn thiÕt. VD: X©y dùng bé nhí 4KB tõ 4 vi m¹ch 1 KB Vi m¹ch nhí sè 0 A bus RD CS0 A0 A9 C bus Vi m¹ch nhí sè 1 A10, A11 CS1 Bé gi¶i m· A0 A9 ®Þa chØ Vi m¹ch nhí sè N CSN A A 0 9 Abus Chän « nhí Gi¶i thÝch ho¹t ®éng CPU muèn lµm viÖc víi vi m¹ch nhí nµo th× nã ph¸t ra tÝn hiÖu ®Þa chØ qua Abus, c¸c tÝn hiÖu ®Þa chØ qua bé gi¶i m· ®Þa chØ sÏ kÝch ho¹t c¸c tÝn hiÖu CS t−¬ng øng ®Ó chän ®−îc vi m¹ch cÇn thiÕt. C¸c tÝn hiÖu ®Þa chØ còng ®−îc ®−a vµo tõng vi m¹ch nhí ®Ó chän ra « nhí cÇn thiÕt. − ThiÕt bÞ ngo¹i vi ®−îc dµnh 1 sè ®Þa chØ ë vïng thÊp (víi m¸y tÝnh theo kiÕn tróc IBM-PC vïng nµy gåm 1KB). Nh− vËy sÏ cã nh÷ng « nhí trong vïng thÊp nµy cã Thái Nguyên 8-2008 16
  17. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ®Þa chØ trïng víi ®Þa chØ cña thiÕt bÞ ngo¹i vi. §Ó kh«ng x¸y ra sù nhÇm lÉn gi÷a c¸c « nhí vµ thiÕt bÞ ngo¹i vi cã ®Þa chØ trïng nhau, ng−êi ta sö dông thªm tÝn hiÖu IO/M khi gi¶i m· ®Þa chØ. Còng ®Þa chØ ®ã nh−ng nÕu IO/M = 0 lµ ®Þa chØ cña « nhí, IO/M =1 lµ ®Þa chØ cña thiÕt bÞ ngo¹i vi. − C¸c m¹ch gi¶i m· ®Þa chØ ®−îc t¹o nªn b»ng c¸c vi m¹ch sè Gi¶i m· cho 1 vi m¹ch nhí: D÷ liÖu ra A0 A10 27162716 TÝn hiÖu ®Þa chØ CE OE A11 CE OE A12 ° ° A19 IO/M Gi¶i m· cho nhiÒu vi m¹ch nhí − Vi m¹ch sö dông khi gi¶i m· cÇn nhiÒu ®Çu ra th−êng dïng 74LS138 Giải mã cho 3 vi mạch ROM 2764 địa chỉ ô nhớ đầu là F0000h A0 A12 2764 2764 2764 ° ° ° A A Y OE OE OE 13 AB ° 0 A14 B Y C ° 1 A C Y 15 ° Y23 74138 ° A16 G2A ° Y4 A G2A 17 ° G2A ° Y G2B 56 A IO/M ° ° 18 G1 ° A Y7 19 Thái Nguyên 8-2008 17
  18. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Vi m¹ch cã 8 ®Çu ra gi¶i m· t¸c ®éng ë møc thÊp tõ Y0 ®Õn Y7 . ViÖc chän dÇu ra gi¶i m· nµo do tæ hîp tÝn hiÖu c¸c ch©n A, B, C. §Ó vi m¹ch ho¹t ®éng tÝn hiÖu ë c¸c ch©n G2A, G2B, G1 ph¶i ®¶m b¶o ®ång thêi nh− sau: G2A=0 G2B=0 vµ G1=1 B¶ng t¸c ®éng cña vi m¹ch VÝ dô sö dông vi m¹ch 74138 gi¶i m· cho 3 vi m¹ch ROM 2764, ®Þa chØ cña « nhí ®Çu tiªn lµ FA000h tøc lµ 1111 1110 0000 0000 0000 A19 A0 C B A Cã nhiÒu ph−¬ng ¸n ®Ó gi¶i m· cho mét yªu cÇu cô thÓ khi sö dông 74138. Cho c¸c vÝ dô 2.3.2.4 M¹ch nhí SRAM (C¸c thµnh phÇn, quy tr×nh ®äc ghi, biÓu ®å thêi gian) • M¹ch nhí SRAM Thái Nguyên 8-2008 18
  19. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ §Þa chØ A0-A10 Cho phÐp ®−a D÷ liÖu D0-D7 d÷ liÖu ra OE Cho phÐp ghi WE Chon chip CS Bé nhí SRAM 2.3.3 ThiÕt kÕ thÎ nhí SRAM Mạch nhớ SRAM thường được thiết kế cho các hệ vi xử lý nhỏ. Dữ liệu ban đầu là: Dung lượng cần thiết, tốc độ truy nhập. Từ các số liệu này chọn được loại vi mạch SRAM và số lượng chip. Tiếp theo xây dựng bộ giải mã địa chỉ ngoài. Có thể dùng các vi mạch AND, OR, NOT, NAND hoặc vi mạch chuyên dụng 74138, 74 154, để xây dựng bộ giải mã. 2.4 CÊu tróc cña m¹ch nhí DRAM PhÇn tö nhí DRAM §Ó bè trÝ ®−îc sè ph©n tö nhí lín nhÊt trong mét vi m¹ch, mçi ph©n tö nhí ph¶i ®−îc chÕ t¹o sao cho ®¬n gi¶n nhÊt. PhÇn tö nhí RAM ®éng (DRAM) mµ chóng ta sÏ t×m hiÓu chØ cÇn 1 tranzito cho 1 bit th«ng tin, v× thÕ cã thÓ bè trÝ víi mËt ®é rÊt cao vµ cã gi¸ thµnh rÎ. Trong ph©n tö nhí nµy ng−êi ta thay flip-flop b»ng mét tô ®iÖn C, gi¸ trÞ nhí trong phÇn tö nhí nµy chÝnh lµ ®iÖn tÝch n¹p trªn tô ®iÖn. Ta cã thÓ sö dông tr¹ng th¸i tô ®−îc n¹p, tøc lµ trªn tô ®iÖn C cã mét ®iÖn ¸p lín h¬n mét gi¸ trÞ nhÊt ®Þnh nµo ®ã, biÓu diÔn gi¸ trÞ 1 cña bit, cßn tr¹ng th¸i kh«ng ®−îc n¹p biÓu diÔn gi¸ trÞ 0. Nguyªn lý cÊu t¹o cña mét phÇn tö DRAM ®−îc minh häa ë h×nh d−íi: Thái Nguyên 8-2008 19
  20. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ D©y tõ G Tranzito T S D D©y bit Tô ®iÖn C PhÇn tö nhí DRAM 1 bit Bé nhí RAM ®éng Bé nhí DRAM ®−îc tæ chøc thµnh mét ma trËn nhí, trong ®ã d©y tõ lµ mét trong c¸c d©y hµng cña ma trËn, cßn d©y bit lµ mét trong nh÷ng d©y cét cña ma trËn. PhÇn tö nhí ®−îc ®Æt ë giao ®iÓm cña c¸c d©y hµng vµ cét. Tranzito T lµ mét tranzito tr−êng (fet) ®ãng vai trß mét chuyÓn m¹ch ®iÖn tö. T cã ba cùc lµ cùc cæng G (Gate), cùc m¸ng D (Drain) vµ cùc nguån S (Sourne), trong ®ã G lµ cùc ®iÒu khiÓn, D sÏ ®−îc nèi víi S khi G cã møc ®iÖn ¸p cao so víi S, ng−îc l¹i ®iÖn trë gi÷a D vµ S rÊt lín. Qu¸ tr×nh ghi: Khi d©y tõ cã møc tÝch cùc, T ë tr¹ng th¸i më, nèi tô ®iÖn C víi d©y bit. NÕu thao t¸c lµ ghi th× gi¸ trÞ cÇn ghi ph¶i ®Æt trªn d©y bit. NÕu gi¸ trÞ ®ã lµ 1 th× tô C sÏ ®−îc n¹p tíi ®iÖn ¸p t−¬ng øng víi gi¸ trÞ 1 trªn d©y bit, cßn nÕu gi¸ trÞ ®ã lµ 0 th× tô ®iÖn C sÏ bÞ phãng hÕt ®iÖn tÝch. Qu¸ tr×nh ®äc: ViÖc ®äc phøc t¹p h¬n ghi do ®iÖn tÝch trªn tô C øng víi gi¸ trÞ cÇn ®äc rÊt nhá. Tr−íc khi ®Æt d©y tõ lªn møc tÝch cùc, cÇn ph¶i ®Æt lªn gi©y bit ®iÖn ¸p b»ng 1/2 møc chªnh lÖch gi÷a ®iÖn ¸p øng víi møc 1 vµ ®iÖn ¸p øng víi møc 0. §iÖn ¸p trªn tô sÏ lµm cho ®iÖn ¸p d©y bit thay ®«i mét chót theo chiÒu h−íng t¨ng hoÆc gi¶m tuú thuéc vµo bit ®ã lµ 1 hay 0. Sù thay ®æi nhá cña ®iÖn ¸p trªn d©y bit sÏ ®−îc truyÒn tíi ®Çu vµo cña mét bé khuÕch ®¹i nh¹y, t¹i ®Çu ra cña nã ta nhËn ®−îc ®iÖn ¸p t−¬ng øng víi gi¸ trÞ cña bÝt chøa trªn tô. Qu¸ tr×nh lµm t−¬i: Ta ®Òu biÕt mäi tô ®iÖn ®Òu cã mét ®iÖn trë rß vµ tranzito T m¾c nèi tiÕp víi nã dï ë tr¹ng th¸i cÊm còng cã mét ®iÖn trë dß nhÊt ®Þnh, cho nªn sau khi ®−îc n¹p, ®iÖn tÝch trªn tô liªn tôc bÞ phãng, sau mét thêi gian nhÊt ®Þnh sÏ bÞ mÊt th«ng tin mµ C chøa. ChÝnh v× vËy ph¶i n¹p ®iÖn cho tô C tr−íc khi ®iÖn ¸p trªn tô gi¶m thÊp h¬n mét ng−ìng nµo ®ã, viÖc nµy ®−îc gäi lµ “lµm t−¬i” (refresh). §Ó Thái Nguyên 8-2008 20
  21. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ lµm t−¬i « nhí DRAM, cÇn ph¶i ®äc néi dung cña nã råi viÕt l¹i. ViÖc lµm t−¬i ph¶i ®−îc tiÕn hµnh theo chu kú nhÊt ®Þnh, gäi lµ chu kú lµ t−¬i. Trong c¸c chip DRAM tr−íc ®©y m¹ch ®iÖn bæ sung ®Ó thùc hiÖn lµm t−¬i th−êng ë ngoµi chip nhí. Ngµy nay c¸c m¹ch ®iÖn lµm t−¬i ®−îc chÕ t¹o ngay bªn trong chip nhí, nhê vËy mµ lo¹i nµy võa cã dung l−îng cao võa cã giao diÖn ®¬n gi¶n, chóng ®−îc gäi lµ quasi-static RAM. Chip nhí DRAM l−u gi÷ th«ng tin rÊt lín do ®ã còng cÇn rÊt nhiÒu ch©n cho tÝn hiÖu ®Þa chØ. §Ó lµm gi¶m bít sè ch©n ®Þa chØ trªn mét vi m¹ch nhí, ng−êi ta th−êng chia ®Þa chØ ra 2 nhãm: ®Þa chØ hµng vµ ®Þa chØ cét råi dån kªnh chóng trªn c¸c ch©n ®Þa chØ, ®ång thêi cung cÊp thªm c¸c tÝn hiÖu cho phÐp chèt gi÷ riªng rÏ ®Þa chØ hµng ( RAS ) vµ cét (CAS ) ë bªn trong vi m¹ch nhí. §Þa chØ A0-A7 D0-D3 D÷ liÖu Cho phÐp ®−a d÷ liÖu ra OE Cho phÐp ghi WE Xung cho phÐp Xung cho phÐp CAS RAS chèt ®Þa chØ chèt ®Þa chØ H×nh : Bé nhí Thái Nguyên 8-2008 21
  22. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ RAS CAS A0-A7 §c cét §c hµng Kh«ng quan t©m CS WR Data Do S¬ ®å ®äc d÷ liÖu tõ chip DRAM RAS CAS A0-A7 §c cét §c hµng Kh«ng quan t©m CS WR Data DIN S¬ ®å ghi d÷ liÖu vµo chip DRAM Thái Nguyên 8-2008 22
  23. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ch−¬ng 3. CÁC BỘ VI XỬ LÝ VÀ VI ĐIỀU KHIỂN 3.1 Giíi thiÖu bé vi xö lý 8 bit tæng qu¸t 3.2 Bé vi xö lý 8 bit (8086/8088) 3.2.1 S¬ ®å khèi bé vi xö lý 8 bit Bus ®Þa chØ 20 bit ax ∑ C¸c thanh ghi bx ®a n¨ng Bus d÷ liÖu cx dx CS Bus trong sp DS cña CPU 8 bp ES bit d÷ liÖu C¸c thanh C¸c thanh ghi 20 bit ®Þa ghi con trá vµ si ®o¹n vµ con SS chØ chØ sè trá lÖnh di ip Bus d÷ liÖu Logic ALU (16 bit) ®iÒu Bus khiÓn ngoµi C¸c thanh ghi t¹m thêi BUS Khối điều khiển alu của EU §Öm lÖnh (hµng ®îi lÖnh) Thanh ghi cê Thái Nguyên 8-2008 23
  24. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 8088 cã 2 khèi: Khèi phèi ghÐp bus BIU vµ khèi thùc hiÖn lÖnh EU • BIU: ChÞu tr¸ch nhiÖm ®−a ®Þa chØ ra bus vµ trao ®æi d÷ liÖu víi bus • EU: Bªn trong cã: − CU( Control Unit): thùc hiÖn gi¶i m· lÖnh thµnh d·y xung ®iÒu khiÓn ®Ó ®iÒu khiÓn bªn trong vµ bªn ngoµi CPU − ALU: Dïng ®Ó thùc hiÖn thao t¸c cña c¸c phÐp to¸n − Khi ho¹t ®éng EU cung cÊp th«ng tin vÒ ®Þa chØ cho BIU ®Ó BIU ®äc lÖnh vµ d÷ liÖu cßn EU th× gi¶i m· lÖnh vµ thùc hiÖn lÖnh. • Bé nhí ®Öm lÖnh trong BIU: C¸c bé vi xö lý ®Çu tiªn ho¹t ®éng theo nguyªn lý nèi tiÕp: + NhËn lÖnh + Gi¶i m· lÖnh + Thùc hiÖn lÖnh Trong mét thêi ®iÓm nhÊt ®Þnh CPU chØ cã thÓ lµm 1 trong 3 viÖc trªn, do vËy cã nh÷ng thêi ®iÓm nhiÒu bé phËn cña CPU nhµn rçi; ch¼ng h¹n khi ®ang gi¶i m· lÖnh th× bus kh«ng dïng ®Õn, bé ALU kh«ng sö dông ®iÒu nµy lµm tèc ®é ho¹t ®éng cña CPU kh«ng cao Khi cã bé ®Öm lÖnh cã thÓ thùc hiÖn c¬ chÕ xö lý xen kÏ. Bé ®Öm lÖnh lµm viÖc theo kiÓu "vµo tr−íc, ra tr−íc " FIFO. C¸c lÖnh cø nhËn vÒ ®−a vµo ®Öm lÖnh råi lÊy dÇn ra xö lý, kh«ng mÊt thêi gian chê lÊy lÖnh sau khi thùc hiÖn. NL TH NL GM TH NL GM TH GM NL GM TH NL GM TH NL GM TH 3.2.2 C¸c thanh ghi của 8086/88 Sè « nhí mµ 8088 qu¶n lý ®−îc lµ 220 = 1024.210 bytes = 1MB nh−ng thanh ghi trong 8088 chØ cã ®é dµi 16 bit nh− vËy chØ l−u gi÷ ®−îc 216 tr¹ng th¸i ®Þa chØ hay 64 KB . Muèn l−u gi÷ ®−îc 220 ®Þa chØ « nhí cÇn ph¶i sö dông 2 thanh ghi theo c¬ chÕ segment:offset ( Thanh ghi ®o¹n: Thanh ghi lÖch) §Þa chØ vËt lý = Thanh ghi ®o¹n * 16 + Thanh ghi lÖch Thái Nguyên 8-2008 24
  25. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ §Þa chØ offst C¸c « nhí §Çu ®o¹n §Þa chØ ®Çu ®o¹n - Segment VÝ dô cÆp thanh ghi CS:IP sÏ chØ ra ®Þa chØ cña lÖnh s¾p thùc hiÖn trong ®o¹n m·. NÕu t¹i 1 thêi ®iÓm nµo ®ã ta cã CS=F000h vµ IP = FFF0h th× ®Þa chØ cña « nhí vËt lý sÏ lµ: CS:IP ~ F000h * 16 + FFF0h = F0000h + FFF0h = FFFF0h CS : thanh ghi ®o¹n m· IP: thanh ghi con trá lÖnh T−¬ng tù víi c¸c thanh ghi d÷ liÖu : DS: Thanh ghi ®o¹n d÷ liÖu C¸c thanh ghi offset cã thÓ lµ DI, SI, BX B¶n ®å bé nhí cña 8086: FFFFF PhÇn 1MB cô thÓ nh− bªn BIOS (§Þa chØ vËt lý) F0000 RAM mµn h×nh C0000 A0000 Vïng dµnh cho c¸c ch−¬ng tr×nh øng dông Hai file Èn cña DOS (0000:0400) d÷ liÖu cña DOS vµ BIO S 00400 B¶ng vector ng¾t (0000)0000: 00000 Mét ch−¬ng tr×nh khi n¹p vµo trong bé nhí n»m ë 4 vïng(®o¹n): - Vïng chøa m· ch−¬ng tr×nh (Code segment) - Vïng chøa d÷ liÖu vµ kÕt qu¶ trung gian cña ch−¬ng tr×nh (Data segment) - Vïng ng¨n xÕp (stack) ®Ó qu¶n lý c¸c th«ng sè cña bé vi xö lý khi gäi Thái Nguyên 8-2008 25
  26. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ch−¬ng tr×nh con hoÆc trë vÒ tõ ch−¬ng tr×nh con.(Stack segment) - Vïng d÷ liÖu phô (Extra segment) C¸c thanh ghi ®o¹n 16 bit chØ ra ®Þa chØ ®Çu (segment) cña 4 ®o¹n trong bé nhí. - CS: Code Segment - DS: Data Segment - SS: Stack Segment - ES: extra Segment Néi dung c¸c thanh ghi ®o¹n x¸c ®Þnh ®Þa chØ cña « nhí n»m ë ®Çu ®o¹n(®Þa chØ c¬ së). §Þa chØ cña c¸c « nhí kh¸c n»m trong ®o¹n tÝnh ®−îc b»ng c¸ch céng thªm vµo ®Þa chØ c¬ së 1 gi¸ trÞ gäi lµ ®Þa chØ lÖch (ofset) C¸c thanh ghi cña hä 80x86 nh− sau: Thanh ghi con trá lÖnh IP kÕt hîp CS chØ ra ®Þa chØ lÖnh s¾p thùc hiÖn C¸c thanh ghi d÷ liÖu: AX,BX,CX,DX C¸c thanh ghi con trá, chØ sè: SP,BP,SI,DI C¸c thanh ghi ®o¹n: CS,DS,SS,ES C¸c thanh ghi cã ®é dµi 16 bit gåm 8 bit phÇn thÊp vµ 8 bit phÇn cao VD: AX gåm AH vµ AL, BX gåm BH vµ BL Thanh ghi cê - Thanh ghi cê: + B¸o tr¹ng th¸i cña kÕt qu¶ c«ng viÖc + Cho c¸ch thøc ®iÒu khiÓn CPU x x x x 0 D I T S Z x A x P x C Cã c¸c bit cê chÝnh: + Cê nhí C: Khi C=1 phÐp tÝnh cã nhí cã m−în + Cê nhí phô A: Dïng A=1 khi cã céng hay trõ sè BCD + Cê rçng Z: Z=1 th× kÕt qu¶ = 0 + Cê dÊu S: S=1 ACC ©m + Cê Parity: P=1 Khi sè bit 1 cña ACC ch½n + Cê trµn O: O=1 khi kÕt qu¶ kh«ng biÓu diÔn næi trong thanh ghi + Cê cho phÐp ng¾t: I=1 cho phÐp ng¾t + Cê h−íng thao t¸c D: Víi lo¹i d÷ liÖu d¹ng chuçi D=1 : Lïi §Ó xem c¸c thanh ghi ho¹t ®éng ra sao ta cã thÓ dïng ch−¬ng tr×nh debug víi lÖnh T( Ch¹y tõng b−íc) vµ lÖnh R(xem c¸c thanh ghi) Thái Nguyên 8-2008 26
  27. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ch¼ng h¹n: C:\debug file.exe ↵ Ta còng cã thÓ dïng 1 ch−¬ng tr×nh Pascal ®¬n gi¶n sau ®Ó xem ho¹t ®éng cña c¸c thanh ghi: uses crt; begin Repeat asm xor ax,ax mov al,1 add al,5 sub al,3 end; until keypressed end. Ên Alt+D råi vµo môc Registers. Sau ®ã Ên nh¶ phÝm F7 ®Ó ch¹y ch−¬ng tr×nh vµ xem c¸c thanh ghi trong CPU ®ang ho¹t ®éng ra sao. Sè l−îng c¸c thanh ghi vµ ®é lín cña chóng trong c¸c bé CPU hiÖn ®¹i ngµy cµng ®−îc t¨ng lªn còng lµ 1 yÕu tè lµm cho c¸c bé vi xö lý nµy ho¹t ®éng nhanh h¬n. Dung l−îng c¸c thanh ghi trong 1 sè vi xö lý hiÖn ®¹i: Tõ m¸y 386 c¸c thanh ghi ®a n¨ng vµ thanh ghi cê cã ®é lín gÊp ®«i (32 bit) C¸c thanh ghi ®o¹n (4 thanh ghi) ®é lín vÉn lµ 16 bit 3.2.3 BiÓu ®å thêi gian cña chu kú ®äc ghi sè liÖu Trong tr−êng hîp b×nh th−êng mét chu kú ®äc/ghi cña CPU kÐo dµi 4 chu kú ®ång hå. C¸c chu kú ®−îc d¸nh dÊu lµ T1-T4. NÕu CPU lµm viÖc víi tÇn sè ®ång hå 5MHz th× mét chu kú ®ßng hå kÐo dµi T=200 ns vµ mét chu kú bus kÐo dµi 800 ns. Thái Nguyên 8-2008 27
  28. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Mét chu kú cña bus CLK ALE A/S A16/S3- §Þa chØ TÝn hiÖu tr¹ng th¸i A19/S6 A8-A15 §Þa chØ æn ®Þnh A/D §Þa chØ D÷ liÖu ghi AD0 - AD7 T T gi÷W WR wr DEN H×nh : C¸c tÝn hiÖu cña CPU 8088 trong chu kú ghi ®¬n gi¶n ho¸ Chu kú T1 Trong chu kú nµy ®Þa chØ cña bé nhí hay thiÕt bÞ ngo¹i vi ®−îc ®−a trªn c¸c ®−êng ®Þa chØ, hoÆc ®Þa chØ/d÷ liÖu vµ ®Þa chØ/tr¹ng th¸i. C¸c tÝn hiÖu ®iÒu khiÓn ALE, DT/ R , IO/ M còng ®−îc ®−a ra ®Ó hoµn tÊt viÖc gi÷ th«ng tin ®Þa chØ nµy. Chu kú T2 Chu kú nµy CPU ®−a ra c¸c tÝn hiÖu ®iÒu khiÓn RD vµ WR , DEN vµ tÝn hiÖu trªn D0-7 nÕu ®ã lµ lÖnh ghi. DEN th−êng ®−îc dïng ®Ó më c¸c bé ®Öm cña bus d÷ liÖu nÕu chóng ®−îc dïng trong hÖ. T¹i cuèi chu kú T2 CPU lÊy mÉu tÝn hiÖu READY ®Ó xö lý trong chu kú tiÕp theo khi nã ph¶i lµm viÖc víi bé nhí hoÆc thiÕt bÞ ngo¹i vi Thái Nguyên 8-2008 28
  29. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Mét chu kú cña bus CLK ALE ADR/S A16/S3- §Þa chØ TÝn hiÖu tr¹ng th¸i A19/S6 ADR/A8-A15 §Þa chØ æn ®Þnh Tgi÷W ADR/D §Þa chØ D÷ liÖu ®äc AD0- AD7 TrD RD DEN H×nh : C¸c tÝn hiÖu cña CPU 8088 trong chu kú ®äc ®¬n gi¶n ho¸ Chu kú T3 CPU dµnh thêi gian cho bé nhí hay thiÕt bÞ ngo¹i vi truy xuÊt d÷ liÖu. NÕu lµ chu kú ®äc d÷ liÖu th× t¹i cuèi chy kú T3 CPU sÏ lÊy mÉu tÝn hiÖu cña bus d÷ liÖu. Nªu tai cuèi chu kú T2 mµ CPU ph¸t hiÖn ra tÝn hiÖu READY=0 th× CPU tù xen vµo sau chu kú T3 mét sè chu kú ®Ó t¹o chu kú ®îi TW = n*T nh»m kÐo dµi thêi gian thùc hiÖn lÖnh, t¹o ®iÒu kiÖn cho bé nhí hoÆc thiÕt bÞ ngo¹i vi cã ®ñ thêi gian hoµn tÊt viÖc ghi ®äc d÷ liÖu. Chu kú 4 Trong chu kú nµy c¸c tÝn hiÖu trªn bus ®−îc gi¶i tho¸t ®Ó chuÈn bÞ cho chu kú míi. TÝn hiÖu WR trong khi chuyÓn tr¹ng th¸i tõ 0 lªn 1 sÏ kÝch ho¹t qu¸ tr×nh ghi vµo bé nhí hay thiÕt bÞ ngo¹i vi. Thái Nguyên 8-2008 29
  30. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 3.2.5 GhÐp nèi c¸c ch©n tÝn hiÖu 8088 + D0 - AD7: C¸c ch©n dån kªnh cña bus A/D phÇn thÊp + A8 A15: C¸c bit phÇn cao cña bit ®Þa chØ + A16 A19: 4 ®−êng dån kªnh cña bus C/A cao + INTR: TÝn hiÖu yªu cÇu ng¾t che ®−îc + NMI: TÝn hiÖu ng¾t kh«ng che ®−îc: Tín hiệu ngắt từ lỗi cổng, lỗi bộ nhớ, lỗi RAM CMOS. + RESET: TÝn hiÖu khëi ®éng l¹i 8088: Khi chân này ở mức cao trong 4 clk CPU sẽ khởi động lại + CLK: TÝn hiÖu xung nhÞp ®ång hå. + READY: t/h vào, b¸o cho CPU biÕt t×nh tr¹ng s½n sµng cña thiÕt bÞ ngo¹i vi + RD: Xung cho phÐp ®äc + WR: Xung cho phÐp viÕt + IO/M: TÝn hiÖu ph©n biÖt lµm viÖc víi bé nhí hay thiÕt bÞ ngo¹i vi + INTA: ChÊp nhËn ng¾t + HOLD: Yªu cÇu treo CPU + HLDA: Tín hiệu ra, chÊp nhËn treo cho qu¸ tr×nh DMA Thái Nguyên 8-2008 30
  31. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + DT/R: Tín hiệu ra điều khiển các đệm 2 chiều của bus dữ liệu để chọn chiều chuyển vận của dữ liệu trên bus D. Chân này ở trạng thái cao khi vi xử lý chấp nhận treo. + MIN/MAX: Ở chế độ MIN chân này nối thẳng +5V không qua điện trở. Trong chế độ min có thể hoạt động như 8085. + Các bit trạng thái: S6 = 0 liên tục, S5 phản ảnh giá trị bit IF của thanh ghi cờ, S3 và S4 phối hợp với nhau để chỉ ra việc truy nhập thanh ghi đoạn. S4 S3 Truy nhập đến 0 0 Đoạn dữ liệu phụ 0 1 Đoạn ngăn xếp 1 0 Đoạn mã hoặc không đoạn nào 1 1 Đoạn dữ liệu + DEN: Tín hiệu ra tác động ở mức thấp, báo cho bên ngoài biết lúc này trên bus dồn kênh AD có dữ liệu ổn định. Chân này ở trạng thái trở kháng cao khi vi xử lý chấp nhận treo. ALE: Xung cho phÐp chèt ®Þa chØ. Khi ALE=1 bus dån kªnh sö dông cho ®Þa chØ. Khi CPU treo th× ALE=0. 3.2.6 HÖ lÖnh cña bé vi xö lý 8 bit ← D¹ng thøc cña lÖnh M« t¶ ®−îc trong mçi lÖnh cÇn cã c¸c th«ng tin liªn quan ®Õn c«ng viÖc ph¶i thùc hiÖn Mét lÖnh víi tÊt c¶ c¸c lo¹i vi xö lý ®Òu bao gåm 2 phÇn c¬ b¶n: • M· lÖnh: M· lÖnh th−êng lµ 1 byte, nghÜa lµ cã thÓ cã tíi 256 lÖnh kh¸c nhau trong tËp lÖnh cña bé vi xö lý. Trong 1 sè bé vi xö lý cã thÓ dïng 2 byte cho m· lÖnh, nh−ng byte thø 2 kh«ng dïng hÕt c¸c bit, nghÜa lµ cã thÓ m· ho¸ gÇn 216 lÖnh kh¸c nhau. • C¸c ®Þa chØ cña to¸n h¹ng To¸n h¹ng cã thÓ lµ néi dung c¸c thanh ghi bªn trong bé vi xö lý, cã thÓ lµ néi dung c¸c « nhí VD: ADD AL, BL Thái Nguyên 8-2008 31
  32. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ADD AL, 7 ADD AL, [1020h] C¸ch thøc ghi lÖnh ( ViÕt lÖnh nh− thÕ nµo ?) Ng«n ng÷ m¸y dïng tËp hîp c¸c tÝn hiÖu 0/1 m¸y tÝnh lµm viÖc víi c¸c tÝn hiÖu nµy. §Ó viÕt lÖnh ta cã thÓ dïng hÖ 2 hoÆc 16 . Ph¸t triÓn h¬n dïng ng«n ng÷ gîi nhí, dïng ng«n ng÷ bËc cao. { Tõ ng«n ng÷ bËc cao → assembly → ng«n ng÷ m¸y } Gi÷a c¸c kh©u biÓn ®æi lµ c¸c ch−¬ng tr×nh dÞch Ng«n ng÷ m¸y 10111010 00000011 1011 0000 10001001 BAh 03h B0h 89h Hîp ng÷ mov DX,0303 mov al,89 Pascal PORT[$303]:=$89; C¸ch m· ho¸ lÖnh cña 8088 M· lÖnh gåm 3 phÇn: Opcode + dÞch chuyÓn + d÷ liÖu trùc tiÕp hoÆc ®Þa chØ trùc tiÕp 1 0 0 0 1 0 D W Op.code Mod Reg M/R Disp L Disp H Bit D dïng ®Ó chØ h−íng ®i cña d÷ liÖu D = 1 Data -> Reg D = 0 Data <- Reg Reg: chØ ra nhê c¸c bÝt vïng Reg W = 0 lµ kiÓu Byte W = 1 lµ kiÓu Word Thái Nguyên 8-2008 32
  33. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ W=1 W=0 M∙ reg ax al 000 Bx Bl 011 Cx Cl 001 Dx Dl 010 Sp Ah 100 Di Bh 111 Bp Ch 101 Si Dh 110 2 bit MOD cïng víi 3 bit R/M (thanh ghi/ bé nhí) t¹o ra 5 bit dïng ®Ó chØ ra chÕ ®é ®Þa chØ cho c¸c to¸n h¹ng c©u lÖnh. B¶ng : Phèi hîp MOD vµ R/W ®Ó t¹o ra c¸c chÕ ®é ®Þa chØ \mod 00 01 10 11 Mr W=1 W=0 000 [bx]+[si] [bx]+[si]+d8 [bx]+[si]+d16 Al ax 001 [bx]+[di] [bx]+[di]+d8 [bx]+[di]+d16 cl cx 010 [bp]+[si] [bp]+[si]+d8 [bp]+[si]+d16 Dl dx 011 [bp]+[di] [bp]+[di]+d8 [bp]+[di]+d16 bl bx 100 [si] [si]+d8 [si]+d16 ah sp 101 [di] [di]+d8 [di]+d16 ch bp 110 d16 (®/c tt) [bp] +d8 [bp]+d8 DH SI 111 [bx] [bx]+d8 [bx]+d16 Bh Di ChÕ ®é bé nhí ChÕ ®é Reg Thái Nguyên 8-2008 33
  34. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ghi chó: + d8 disp 8 bit, d16 disp 16 bit + C¸c gi¸ trÞ trong cét 2,3,4 lµ c¸c ®Þa chØ hiÖu dông (EA) sÏ ®−îc céng víi DS ®Ó t¹o thµnh ®Þa chØ vËt lý (riªng BP ph¶i ®−îc céng víi SP) vÝ dô1: Mov CL,[BX] chuyÓn néi dung « nhí cã ®Þa chØ n»m ë thanh ghi BX 10010 10 00 001 111 Opcode ChuyÓn tíi [BX] M· ho¸ CL thanh ghi vÝ dô 2: Mov 0F3H[SI],CL 100010 00 00 001 111 11110011 Opcode ChuyÓn tõ [SI] M· ho¸ CL d8 = F3H thanh ghi C¸c chÕ ®é ®Þa chØ ChÕ ®é ®Þa chØ lµ c¸ch CPU t×m thÊy to¸n h¹ng cho c¸c lÖnh cña nã khi ho¹t ®éng. Mét lÖnh th−êng cã 0 ®Õn 3 to¸n h¹ng( Tuú theo lo¹i CPU) M· lÖnh To¸n h¹ng MOV A, B ; 2 to¸n h¹ng INC A ; A=A+1 ; 1to¸n h¹ng NOP ; 0 to¸n h¹ng ADD R1,R2,R3 ; 3to¸n h¹ng VD : CJNE A,#20h, Nh·n Cã c¸c chÕ ®é sau: • ChÕ ®é ®Þa chØ thanh ghi: Trong chÕ ®é nµy dïng c¸c thanh ghi bªn trong CPU ®Ó chøa d÷ liÖu cÇn thao t¸c. Thái Nguyên 8-2008 34
  35. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ VD: MOV BX,AX ; ChuyÓn néi dung ax vµo bx MOV DS,AX ; ChuyÓn néi dung ax vµo ds • ChÕ ®é ®Þa chØ tøc th×: Trong chÕ ®é nµy: To¸n h¹ng ®Ých lµ 1 thanh ghi hay 1 « nhí, to¸n h¹ng nguån lµ 1 h»ng sè. Cã thÓ dïng chÕ ®é ®Þa chØ nµy ®Ó n¹p d÷ liÖu cÇn thao t¸c trùc tiÕp vµo bÊt cø thanh ghi nµo( trõ thanh ghi ®o¹n vµ thanh ghi cê) VD: MOV CL,100 MOV AX,0FFh MOV DS, AX • ChÕ ®é ®Þa chØ trùc tiÕp: Trong chÕ ®é nµy 1 to¸n h¹ng chøa ®Þa chØ lÖch cña « nhí dïng chøa d÷ liÖu, cßn to¸n h¹ng kia chØ cã thÓ lµ thanh ghi mµ kh«ng ®−îc lµ « nhí ( Kh«ng ph¶i lµ to¸n h¹ng mµ lµ ®Þa chØ cña to¸n h¹ng) VD: mov al,[1230h] ; ChuyÓn néi dung « nhí DS:123 vµo al MOV [4560h],CX ; ChuyÓn néi dung CX vµo « nhí DS: 4560 vµ DS:4561 • ChÕ ®é ®Þa chØ gi¸n tiÕp qua thanh ghi Trong chÕ ®é nµy 1 to¸n h¹ng lµ 1 thanh ghi ®−îc sö dông ®Ó chøa ®Þa chØ lÖch cña « nhí chøa d÷ liÖu, cßn to¸n h¹ng kia chØ cã thÓ lµ thanh ghi mµ kh«ng ®−îc lµ « nhí VD: MOV AL,[BX] ; ChuyÓn néi dung « nhí cã ®Þa chØ DS:BX vµo AL MOV [SI], CL ; ChuyÓn néi dung CL vµo « nhí cã ®Þa chØ DS:SI MOV [DI],AX ; ChuyÓn néi dung AX vµo 2 « nhí liªn tiÕp cã ®Þa chØ DS:DI vµ DS:(DI+1) • ChÕ ®é ®Þa chØ t−¬ng ®èi c¬ së Trong chÕ ®é nµy c¸c thanh ghi c¬ së nh− BX vµ BP vµ c¸c h»ng sè biÓu diÔn c¸c gi¸ trÞ dÞch chuyÓn ®−îc dïng ®Ó tÝnh ®Þa chØ hiÖu dông cña ¸c to¸n h¹ng trong c¸c vïng nhí DS vµ SS VD: MOV CX, [BX]+10 ; ChuyÓn néi dung 2 « nhí cã ®Þa chØ DS:[BX+10] vµ DS:[BX+11] vµo CX HoÆc MOV CX,[BX+10] MOV CX,10[BX] ; Gièng trªn MOV AL,[BP]+5 ;ChuyÓn néi dung « nhí SS:(BP+5) vµo AL Thái Nguyên 8-2008 35
  36. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ • ChÕ ®é ®Þa chØ t−¬ng ®èi chØ sè Trong chÕ ®é nµy c¸c thanh ghi chØ sè nh− SI vµ DI vµ c¸c h»ng sè biÓu diÔn c¸c gi¸ trÞ dÞch chuyÓn ®−îc dïng ®Ó tÝnh ®Þa chØ cña to¸n h¹ng trong vïng nhí DS VD: MOV AX, [SI]+10 ;ChuyÓn néi dung 2 « nhí liªn tiÕp cã ®Þa chØ DS:(SI+10) vµ DS:(SI+11) vµo AX hoÆc MOV AX,(SI+10) MOV CL,[DI]+5 ; ChuyÓn néi dung « nhí DS:(DI+5) vµo CL • ChÕ ®é ®Þa chØ t−¬ng ®èi chØ sè c¬ së KÕt hîp hai chÕ ®é ®Þa chØ chØ sè vµ c¬ së ta cã chÕ ®é ®Þa chØ chØ sè c¬ së VD: MOV AX,[BX][SI]+8 ;ChuyÓn néi dung 2 « nhí liªn tiÕp cã ®Þa chØ DS:(BX+SI+8) vµ DS:(BX+SI+9) vµo AX TËp lÖnh cña 8088 • Xung ®ång hå clk lµ g×? C¸c thµnh phÇn trong 1 vi xö lý khi ho¹t ®éng ®−îc ®ång bé víi nhau theo mét xung nhÞp gièng nh− trong mét chiÕc thuyÒn ®ua c¸c tay chÌo chÌo theo nhÞp cña ng−êi cÇm chÞch ®øng ®Çu thuyÒn. Xung nhÞp cµng cao tèc ®é xö lý cña vi xö lý cµng cao. Mét lÖnh m¸y cã thÓ tèn mét ®Õn vµi chôc xung nhÞp. VD: lÖnh mov tèn 4 xung nhÞp, lÖnh loop tèn 17 xung nhÞp, lÖnh RET tèn 16 xung nhÞp Mçi mét xung nhÞp gäi lµ 1 clk (clock = xung ®ång hå). C¸c vi xö lý hiÖn nay(1/2008) ®· ®¹t ®Õn tèc ®é trªn 4GHz (Trªn 4 tû clk trªn gi©y). • MSB - LSB − Trong 1 ®¬n vÞ d÷ liÖu (byte hay word) th× bit cã ý nghÜa nhÊt gäi lµ MSB (Most signification bit) − Bit Ýt cã ý nghÜa nhÊt gäi lµ LSB (Lest signification bit) • Mét sè lÖnh hay dïng + ADD: Céng hai to¸n h¹ng Viết lệnh: ADD đích, gốc Thực hiện: Đích ← Đích + Gốc Ví dụ: add ax,bx + AND: Vµ 2 to¸n h¹ng Viết lệnh: AND đích, gốc Thái Nguyên 8-2008 36
  37. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Thực hiện: Đích ← Đích AND Gốc theo bit Ví dụ: Nội dung của AL là 03h Nội dung của BL là 13h and al,bl cho kết quả là 03h cất trong AL + CALL: Gäi ch−¬ng tr×nh con Viết lệnh: CALL tên chương trình con + CLC: Xo¸ cê nhí CF ← 0 + CLI: Che c¸c ng¾t che ®−îc IF ← 0 + CMP: so s¸nh 2 byte hay 2 tõ Viết lệnh: CMP đích, gốc Thực hiện: So sánh gốc với đích. Thường dùng để tạo điều kiện cho lệnh nhảy. + DEC: Gi¶m to¸n h¹ng ®Ých ®i 1 Viết lệnh: DEC Đích Thực hiện: Giảm đích đi một đơn vị Ví dụ: AL đang là 12. Lệnh dec al sẽ cho kết quả al bằng 11. + DIV: Chia 2 sè kh«ng cã dÊu Viết lệnh: DIV gốc Thực hiện: o Nếu gốc là số 8 bit: AX/gốc, số bị chia phải là số không dấu 16 bit để trong AX. Sau khi chia AL ← thương, AH ← số dư o Nếu gốc là số 16 bit: DXAX/gốc. Số bị chia phải là số không dấu 32 bit để trong cặp thanh ghi DXAX. Sau khi chia: AX ← thương, DX ← số dư. + HLT Dừng: Khi gặp lệnh này các hoạt động của 8088 bị tạm dừng. Để thoát khỏi trạng thái dừng chỉ có thể tác động vào các chân INTR, NMI hoặc RESET. + IN: §äc d÷ liÖu tõ cæng vµo thanh chøa Acc Viết lệnh: IN Acc, Port Thực hiện: Acc ← Port. Đọc nội dung của cổng Port vào thanh chứa. Khi địa chỉ cổng > ffh cần đưa địa chỉ cổng qua thanh ghi DX. Thái Nguyên 8-2008 37
  38. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + INC: T¨ng to¸n h¹ng ®Ých lªn 1 Viết lệnh: INC Đích Thực hiện: Tăng đích lên một đơn vị Đích ← Đích +1 Ví dụ: AL đang là 12. Lệnh inc al sẽ cho kết quả nội dung của al tăng lên 1 là 13. + IRET: Trë vÒ tõ ch−¬ng tr×nh con phôc vô ng¾t + JA/JNBE, JAE/JNB/JNC, JB/JC/JNAE, JBE/JNA, JE/JZ, JG/JNLE, JGE/JNL, JL, JNGE, JLE/JNG A: Above - Cao hơn, ở phía trên E: Equal - Bằng, tương đương B: Below - Ở dưới, thấp hơn G: Great than - Lớn hơn Less than - nhỏ hơn JZ: Nhảy nếu kết quả bằng 0 JC: Nhảy nếu có cờ nhớ JAE: Nhảy nếu cao hơn hoặc bằng JBE: Nhảy nếu thấp hơn hoặc bằng + JMP: Nhảy vô điều kiện ®Õn mét ®Ých nµo ®ã + LEA: N¹p ®Þa chØ hiÖu dông vµo thanh ghi Viết lệnh LEA Đích, gốc Thực hiện: Đích thường là một trong các thanh ghi BX, CX, DX, BP, DI, SI hoặc là địa chỉ offset của một biến mảng, chuỗi. + LOOP: LÆp ®o¹n ch−¬ng tr×nh Viết lệnh: LOOP nhãn Thực hiện: Số lần lặp trong CX, sau mỗi lần thực hiện CX tự giảm đi 1. Khi cx = 0 ra khỏi vòng lặp Ví dụ: Hiện 5 ký tự ‘A’ mov cx, 5 hien: mov dl, ‘A’ mov ah, 2 int 21h loop hien Thái Nguyên 8-2008 38
  39. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + MOV: Di chuyÓn byte hay tõ Viết lệnh: MOV đích, gốc Thực hiện: Copy nội dung của gốc vào đích Ví dụ: mov al, 7 mov bl, 5 mov al, bl Sau đoạn lệnh này nội dung của al và bl đều bằng 5 + MUL: Nh©n sè kh«ng dÊu Viết lệnh: MUL gốc Thực hiện: Tuỳ theo độ dài của toán hạng gốc có hai trường hợp o Nếu gốc là số 8 bit để trong AL: AL * gốc, số bị nhân là số 8 bit để trong AL. Sau khi nhân AX ← tích. o Nếu gốc là số 16 bit: AX*gốc. Số bị nhân phải là số 16 bit trong AX. Sau khi nhân DXAX ← tích. Ví dụ: mov al,7 mov bl,5 mul bl; AL = 35 + NOP: Kh«ng lµm g× trong 8 clk + OR: HoÆc 2 to¸n h¹ng Viết lệnh: OR đích, gốc Thực hiện: Lấy nội dung của gốc OR với nội dung của gốc theo bit, kết quả cất vào đích Ví dụ: mov ax, 001fh mov bx, 1f00h or ax, bx; kết quả AX bằng 1f1fh + OUT: §−a d÷ liÖu tõ Acc ra cæng Viết lệnh: OUT Port, Acc Thái Nguyên 8-2008 39
  40. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Thực hiện: Port ← Acc. Đưa nội dung của thanh chứa ra Port. Khi địa chỉ cổng > ffh cần đưa địa chỉ cổng qua thanh ghi DX. + POP: LÊy l¹i 1 tõ tõ ®Ønh ng¨n xÕp Viết lệnh: POP đích Thực hiện: Đích ← {SP} SP ← SP + 2 + PUSH: CÊt 1 tõ vµo ng¨n xÕp Viết lệnh: PUSH gốc Thực hiện: gốc → {SP} SP ← SP - 2 + RCL: Quay tr¸i qua cê nhí Viết lệnh: RCL đích, CL Thực hiện: CF MSB LSB Sau khi quay 1 lần nội dung cờ CF mang nội dung cũ của MSB. Nếu số lần quay trong CL là 9 thì kết quả không thay đổi + RCR: Quay phải qua cê nhí CF MSB LSB Viết lệnh: RCR đích, CL Thực hiện: RCR đích, CL Sau khi quay 1 lần nội dung cờ CF mang nội dung cũ của LSB. Nếu số lần quay trong CL là 9 thì kết quả không thay đổi. + RET: Trë vÒ tõ ch−¬ng tr×nh con + ROL: Quay vßng sang tr¸i Viết lệnh: ROL đích, CL CF MSB LSB Thực hiện: MSB được đưa vào cờ CF và LSB. Nếu sau 8 lần quay kết quả không đổi. Sau 4 lần quay thì 2 nibble bị đổi chỗ. + ROR: Quay vßng sang ph¶i MSB LSB CF Viết lệnh: ROR đích, CL Thái Nguyên 8-2008 40
  41. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Thực hiện: LSB được đưa vào cờ CF và MSB. Nếu sau 8 lần quay kết quả không đổi. Sau 4 lần quay thì 2 nibble bị đổi chỗ. + SAL: DÞch tr¸i sè häc Viết lệnh: SAL đích, CL SHL đích, CL Toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau Thực hiện: CF MSB LSB 0 Thực hiện phép nhân 2 số không dấu + SAR: DÞch ph¶i sè häc Viết lệnh: SAR đích, CL Toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau Thực hiện: MSB LSB CF Sau mỗi lần dịch phải MSB được giữ lại. Thực hiện phép chia 2 số có dấu + SHR Dịch phải logic Viết lệnh: SAL đích, CL SHL đích, CL Toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau MSB Thực hiện: LSB CF 0 Thực hiện phép chia cho 2 của số không dấu + STI: LËp cê cho phÐp ng¾t IF ← 1 + SUB: Trõ 2 to¸n h¹ng Viết lệnh: SUB đích, gốc Thực hiện: đích ← đích - gốc Thái Nguyên 8-2008 41
  42. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ví dụ: mov al,9 mov bl,3 sub bl,al; bl = 6 + TEST: Vµ 2 to¸n h¹ng ®Ó t¹o cê Viết lệnh: TEST đích, gốc Thực hiện: Lấy gốc thực hiện phép ‘VÀ’ với đích. Nội dung toán hạng không thay đổi chỉ dùng để tạo cờ kiểm tra. Xoá CF, OF. Cập nhật PF, SF, ZF. + WAIT: CPU nghỉ và chê tÝn hiÖu mức thấp tõ ch©n TEST hoÆc INTR + XCHG: Tr¸o néi dung 2 to¸n h¹ng XCHG đích, gốc xchg ah, al; Tráo đổi nội dung ah và al + XOR: HoÆc lo¹i trõ 2 to¸n h¹ng Viết lệnh: XOR đích, gốc Thực hiện phép XOR theo bit giữa hai toán hạng. Kết quả cất vào đích. Ví dụ: XOR AX, AX; xoá thanh ghi AX LËp tr×nh hîp ng÷ víi 8088 • Giíi thiÖu khung cña ch−¬ng tr×nh hîp ng÷ − CÊu tróc cña 1 lÖnh hîp ng÷ Tªn M· lÖnh C¸c to¸n h¹ng Chó gi¶i TIEP: AND AL,20h ; KiÓm tra bit 5 cña thanh ghi LSR + Tr−êng tªn: Chøa tªn nh·n, tªn biÕn, tªn thñ tôc. Kh«ng ®−îc chøa dÊu c¸ch, kh«ng b¾t ®Çu b»ng sè + Tr−êng m· lÖnh: + Tr−êng to¸n h¹ng + Tr−êng chó gi¶i: Lêi gi¶i thÝch ph¶i lµ nghÜa bãng kh«ng dïng nghÜa ®en. − D÷ liÖu cho ch−¬ng tr×nh hîp ng÷ + Lo¹i sè: HÖ 2, 10, 16. NgÇm ®Þnh lµ hÖ 10. NÕu dïng hÖ 2 hoÆc 16 ph¶i thªm ký tù b¸o hiÖu. VD: MOV AL, 10 ; §−a vµo AL sè 10 MOV AL, 10h; §−a vµo AL sè 16 MOV AL, 10b; §−a vµo AL sè 2 Thái Nguyên 8-2008 42
  43. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + Lo¹i ký tù: Gåm ký tù ®¬n vµ ký tù chuçi − BiÕn vµ h»ng + BiÕn byte: Tªn DB Gi¸ trÞ khëi ®Çu B1 DB 7 C1 DB '$' + BiÕn tõ: Tªn DW Gi¸ trÞ khëi ®Çu B1 DW 64 + BiÕn m¶ng: M DB 2,4,5,9,12,3 + BiÕn kiÓu x©u ký tù tb DB 'A nho hon B$' + H»ng cã tªn: CR EQU 0Dh; carriage return LF EQU 0Ah; line feet − Khung cña 1 ch−¬ng tr×nh hîp ng÷ Khung cña ch−¬ng tr×nh EXE Một ch−¬ng tr×nh EXE khi n¹p vµo trong bé nhí sÏ n»m trong 4 đoạn, ®Þa chØ ®Çu cña mçi ®o¹n chøa trong 4 thanh ghi ®o¹n, trong khi ch−¬ng tr×nh COM chØ nằm trong 1 ®o¹n. .Model Quy m« sö dông bé nhí .Stack KÝch th−íc .Data Khai b¸o d÷ liÖu .Code Main proc ; Khëi t¹o ®o¹n d÷ liÖu mov Ax,@data mov ds,ax ; c¸c lÖnh cña thñ tôc chÝnh, c¸c lêi gäi ch−¬ng tr×nh con ; trë vÒ DOS dïng hµm 4Ch cña INT21h mov ah,4ch int 21h Thái Nguyên 8-2008 43
  44. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Main endp CTC1 proc ; c¸c lÖnh cña ch−¬ng tr×nh con 1 RET CTC1 endp CTC2 proc ; c¸c lÖnh cña ch−¬ng tr×nh con 2 RET CTC2 endp END MAIN Khung cña ch−¬ng tr×nh COM .Model tiny .Code ORG 100h START: JMP Continue ; §Þnh nghÜa cho c¸c biÕn vµ h»ng ®Ó t¹i ®©y Main proc ; c¸c lÖnh cña ch−¬ng tr×nh chÝnh INT 20h Main endp END START • C¸ch t¹o vµ cho ch¹y 1 ch−¬ng tr×nh hîp ng÷ C¸c b−íc: + So¹n m· nguån + DÞch ra file .OBJ b»ng MASM.EXE hoÆc TASM.EXE + Liªn kÕt c¸c tÖp OBJ b»ng LINK.EXE hoÆc TLINK.EXE + Ch¹y thö • C¸c cÊu tróc lËp tr×nh c¬ b¶n trong Assembly − CÊu tróc tuÇn tù: Lµ cÊu tróc th«ng dông vµ ®¬n gi¶n nhÊt. Trong cÊu tróc nµy c¸c lÖnh s¾p xÕp tuÇn tù, lÖnh nä tiÕp lÖnh kia LÖnh 1 LÖnh 2 LÖnh N Thái Nguyên 8-2008 44
  45. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ − CÊu tróc lùa chän S S § §iÒu kiÖn §iÒu kiÖn § C«ng viÖc C«ng viÖc2 C«ng viÖc1 IF - THEN IF - THEN - ELSE VD: cmp al, 0 ; AL kh¸c 0 ? jne GAN ; NÕu kh«ng th× g¸n lu«n inc al ; NÕu AL = 0 th× t¨ng al lªn 1 GAN: mov BL, AL RA: − CÊu tróc CASE BiÓu thøc Gi¸ trÞ 1 Gi¸ trÞ 2 Gi¸ trÞ N C«ng viÖc 1 C«ng viÖc 2 C«ng viÖc N VD: CMP AL,0 JE Thái Nguyên 8-2008 45
  46. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ − CÊu tróc for-do Khëi ®Çu bé ®Õm C«ng viÖc Gi¶m bé ®Õm ®i 1 S Bé ®Õm = 0? § − CÊu tróc while-do S ®iÒu kiÖn § c«ng viÖc − CÊu tróc repeat-until c«ng viÖc S ®iÒu kiÖn § Thái Nguyên 8-2008 46
  47. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ • Một số hàm, ngắt hay được sử dụng trong lập trình hợp ngữ Hàm 1 của ngắt INT 21H: Nhập ký tự vào từ bàn phím Vào: AH=1 Ra: AL = mã ASCII của ký tự AH = 0 khi ký tự gõ vào là phím chức năng Hàm 2 của ngắt INT 21H: Hiện một ký tự lên màn hình Vào: AH = 2 DL: Mã ASCII của ký tự cần hiện Hàm 9 của ngắt INT 21H: Vào: AH = 9 DX: Địa chỉ lệch của chuỗi ký tự cần hiển thị Hàm 4CH của ngắt INT 21H: Vào: AH = 4Ch • Chuyển đổi giữa mã ASCII của ký tự số và giá trị số Khi chúng ta nhập một ký tự số vào từ bàn phím của máy tính mã ASCII của nó được đặt trong thanh ghi AL và đây không phải là giá trị số. Nếu muốn tính toán với giá trị của con số nhập vào chúng ta phải đổi mã ASCII đó ra giá trị số bằng cách trừ đi 30H (do giá trị thực của con số và mã ASCII của nó cách nhau 30h trong bảng mã ASCII). Ngược lại khi muốn hiện một giá trị số đã có trong thanh ghi ta lại phải đổi giá trị số đó ra mã ASCII của nó bằng cách OR với giá trị 30H. • Các ví dụ: Ví dụ 1. Viết ra màn hình câu chào “Hello!” file chao.asm .model small .stack 100 .data tp db 'Hello!$' .code main proc mov Ax,@data Mov ds,ax Thái Nguyên 8-2008 47
  48. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ mov ah,9 lea dx,tp int 21h mov ah,4ch int 21h main endp end main Ví dụ 2. Hiện bảng mã ASCII file ascii.asm .model small .stack 20 .data tb db 'Bang ma ASCII$' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb int 21h xor dx,dx mov cx,255 mov ah,2 lap: int 21h inc dl push dx mov dl,' '; tạo khoảng cách int 21h pop dx loop lap mov ah,4ch Thái Nguyên 8-2008 48
  49. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ int 21h main endp end main Ví dụ 3. Nhập ký tự từ bàn phím. Kiểm tra xem ký tự nhập có phải là ký tự số không? file kt_sochu.asm .model small .stack 20 .data tb1 db 'nhap ky tu $' tb2 db 'day khong phai la ky tu so $' .code main proc mov ax,@data mov ds,ax nhaplai:mov ah,9 lea dx,tb1 int 21h mov ah,1 tiep:int 21h cmp al,30h jb sai cmp al,39h jg sai jmp tiep sai:mov ah,9 lea dx,tb2 int 21h jmp nhaplai ra:mov ah,4ch int 21h Thái Nguyên 8-2008 49
  50. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ main endp end main Ví dụ 4. Nhập hai số vào từ bàn phím. So sánh hai số. file so_sanh1.asm .model small .stack 20 .data tb1 db 'nhap a= $' tb2 db 'nhap b= $' tb3 db ' a > b $' tb4 db ' a < b $' tb5 db 'a=b$' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h mov ah,1 int 21h sub al,30h mov bl,al mov ah,9 lea dx,tb2 int 21h mov ah,1 int 21h sub al,30h cmp al,bl je a_bang_b jnl b_to jmp b_nho Thái Nguyên 8-2008 50
  51. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ a_bang_b: mov ah,9 lea dx,tb5 int 21h jmp ra b_to:mov ah,9 lea dx,tb4 int 21h jmp ra b_nho:mov ah,9 lea dx,tb3 int 21h ra:mov ah,4ch int 21h main endp end main Ví dụ 5. Tính tổng (hiệu) hai số có kết quả nhỏ hơn 10 nhập vào từ bàn phím file cong.asm .model small .stack 20 .data tb1 db 'nhap so a = $' tb2 db 'nhap so b = $' tb3 db 'tong 2 so la: $' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h mov ah,1 ; nhap a int 21h sub al,30h ; doi ra so Thái Nguyên 8-2008 51
  52. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ mov bl,al mov ah,9 lea dx,tb2 int 21h mov ah,1 ; nhap b int 21h sub al,30h ; doi ra so add al,bl mov dl,al or dl,30h ; doi ra ma ASCII mov bl,dl ; cat vao BL de con su dung DX mov ah,9 lea dx,tb3 int 21h mov dl,bl mov ah,2 int 21h ; hien tong ra mov ah,4ch int 21h main endp end main Ví dụ 6. Hiện một mảng phần tử trong bộ nhớ Có một mảng m có n phần tử trong bộ nhớ. Để hiện mảng m làm các bước sau: + Đưa đầu mảng m → DX → SI (hoặc DI) + Chuyển ô nhớ chứa phần tử thứ nhất vào DL + Hiện + Tăng SI (hoặc DI) lên 1 trỏ vào phần tử tiếp theo + Cho dấu ‘ ‘ (dấu cách) vào + Lặp n lần file hien_arr.asm .model small .stack 20 Thái Nguyên 8-2008 52
  53. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ .data tb db 'gia tri cua mang$' m db 7,4,5,7,2,8 .code main proc mov ax,@data mov ds,ax lea dx, m mov cx,6 mov di,dx lap: mov dl,[di] or dl,30h mov ah,2 inc di int 21h mov dl,' '; dấu cách int 21h loop lap mov ah,4ch int 21h main endp end main Ví dụ 7. Tìm max file tim_max.asm .model small .stack 20 .data tb db 'max = $' m db '3','4','5','7','2','8' .code main proc mov ax,@data Thái Nguyên 8-2008 53
  54. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ mov ds,ax lea dx, m lap:mov si,dx mov di,si mov al,[di] mov cx,5 tiep:inc si cmp al,[si] jg timtiep; neu van to hon lam tiep mov di,si ; neu khong doi cho mov al,[di] ; roi lam tiep timtiep:loop tiep mov dl,al push dx mov ah,9 lea dx,tb int 21h pop dx mov ah,2 int 21h mov ah,4ch int 21h main endp end main • Chương trình con Lợi ích của chương trình con: + Cho phép sử dụng lại các đoạn mã có công dụng giống nhau nhiều lần trong nhiều chương trình. + Mã nguồn của chương trình gọn hơn. Ví dụ 8. Viết chương trình thực hiện cộng, nhân, chia 2 số nhập vào từ bàn phím (có kết quả <10). Các chương trình nhập, hiển thị, cộng, nhân, chia viết ở dạng chương trình con. Thái Nguyên 8-2008 54
  55. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ file ctcong.asm .model small .stack 20 .data tb1 db 'a=$' tb2 db 'b=$' tb3 db 'a+b=$' tb4 db 'cong bam 1, nhan bam 2, chia bam 3 $' tb5 db 'a*b =$' tb6 db 'a/b=$' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h call nhap push ax mov ah,9 lea dx,tb2 int 21h call nhap mov bl,al; so b trong bl mov ah,9 lea dx,tb4 int 21h mov ah,1 int 21h cmp al,31h je tinhcong cmp al,32h je tinhnhan Thái Nguyên 8-2008 55
  56. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ cmp al,33h je tinhchia tinhcong: pop ax call cong push ax mov ah,9 lea dx,tb3 int 21h pop ax call hienketqua jmp ra tinhnhan: pop ax call nhan push ax mov ah,9 lea dx,tb5 int 21h pop ax call hienketqua jmp ra tinhchia: pop ax call chia push ax mov ah,9 lea dx,tb6 int 21h pop ax call hienketqua jmp ra ra: mov ah,4ch int 21h main endp nhap proc Thái Nguyên 8-2008 56
  57. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ;Thuc hien nhap kys tu so, roi doi ra so ; RA: AL chua so nhap tu ban phim mov ah,1 int 21h sub al,30h ret nhap endp cong proc ;VAO: AL: Chua so a BL: Chua so b ;RA : AL chua ket qua phep cong add al,bl or al,30h ret cong endp hienketqua proc ;VAO: AL chua ket qua phep cong mov dl,al mov ah,2 int 21h ret hienketqua endp nhan proc ;VAO: AL: so bi nhan BL: so nhan ;RA: ket qua trong AX . voi so <10 trong AL mul bl or al,30h ret nhan endp chia proc ;thuc hien a/b ;VAO AL: ra BL:b ;RA:AL chua ket qua mov ah,0 Thái Nguyên 8-2008 57
  58. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ div bl or al,30h ret chia endp END MAIN Chương trình chính và chương trình con chứa trong các tệp khác nhau Các chương trình con chúng ta có thể viết ngay dưới chương trình chính trong cùng một file mã nguồn, khi đó chương trình con được viết ra chỉ có thể dùng cho chương trình chính cũng trong file đó. Để có thể sử dụng chương trình con trong nhiều chương trình chính khác nhau chúng ta có thể viết các chương trình con để trong các file khác nhau. Khi sử dụng chỉ cần khai báo INCLUDE tên file và đường dẫn file chứa chương trình con ở sau chương trình chính. Chú ý rằng tên của file chứa chương trình con không được trùng với tên của chương trình con mà nó chứa. Ví dụ 9. Có thể viết lại ví dụ 8. Các chương trình con được chứa trong các file khác nhau và không trong file chương trình chính. Chương trình con nhap trong file ‘vao.asm’. Chương trình con cong trong file ‘add.asm’ , Chương trình con hienketqua trong file ‘display.asm’. Chương trình con nhan trong file ‘mul.asm’. Chương trình con chia trong file ‘div.asm’. Các file chứa chương trình con đặt trong cùng thư mục chứa file chương trình chính. Trong phần khai các chương trình con bây giờ chỉ cần INCLUDE .model small .stack 20 .data tb1 db 'a=$' tb2 db 'b=$' tb3 db 'a+b=$' tb4 db 'cong bam 1, nhan bam 2, chia bam 3 $' tb5 db 'a*b =$' tb6 db 'a/b=$' .code main proc Thái Nguyên 8-2008 58
  59. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h call nhap push ax mov ah,9 lea dx,tb2 int 21h call nhap mov bl,al; so b trong bl mov ah,9 lea dx,tb4 int 21h mov ah,1 int 21h cmp al,31h je tinhcong cmp al,32h je tinhnhan cmp al,33h je tinhchia tinhcong: pop ax call cong push ax mov ah,9 lea dx,tb3 int 21h pop ax call hienketqua jmp ra tinhnhan: pop ax Thái Nguyên 8-2008 59
  60. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ call nhan push ax mov ah,9 lea dx,tb5 int 21h pop ax call hienketqua jmp ra tinhchia: pop ax call chia push ax mov ah,9 lea dx,tb6 int 21h pop ax call hienketqua jmp ra ra: mov ah,4ch int 21h main endp include vao.asm include add.asm include display.asm include mul.asm include div.asm END MAIN Truyền tham số trong chương trình con: + Truyền tham số qua thanh ghi: Các chương trình chính và chương trình con hoặc giữa các chương trình con truyề tham số cho nhau qua thanh ghi. Nếu truyền giữa hai chương trình con thì giá trị trong thanh ghi là đầu ra của một chương trình con sẽ là đầu vào của một chương trình con khác. Thái Nguyên 8-2008 60
  61. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ví dụ 10. Đây là một phần của ví dụ 8. Chương trình gồm 3 chương trình con nhập số, tính cộng và hiển thị. Tham số được truyền qua thanh ghi AL .model small .stack 20 .data tb1 db 'a=$' tb2 db 'b=$' tb3 db 'a+b=$' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h call nhap push ax mov ah,9 lea dx,tb2 int 21h call nhap mov bl,al; so b trong bl tinhcong: pop ax; lấy a ra call cong push ax mov ah,9 lea dx,tb3 int 21h pop ax call hienketqua ra: mov ah,4ch int 21h Thái Nguyên 8-2008 61
  62. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ main endp nhap proc ;Thuc hien nhap kys tu so, roi doi ra so ; RA: AL chua so nhap tu ban phim mov ah,1 int 21h sub al,30h ret nhap endp cong proc ;VAO: AL: Chua so a BL: Chua so b ;RA : AL chua ket qua phep cong add al,bl or al,30h ret cong endp hienketqua proc ;VAO: AL chua ket qua phep cong mov dl,al mov ah,2 int 21h ret hienketqua endp END MAIN + Truyền tham số qua ô nhớ-biến: Ví dụ 11. Cũng vẫn yêu cầu tính tổng 2 số a, b và chúng ta vẫn viết chương trình thành 3 chương trình con .model small .stack 20 .data s db ? tb1 db 'a=$' Thái Nguyên 8-2008 62
  63. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ tb2 db 'b=$' tb3 db 'a+b=$' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h call nhap push ax mov ah,9 lea dx,tb2 int 21h call nhap mov bl,al; so b trong bl tinhcong: pop ax; lấy a ra call cong push ax mov ah,9 lea dx,tb3 int 21h pop ax call hienketqua ra: mov ah,4ch int 21h main endp nhap proc ;Thuc hien nhap kys tu so, roi doi ra so ; RA: AL chua so nhap tu ban phim mov ah,1 int 21h sub al,30h Thái Nguyên 8-2008 63
  64. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ret nhap endp cong proc ;VAO: AL: Chua so a BL: Chua so b ;RA : s chua ket qua phep cong add al,bl or al,30h mov s,al ret cong endp hienketqua proc ;VAO: s chua ket qua phep cong mov dl,s mov ah,2 int 21h ret hienketqua endp END MAIN + Truyền tham số qua ô nhớ có địa chỉ do thanh ghi chỉ ra: Ví dụ 12. .model small .stack 100 .data tb1 db 'go vao 2 so co tong nho hon 10: $' tb2 db 13,10, 'TONG CUA ' so1 db ? db ' va ' so2 db ? db ' la : ' sum db -30h,'$' .code main proc Thái Nguyên 8-2008 64
  65. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h mov ah,1 int 21h mov so1,al mov dl,',' mov ah,2 int 21h mov ah,1 int 21h mov so2,al lea si,so1 lea di,so2 lea bx,sum call add2so lea dx,tb2 mov ah,9 int 21h mov ah,4ch int 21h main endp add2so proc mov al,[si] add al,[di] add [bx],al ret add2so endp END MAIN Thái Nguyên 8-2008 65
  66. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + Truyền tham số qua ngăn xếp: Ví dụ 13. .model small .stack 100 .data tbao1 db 'go vao 2 so tong nho hon 10$' tb2 db 13,10,' tong cua' so1 db ? db ' va' So2 db ? db ' la' sum db,-30h,'$' .code main proc mov ax, @data mov ds,ax mov ah,9 la dx,tbao1 int 21h mov ah,1; Nhập So1 int 21h mov so1,al push ax mov dl,',' mov ah,2 int 21h mov ah,1; Nhập So2 int 21h mov so2,al push ax; Cất vào ngăn xếp để truyền call add2so add sum,al; Lưu kết quả để hiển thị mov ah,9 Thái Nguyên 8-2008 66
  67. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ lea dx,tbao2 int 21h mov ah,4ch int 21h main endp add2so proc ;tinh tong 2 so ;vao: ngan xep luc ke tu dinh ;dia chi tro ve ;so hang 2 ;so hang 1 ;Ra: ax chua ket qua push bp; Cất BP mov bp,sp; BP chỉ vào đỉnh ngăn xếp mov ax,[bp+6]; Lấy ký tự của So1 add ax,[bp+4]; Cộng với ký tự của So2 pop bp ; Lấy lại BP ret 4; Trở về và bỏ qua 4 byte add2so endp END MAIN • Nhập và hiện các số thập phân lớn Nhập số thập phân Để nhập số thập phân phải đổỉ chuỗi các chữ số ASCII thành dạng biểu diễn nhị phân của một số thập phân. Thuật toán: Tổng = 0 Nhập một chữ số ASCII từ bàn phím Repeat Đổi ký tự vừa nhập thành giá trị số nhị phân (GTS) Tổng = tổng*10 + GTS Nhập tiếp ký tự số Until nhập ký tự Enter Thái Nguyên 8-2008 67
  68. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Ví dụ mô tả thuật toán: Chẳng hạn chúng ta nhập số 123. Quá trình như sau: Tổng = 0 Nhập ‘1’ Đổi ‘1’ → số 1 Tổng = 10*0 + 1 Nhập ‘2’ Đổi ‘2’ → số 2 Tổng = 10*1 + 2 = 12 Nhập ‘3’ Đổi ‘3’ → số 3 Tổng = 10*12 + 3 = 123 Thuật toán được thể hiện thành chương trình con in_dec chứa trong file ‘in_deci.asm’ có nội dung như sau: ; Chuong trinh con nhap so vao tu ban phim gioi han -32768 den 32767 ; VAO: khong RA: gia tri so nhi phan trong AX in_dec proc push bx push cx push dx bat_dau: ;mov ah,2 ;mov dl,'?'; in ra dau hoi de biet duong ma nhap ;int 21h xor bx,bx ; bx chua tong xor cx,cx mov ah,1 int 21h ; ky tu vao trong al cmp al,'-' ;co phai dau am khong? je dautru ;dung thiet lap dau tru cmp al,'+' je daucong jmp tieptuc ;tiep tuc xu ly cac ky tu dautru:mov cx,1 daucong: Thái Nguyên 8-2008 68
  69. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ int 21h tieptuc: cmp al,'0' jnge khong_phai_so cmp al,'9' Jnle khong_phai_so and ax,000fh ; doi thanh chu so push ax ; cat vao ngan xep mov ax,10 mul bx ; ax=tong*10 pop bx ; phuc hoi chu so add bx,ax ;tong=tong*10+chu so mov ah,1 int 21h cmp al,13 ; da phai enter? jne tieptuc ; neu khong phai thi nhap tiep mov ax,bx ; luu so vao ax or cx,cx ; co phai so am khong? je ra neg ax ; neu la so am doi so trong ax ra so am ra: pop dx pop cx pop bx ret khong_phai_so: mov ah,2 mov dl,0dh; int 21h mov dl,0ah int 21h jmp bat_dau in_dec endp Thái Nguyên 8-2008 69
  70. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Hiện số thập phân Số nhị phân 13 = 0000 1101 Số bù 1 của 13 = 1111 0010 (đảo bit) Số bù 2 của 13 = Số bù 1 + 1 = 1111 0010 + 1 1111 0011 Khảo sátt: Giả sử trong AX có số 24168. Nếu: chia 24168/10 được 2416 dư 8 chia 2416/10 được 241 dư 6 chia 241/10 được 24 dư 1 Viết ngược được 24168 chia 24/10 được 2 dư 4 chia 2/10 được 0 dư 2 Từ đây chúng ta có các thuật cơ sở sau: Thuật toán 1: đếm = 0 Repaet Chia số bị chia cho 10 Cất số dư vào ngăn xếp đếm = đếm +1 Until thương số = 0 Thuật toán 2: For đếm do Lấy chữ số từ ngăn xếp Đổi ra ký tự Đưa ra màn hình End for Thuật toán đưa ra một số thập phân trong thanh ghi AX If 1. Nếu AX <0 thì: 2. In ra dấu ‘-‘ 3. Thay nội dung của AX = số bù 2 của nó End If Thái Nguyên 8-2008 70
  71. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 4. Lấy dạng biểu diễn thập phân các chữ số trong AX 5. Đổi số sang ký tự rồi đưa ra màn hình. Thuật toán được thể hiện thành chương trình con out_dec chứa trong file ‘out_deci.asm’ out_dec proc ;in ra noi dung cua ax duoi dang so thap phan co dau ;vao: AX ;ra: khong push ax push bx push cx push dx or ax,ax; ax<0? jge doi_ra_day; neu khong la so am thi doi ra day ky tu he 10 ; neu khong am thi push ax mov dl,'-' mov ah,2 int 21h pop ax neg ax ; ax = -ax doi_ra_day: xor cx,cx; dem = 0 mov bx,10; so chi = 10 chia: xor dx,dx; chuan bi word cao cho so bi chia div bx ;ax thuong so, dx chua so du push dx ; cat so du vao ngan xep inc cx or ax,ax; thuong so bang khong chu ci bang khong ; khi tat ca cac bit = 0 va luc do phep OR = 0 jne chia mov ah,2 hien: pop dx Thái Nguyên 8-2008 71
  72. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ or dl,30h int 21h loop hien ;ra pop dx pop cx pop bx pop ax ret out_dec endp Với hai thủ tục in_dec và out_dec chúng ta có thể sử dụng trong nhiều chương trình như một số ví dụ sau: Ví dụ 14. Cộng hai số lớn file add_big.asm .model small .stack 100 .data tb1 db 'nhap a=$' tb2 db 13,10,'nhap b=$' tb3 db 13,10,'s= $' .code main proc mov ax,@data mov ds,ax lea dx,tb1 mov ah,9 int 21h call in_dec push ax mov ah,9 lea dx,tb2 int 21h Thái Nguyên 8-2008 72
  73. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ call in_dec mov bx,ax pop ax add bx,ax; s = a+ b trong BX mov ah,9 lea dx,tb3 int 21h mov ax,bx call out_dec mov ah,4Ch int 21h main endp include in_deci.asm include out_deci.asm end main Ví dụ 15. Tính giai thừa (Chương trình tính đến 7!) file giaithua.asm .model small .stack 100 .data tb1 db 'n= $' tb2 db 13,10,'n!= $' gt dw ? .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h xor ax,ax Thái Nguyên 8-2008 73
  74. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ call in_dec mov cx,ax; cx = N mov ax,1 nhan: mul cx loop nhan push ax mov ah,9 lea dx,tb2 int 21h pop ax call out_dec mov ah,4ch int 21h main endp include in_deci.asm include out_deci.asm end main Ví dụ 16. Tính biểu thức a2 + b2 file tong_bph.asm ;Cac so nhap vao a va b <=127 .model small .stack 100 .data tb1 db 'a=$' tb2 db 13,10,'b=$' tb3 db 13,10,'abp+bbp = $' .code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,tb1 int 21h Thái Nguyên 8-2008 74
  75. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ call in_dec mul al push ax mov ah,9 lea dx,tb2 int 21h call in_dec mul al mov bx,ax mov ah,9 lea dx,tb3 int 21h pop ax add bx,ax mov ax,bx call out_dec mov ah,4ch int 21h main endp include in_deci.asm include out_deci.asm end main • Phèi ghÐp hîp ng÷ víi c¸c ng«n ng÷ bËc cao − Cã thÓ phèi hîp hîp ng÷ víi c¸c ng«n ng÷ bËc cao nh−: pascal, C, delphi, VC++ − Cã thÓ ghÐp c¸c flie ch−¬ng tr×nh hîp ng÷ ®· dÞch ra file .OBJ víi c¸c ng«n ng÷ bËc cao hoÆc chÌn c¸c ®o¹n hîp ng÷ trùc tiÕp vµo m· nguån cña c¸c ng«n ng÷ bËc cao trªn (c¸ch th«ng dông): + Víi pascal vµ delphi c¸c ®o¹n hîp ng÷ chÌn gi÷a c¸c tõ kho¸ asm c¸c lÖnh hîp ng÷ end; + Víi C vµ VC++ cã thÓ chÌn gi÷a c¸c dÊu Thái Nguyên 8-2008 75
  76. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ { c¸c lÖnh hîp ng÷ } hoÆc tr−íc mçi dßng hîp ng÷ cã dÊu _asm Ví dụ 17. Tính tổng a + b uses crt; var a,b,sum: integer; Begin clrscr; Writeln( 'a =');readln(a); Writeln( 'b =');readln(b); asm mov ax,a mov bx,b add ax,bx mov sum,ax end; Writeln(‘a + b =’,sum); readln; End. Ví dụ 18. So sánh 2 số uses crt; var a,b: integer; Procedure tohon; Begin Write ('a > b'); End; Procedure behon; Begin Write ('a < b'); End; Procedure bang; Begin Write ('a = b'); End; BEGIN clrscr; Writeln( 'a =');readln(a); Writeln( 'b =');readln(b); Thái Nguyên 8-2008 76
  77. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ asm mov ax,a mov bx,b cmp ax,bx jb @1 je @3 @2: call tohon jmp @ra @3: call bang jmp @ra @1: call behon @ra: end; readln; END. Viết kiểu tách hợp ngữ và ngôn ngữ bậc cao thành các tệp khác nhau: Với C + Các nhãn dùng chung (tên hằng, tên biến, tên chương trình con ) của các tệp Pascal và hợp ngữ phải hiểu nhau thông qua sử dụng các lệnh điều khiển khi dịch chương trình PUBLIC và EXTERNAL cho C và EXTRN cho hợp ngữ + Bất kỳ một khai báo nào của C đều là dùng chung (cho phép các modul khác được dùng nhãn mà modul C khai báo) nên không cần khai thêm PUBLIC. + muốn sử dụng một nhãn ngài nào thì C phải khai báo external với cú pháp: external kiểu tên nhãn; + Với modul Assembly phải khai báo PUBLIC với các nhãn cho phép các modul ngoài dùng với cú pháp sau: PUBLIC tên nhãn khai báo kiểu nhãn + Muốn sử dụng một nhãn đã khai báo PUBLIC ở modul ngoài (cho phép) thì modul Assembly phải khai báo EXTRN (xin phép dùng) với cú pháp sau: + EXTRN ten_nhãn: kiểu Thái Nguyên 8-2008 77
  78. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ + Thêm dấu gạch chân trước các nhãn dùg chung trong modul ngon ngữ Assembly Giá trị quay lại của hàm: unsigned char, char, enum, unsigned short, short, unsigned int, int trong AX, unsigned long, long trong DX:AX Ví dụ 19. Viết chương trình so sánh hai số nguyên (từ -32768 đến 32767) theo kiểu đa tệp: Modul C nhập hai số từ bàn phím, gọi chương trình con viết bằng hợp ngữ, hiện giá trị số bé ra màn hình. Modul hợp ngữ thực hiện so sánh hai số. Tệp C (tên f1.cpp ở thư mục C:\USER ) #include #include int so1, so2; external int MIN() void main(void) { clrscr(); printf(“\nVao so thu nhat”); scanf(“%d,&so1); printf(“\nVao so thu hai”); scanf(“%d,&so2); printf(“\n So be trong hai so là:%d”,MIN()); getch(); } Tệp Assembly (tên f2.ASM ở thư mục C:\USER ) .model small .data EXTRN _so1: WORD, _so2: WORD .code PUBLIC _MIN _MIN Proc mov AX, so1 mov BX, so2 cmp AX,BX Thái Nguyên 8-2008 78
  79. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ jl L1 xchg AX,BX L1: ret _MIN endp END Với Pascal + Các nhãn dùng chung (tên hằng, tên biến, tên chương trình con ) của các tệp Pascal và hợp ngữ phải hiểu nhau thông qua sử dụng các lệnh điều khiển khi dịch chương trình PUBLIC và EXTERNAL cho Pascal và EXTRN cho hợp ngữ + Bất kỳ một khai báo nào của Pascal đều là dùng chung nên không cần khai thêm PUBLIC. Pascal chỉ còn khai báo external với các chương trình con nằm ở modul ngoài − Với chương trình con là thủ tục thì dạng khai báo như sau: procedure ten_thu_tuc ([đối số]); external; − Với chương trình con là dạng hàm thì dạng khai báo như sau: function ten_thu_tuc ([đối số]): kiểu ; external; Ví dụ 20. Viết chương trình so sánh hai số nguyên (từ -32768 đến 32767) theo kiểu đa tệp: Modul Pascal nhập hai số từ bàn phím, gọi chương trình con viết bằng hợp ngữ, hiện giá trị số bé ra màn hình. Modul hợp ngữ thực hiện so sánh hai số. Tệp Pascal (tên f1.pas ở thư mục C:\USER ) Program so_sanh; uses crt; var so1, so2: integer; {$F+} Các chỉ thị dịch của Pascal function MIN: integer; external; {$L C:\USER\f2.obj} $L: Chỉ thị liên kết file .OBJ của Pascal {$F-} Begin clrscr; Thái Nguyên 8-2008 79
  80. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ write(‘Hay vao so thu nhat’);readln(so1); write(‘Hay vao so thu hai’);readln(so2); writeln(‘So be trong hai so la: ,MIN); readln; End. Tệp Assembly (tên f2.ASM ở thư mục C:\USER ) .model large; Viết đa tệp với Pascal quy mô phải là HUGE, LARGE hoặc MEDIUM .data EXTRN so1: WORD, so2: WORD .code PUBLIC MIN MIN Proc mov AX, so1 mov BX, so2 cmp AX,BX jl L1 xchg AX,BX L1: ret MIN endp END Tệp f2.ASM phải dịch ra .OBJ để cùng thư mục 3.3 Giíi thiÖu c¸c bé vi xö lý tiªn tiÕn dòng 80x86 3.4 Vi ®iÒu khiÓn 8x51/52 Ph©n biÖt chip vi xö lý vµ chip vi ®iÒu khiÓn Bé vi xö lý: Lµm chøc n¨ng xö lý vµ tÝnh to¸n. ChØ riªng mét chip vi xö lý th× kh«ng thÓ t¹o nªn mét hÖ thèng cã kh¶ n¨ng tÝnh to¸n vµ xö lý (hÖ vi xö lý) mµ cßn cÇn thªm c¸c chip nhí, chip ngo¹i vi, truyÒn tin, Chip vi xö lý vÝ dô 8088, 8086, Pentium I, II, III, IV Chip vi ®iÒu khiÓn: Kh¸c víi c¸c chip vi xö lý chip vi ®iÒu khiÓn ®· lµ mét hÖ thèng tÝnh to¸n trong mét chip (System on chip). Trong mét chip vi ®iÒu khiÓn ngoµi CPU ra ®· cã s½n bé nhí ROM, RAM, c¸c cæng vµo ra song song, nèi tiÕp, cæng truyÒn tin, c¸c bé ®Õm - ®Þnh thêi gian gióp cho ng−êi sö dông Thái Nguyên 8-2008 80
  81. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ thuËn tiÖn vµ dÔ dµng khi øng dông vi ®iÒu khiÓn gi¶i quyÕt c¸c bµi to¸n ®iÒu khiÓn trong thùc tÕ. Mét lo¹i vi ®iÒu khiÓn rÊt th«ng dông hiÖn nay lµ vi ®iÒu khiÓn hä 8x51/52 nh− 8031, 8032, 8051, 8052, 8951, 8952 vµ c¸c vi ®iÒu khiÓn thÕ hÖ sau nh− PIC16F84. C¸c vi ®iÒu khiÓn thÕ hÖ míi AVR nh− 90S8515, 90S8535 víi nhiÒu tÝnh n¨ng −u viÖt h¬n, tèc ®é xö lý nhanh h¬n 8051 lµ vi ®iÒu khiÓn ®Çu tiªn cña hä vi ®iÒu khiÓn ®−îc Itel chÕ t¹o. §Æc tÝnh kü thuËt c¬ b¶n nh− sau : - Lµ vi ®iÒu khiÓn 8 bit - Kh¶ n¨ng ®Þa chØ ho¸: +64K bé nhí ch−¬ng tr×nh +64K bé nhí d÷ liÖu - Cã 128 bytes nhí RAM trong - Cã 2 Time/Counters - 1 Cæng nèi tiÕp, 4 cæng vµo ra song song - Cã bé ®iÒu khiÓn ng¾t logic víi 5 nguån ng¾t - 22 thanh ghi cã chøc n¨ng ®Æc biÖt SFR (Special function registers) 8051cã thÓ ®¸nh ®Þa chØ 64K bé nhí d÷ liÖu ngoµi vµ 64K bé nhí ch−¬ng tr×nh ngoµi. Thái Nguyên 8-2008 81
  82. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ S¬ ®å khèi cña vi ®iÒu khiÓn 8051 Frequency Reference Counters Osilator 4096 bytes 128 bytes Two 16 bit And Program Data Timer/Event Timing Memory Memory Counter 8051 C P U 64 byte bus Programmable Programmable expansion I / O Serial Port Full Control Duplex UART Shifter Interrupts Control Parallel Ports Serial Serial Address Data Bus Input Output and I/O pins Vi ®iÒu khiÓn 8051 cã cæng nèi tiÕp n»m trªn chip. Chøc n¨ng quan träng cña cæng nèi tiÕp lµ biÕn ®æi d÷ liÖu tõ song song thµnh nèi tiÕp ®Ó ®Èy lªn ®−êng truyÒn vµ biÕn ®æi d÷ liÖu vµo tõ nèi tiÕp thµnh song song. ViÖc truy nhËp phÇn cøng cña cæng nèi tiÕp th«ng qua c¸c ch©n TxD vµ RxD cña 8051 vµ ®ã còng lµ 2 bit cña Port 3: P3.1 (TxD) lµ ch©n 11 P3.0 (RxD) lµ ch©n 10 Cæng nèi tiÕp cña 8051 cã thÓ truyÒn 2 chiÒu ®ång thêi (full duplex) vµ ký tù cã thÓ ®−îc nhËn vµ l−u tr÷ trong bé ®Öm trong khi ký tù thø 2 ®· ®−îc nhËn vµ nÕu CPU ®äc ký tù thø nhÊt tr−íc khi ký tù thø hai ®−îc nhËn th× d÷ liÖu kh«ng bÞ mÊt . Cã 2 thanh ghi chøc n¨ng ®Æc biÖt (Special Function Register)®Ó phÇn mÒm qua ®ã truy nhËp cæng nèi tiÕp lµ SBUF vµ SCON. SBUF (Serial port buffer) cã ®Þa chØ Thái Nguyên 8-2008 82
  83. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ 99h ®−îc xem nh− 2 buffer. Khi ghi d÷ liÖu vµo SBUF lµ truyÒn d÷ liÖu cßn khi ®äc d÷ liÖu tõ SBUF lµ nhËn d÷ liÖu tõ ®−êng truyÒn SCON (Serial port Control register) cã ®Þa chØ 98h lµ thanh ghi cã thÓ ®¸nh ®Þa chØ theo tõng bit bao gåm bit tr¹ng th¸i vµ bit ®iÒu khiÓn. Bit ®iÒu khiÓn x¸c lËp chÕ ®é ®iÒu khiÓn cho cæng nèi tiÕp vµ bit tr¹ng th¸i cho biÕt ký tù ®−îc truyÒn hay lµ ®−îc nhËn Bit tr¹ng th¸i ®−îc kiÓm ta b»ng phÇn mÒm hoÆc lËp tr×nh ®Ó g©y ra ng¾t. 8051 cã 4 chÕ ®é ho¹t ®éng, viÖc chän chÕ ®é ho¹t ®éng b»ng c¸ch x¸c lËp c¸c bit SM0 vµ SM1 cña thanh ghi SCON. Cã 3 chÕ ®é ho¹t ®éng truyÒn kh«ng ®ång bé, mçi ký tù truyÒn hoÆc nhËn theo tõng khung víi bit start vµ stop t−¬ng tù RS232 cña m¸y vi tÝnh. Cßn chÕ ®é thø 4 ho¹t ®éng nh− 1 thanh ghi dÞch ®¬n gi¶n. a.Thanh ghi dÞch 8 bit (Mode 0). Mode 0 ®−îc chän b»ng c¸ch ghi 0 vµo bit SM0 vµ SM1 cña thanh ghi SCON, x¸c lËp cæng nèi tiÕp ho¹t ®éng nh− thanh ghi dÞch 8 bit. D÷ liÖu vµo vµ ra nèi tiÕp qua RxD vµ TxD theo nhÞp ®ång hå. 8 bit ®−îc truyÒn vµ nhËn víi bit thÊp nhÊt (lest significant :LSB)®−îc truyÒn ®Çu tiªn.Tèc ®é baud ®−îc ®Æt b»ng 1/12 tèc ®é ®ång hå. Trong chÕ ®é nµy ta kh«ng nãi ®Õn RxD vµ TxD. §−êng RxD ®−îc dïng cho c¶ truyÒn vµ nhËn d÷ liÖu cßn ®−êng TxD ®−îc dïng cho tÝn hiÖu clock ViÖc truyÒn d÷ liÖu ®−îc khëi ®Çu b»ng c¸ch ghi d÷ liÖu vµo thanh ghi SBUF, d÷ liÖu ®−îc dÞch ra tõng bit ra ngoµi qua ch©n RxD (P3.0) cïng víi xung ®ång hå ®−îc göi ra ngoµi qua ®−êng TxD (P3.1). Mçi bit ®−îc truyÒn qua RxD trong 1 chu kú m¸y. ViÖc nhËn d÷ liÖu ®−îc khëi ®Çu khi bit cho phÐp nhËn (REN) ®−îc x¸c lËp lªn bit 1 vµ bit RI ph¶i xo¸ vÒ 0. Nguyªn t¾c chung lµ x¸c lËp bit REN lóc b¾t ®Çu ch−¬ng tr×nh ®Ó khëi t¹o c¸c tham sè cña cæng nèi tiÕp vµ xo¸ bit RI ®Ó b¾t ®Çu c«ng viÖc nhËn d÷ liÖu. Khi RI ®−îc xo¸, xung ®ång hå ®−îc ghi ra ch©n TxD, b¾t ®Çu chu kú m¸y tiÕp theo vµ d÷ liÖu ®−îc ®−a vµo ch©n RxD. Mét kh¶ n¨ng cña chÕ ®é thanh ghi dÞch lµ cã thÓ më réng ®−êng ra cña 8051. Thanh ghi dÞch chuyÓn ®ái nèi tiÕp thµnh song song cã thÎ kÕt nèi víi c¸c ®−êng TxD vµ RxD cung cấp thªm 8 ®−êng ra. b. 8 bit UART víi tèc ®é baud cã thÓ thay ®æi ®−îc (mode1). ë mode 1 cæng nèi tiÕp cña 8051 ho¹t ®éng nh− lµ UART 8 bit víi tèc ®é baud cã thÓ thay ®æi ®−îc. UART (Universal Asynchronous Receiver/Transmitter) lµ 1 thiÕt bÞ nhËn vµ truyÒn d÷ liÖu nèi tiÕp, mçi ký tù ®−îc truyÒn b¾t ®Çu b»ng bit start(tr¹ng th¸i thÊp ) sau ®ã Thái Nguyên 8-2008 83
  84. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ lµ c¸c bit d÷ liÖu cña ký tù ®−îc truyÒn, parity bit ®Ó kiÓm tra lçi ®−êng truyÒn vµ cuèi cïng lµ bit stop (tr¹ng th¸i cao). Mét chøc n¨ng quan träng cña UART lµ chuyÓn ®æi d÷ liÖu song song thµnh nèi tiÕp ®Ó truyÒn vµ chuyÓn ®æi nèi tiÕp thµnh song song ®Ó nhËn. Trong mode nµy, 10 bit d÷ liÖu ®−îc truyÒn qua TxD vµ nhËn vµo qua RxD vµ viÖc truyÒn còng t−¬ng tù nh− mode 0, start bit lu«n b»ng 0 sau ®ã ®Õn 8 bit d÷ liÖu (LSB ®Çu tiªn ) vµ cuèi cïng lµ stop bit. Bit TI cña SCON ®−îc lËp b»ng 1 khi bit stop ë ch©n TxD. Trong qu¸ tr×nh nhËn stop bit ®−îc ®−a vµo bit RB8 cña thanh ghi SCON vµ tèc ®é truyÒn ®−îc ®Æt b¬Ø timer1. ViÖc ®ång bé thanh ghi dÞch cña cæng nèi tiÕp ë mode 1, 2, 3 ®−îc ®iÒu khiÓn bëi Counter víi ®Çu ra counter lµ nhÞp ®ång hå ®iÒu khiÓn tèc ®é baud cßn ®Çu vµo cña counter ®−îc chän b»ng phÇn mÒm. c.9 bit UART víi tèc ®é baud cè ®Þnh (mode 2). Mode ®−îc chän b»ng c¸ch ®Æt bit SM1=1 vµ SM0=0, cæng nèi tiÕp cña 8051 sÏ ho¹t ®éng nh− UART 9 bit cã tèc ®é baud cè ®Þnh . 11bit sÏ ®−îc truyÒn vµ nhËn qua TxD vµ RxD : 1 start bit, 9bits d÷ liÖu vµ stop bit. Trong khi truyÒn bit thø 9 sÏ ®−îc ®Æt vµo TB8 cña thanh ghi SCON cßn trong khi nhËn bit thø 9 sÏ ®−îc ®Æt vµo bit RB8. Tèc ®é baud cña mode 2 cã thÓ lµ 1/32 hoÆc 1/64 xung nhÞp ®ång hå. d.9 bit UART víi tèc ®é baud cã thÓ thay ®æi ®−îc (mode 3). Mode 3 t−¬ng tù nh− mode 2 nh−ng tèc ®é baud ®−îc lËp tr×nh vµ ®−îc cung cÊp b»ng timer. Trong thùc tÕ c¶ 3 mode 1, 2, 3 lµ t−¬ng ®−¬ng nhau chØ kh¸c nhau ë chç tèc ®é baud ë mode 2 lµ cè ®Þnh cßn mode 1 vµ mode 3 cã thÓ thay ®æi ®−îc vµ sè l−îng bit d÷ liÖu cña mode 1 lµ 8 bit cßn mode 2 vµ mode 3 lµ 9 bit. • Cho phÐp nhËn (Receiver enable) Bit cho phÐp nhËn (REN) cña thanh ghi SCON ph¶i ®−îc lËp b»ng phÇn mÒm ®Ó cho phÐp nhËn d÷ liÖu. ViÖc nµy ®−îc tiÕn hµnh lóc b¾t ®Çu ch−¬ng tr×nh khi cæng nèi tiÕp, timer/counter, ®−îc khëi t¹o. Cã 2 c¸ch x¸c lËp bit nµy: SETB REN hoÆc MOV SCON,#xxx1xxxxb (Trong ®ã x cã thÓ lµ 0 hoÆc 1 tuú theo yªu cÇu cña ch−¬ng tr×nh). • Cê ng¾t (Interrupt flag) Hai bit RI vµ TI trong thanh ghi SCON ®−îc lËp lªn 1 b»ng phÇn cøng vµ ph¶i ®−îc xo¸ vÒ 0 b»ng phÇn mÒm. RI ®−îc x¸c lËp khi bit cuèi cïng cña d÷ liÖu ®−îc nhËn vµ nã cho biÕt r»ng ®· kÕt thóc truyÒn 1 byte d÷ liÖu (receiver buffer full) nã ®−îc test b»ng ch−¬ng tr×nh ®Ó g©y ra ng¾t. NÕu ch−¬ng tr×nh muèn nhËn d÷ liÖu tõ 1 Thái Nguyên 8-2008 84
  85. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ thiÕt bÞ nèi víi cæng nèi tiÕp nã ph¶i chê cho ®Õn khi RI ®−îc lËp sau ®ã xo¸ RI vµ ®äc d÷ liÖu tõ SBUF . VÝ dô: WAIT : JNB RI,WAIT ;test RI vµ chê cho ®Õn khi ®−îc lËp CLR RI ;xo¸ RI MOV A,SBUF ; §äc d÷ liÖu tõ SBUF T−¬ng tù bit TI ®−îc lËp khi bit cuèi cïng cña d÷ liÖu ®−îc truyÒn vµ nã cho biÕt r»ng ®· truyÒn xong (Transmit buffer empty). NÕu ch−¬ng tr×nh muèn göi d÷ liÖu ®Õn thiÕt bÞ nèi qua cæng nèi tiÕp nã ph¶i kiÓm tra xem ký tù tr−íc ®ã ®· göi ch−a, nÕu ch−a göi nã ph¶i chê ®Õn khi göi xong míi ®−îc göi . VÝ dô: WAIT: JNB TI,WAIT ; KiÓm tra vµ chê ®Õn khi TI set CLR TI ; NÕu set th× xo¸ TI MOV SBUF,A ; Göi d÷ liÖu vµo SBUF ®Ó truyÒn. Hệ vi xử lý sử dụng 8051 có bộ nhớ ngoài Thái Nguyên 8-2008 85
  86. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ CÁC NHÓM LỆNH CỦA 89C51 Tập lệnh của 8051 được chia thành 5 nhóm: - Số học. - Luận lý. - Chuyển dữ liệu. - Chuyển điều khiển. - Rẽ nhánh. Bảng 15. Các chi tiết thiết lập lệnh Rn Thanh ghi R0 đến R7 của bank thanh ghi được chọn. Data 8 bit địa chỉ vùng dữ liệu bên trong. Nó có thể là vùng RAM dữ liệu trong (0-127) hoặc các thanh ghi chức năng đặc biệt. @Ri 8 bit vùng RAM dữ liệu trong (0-125) được đánh giá địa chỉ gián tiếp qua thanh ghi R0 hoặc R1. #data Hằng 8 bit chức trong câu lệnh. #data 16 Hằng 16 bit chứa trong câu lệnh. Addr16 16 bit địa chỉ đích được dùng trong lệnh LCALL và LJMP. Addr11 11 bit địa chỉ đích được dùng trong lệnh LCALL và AJMP. Rel Byte offset 8 bit có dấu được dùng trong lệnh SJMP và những lệnh nhảy có điều kiện. Bit Bit được định địa chỉ trực tiếp trong RAM dữ liệu nội hoặc các thanh ghi chức năng đặc biệt. Nhóm lệnh xử lý số học Bảng 16. Lệnh xử lý số học ADD A,Rn (1byte 1 chu kỳ máy) : cộng nội dung thanh ghi Rn vào thanh ghi A. ADD A,data (21): Cộng trực tiếp 1 byte vào thanh ghi A. ADD A,@Ri (11): Cộng gián tiếp nội dung RAM chứa tại địa chỉ được khai báo trong Ri vào thanh ghi A. ADD A,#data (21): Cộng dữ liệu tức thời vào A. ADD A,Rn (11): Cộng thanh ghi và cờ nhớ vào A. Thái Nguyên 8-2008 86
  87. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ADD A,data (21): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A. ADDC A,@Ri (11): Cộng gián tiếp nội dung RAM và cờ nhớ vào A. ADDC (21): Cộng dữ liệu tức thời và cờ nhớ vào A. A,#data SUBB A,Rn (11): Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờ nhớ. SUBB A,data (21): Trừ trực tiếp A cho một số và cờ nhớ. SUBB A,@Ri (11): Trừ gián tiếp A cho một số và cờ nhớ. SUBB A,#data (21): Trừ nội dung A cho một số tức thời và cờ nhớ. INC A (11): Tăng nội dung thanh ghi A lên 1. INC Rn (11): Tăng nội dung thanh ghi Rn lên 1. INC data (21): Tăng dữ liệu trực tiếp lên 1. INC @Ri (11): Tăng gián tiếp nội dung vùng RAM lên 1. DEC A (11): Giảm nội dung thanh ghi A xuống 1. DEC Rn (11): Giảm nội dung thanh ghi Rn xuống 1. DEC data (21): Giảm dữ liệu trực tiếp xuống 1 DEC @Ri (11): Giảm gián tiếp nội dung vùng RAM xuống 1. INC DPTR (12): Tăng nội dng con trỏ dữ liệu lên 1. MUL AB (14): Nhân nội dung thanh ghi A với nội dung thanh ghi B. DIV AB (14): Chia nội dung thanh ghi A cho nội dung thanh ghi B. DA A (11): hiệu chỉnh thập phân thanh ghi A. Nhóm lệnh luận lý Bảng 17. Lệnh luận lý ANL A,Rn (11): AND nội dung thanh ghi A với nội dung thanh ghi Rn. ANL A,data (21): AND nội dung thanh ghi A với dữ liệu trực tiếp. ANL A,@Ri (11): AND nội dung thanh ghi A với dữ liệu gián tiếp trong RAM. ANL A,#data (21): AND nội dung thanh ghi với dữ liệu tức thời. ANL data,A (21): AND một dữ liệu trực tiếp với A. ANL (32): AND một dữ liệu trực tiếp với A một dữ liệu tức thời. data,#data Thái Nguyên 8-2008 87
  88. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ ANL C,bit (22): AND cờ nhớ với 1 bit trực tiếp. ANL C,/bit (22): AND cờ nhớ với bù 1 bit trực tiếp. ORL A,Rn (11): OR thanh ghi A với thanh ghi Rn. ORL A,data (21): OR thanh ghi A với một dữ liệu trực tiếp. ORL A,@Ri (11): OR thanh ghi A với một dữ liệu gián tiếp. ORL A,#data (21): OR thanh ghi A với một dữ liệu tức thời. ORL data,A (21): OR một dữ liệu trực tiếp với thanh ghi A. ORL (31) :OR một dữ liệu trực tiếp với một dữ liệu tức thời. data,#data ORL C,bit (22): OR cờ nhớ với một bit trực tiếp. ORL C,/bit (22): OR cờ nhớ với bù của một bit trực tiếp. XRL A,Rn (11): XOR thanh ghi A với thanh ghi Rn. XRL A,data (21): XOR thanh ghi A với một dữ liệu trực tiếp. XRL A,@Ri (11): XOR thanh ghi A với một dữ liệu gián tiếp. XRL A,#data (21): XOR thanh ghi A với một dữ liệu tức thời. XRL data,A (21): XOR một dữ liệu trực tiếp với thanh ghi A. XRL (31): XOR một dữ liệu trực tiếp với một dữ liệu tức thời. data,#data SETB C (11): Đặt cờ nhớ. SETB bit (21): Đặt một bit trực tiếp. CLR A (11): Xóa thanh ghi A. CLR C (11): Xóa cờ nhớ. CPL A (11): Bù nội dung thanh ghi A. CPL C (11): Bù cờ nhớ. CPL bit (21): Bù một bit trực tiếp. RL A (11): Quay trái nội dung thanh ghi A. RLC A (11): Quay trái nội dung thanh ghi A qua cờ nhớ. RR A (11): Quay phải nội dung thanh ghi A. RRC A (11): Quay phải nội dung thanh ghi A qua cờ nhớ. SWAP (11): Quay trái nội dung thanh ghi A 1 nibble (1/2byte). Thái Nguyên 8-2008 88
  89. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Nhóm lệnh chuyển dữ liệu Bảng 18. Lệnh chuyển dữ liệu MOV A,Rn (11):Chuyển nội dung thanh ghi Rn vào thanh ghi A. MOV A,data (21): Chuyển dữ liệu trực tiếp vào thanh ghi A. MOV A,@Ri (11): Chuyển dữ liệu gián tiếp vào thanh ghi A. MOV A,#data (21): Chuyển dữ liệu tức thời vào thanh ghi A. MOV Rn,data (22): Chuyển dữ liệu trực tiếp vào thanh ghi Rn. MOV Rn,#data (21): Chuyển dữ liệu tức thời vào thanh ghi Rn. MOV data,A (21): Chuyển nội dung thanh ghi A vào một dữ liệu trực tiếp. MOV data,Rn (22): Chuyển nội dung thanh ghi Rn vào một dữ liệu trực tiếp. MOV data,data (32): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp. MOV data,@Ri (22): Chuyển một dữ liệu gián tiếp vào một dữ liệu gián tiếp. MOV data,#data (32): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp. MOV @Ri,A (11): Chuyển nội dung thanh ghi A vào một dữ liệu gián tiếp. MOV @Ri,data (22): Chuyển một dữ liệu trực tiếp vào một dữ liệu gián tiếp. MOV @Ri,#data (21): Chuyển dữ liệu tức thời vào dữ liệu gián tiếp. MOV (32): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu. DPTR,#data MOV C,bit (21): Chuyển một bit trực tiếp vào cờ nhớ. MOV bit,C (22): Chuyển cờ nhớ vào một bit trực tiếp. MOV (12): Chuyển byte bộ nhớ chương trình có địa chỉ A,@A+DPTR là@A+DPRTvào thanh ghi A. MOVC (12): Chuyển byte bộ nhớ chương trình có địa chỉ là A,@A+PC @A+PC vào thanh ghi A. MOVX A,@Ri (12): Chuyển dữ liệu ngoài (8 bit địa chỉ) vào thanh ghi A. MOVX (12): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanh ghi A. A,@DPTR MOVX @Ri,A (12): Chuyển nội dung A ra dữ liệu ngoài (8 bit địa chỉ). Thái Nguyên 8-2008 89
  90. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ MOVX (12): Chuyển nội dung A ra dữ liệu bên ngoài (16 bit địa @DPTR,A chỉ). PUSH data (22): Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP. POP data (22): Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm SP. XCH A,Rn (11): Trao đổi dữ liệu giữa thanh ghi Rn v2 thanh ghi A. XCH A,data (21): Trao đổi giữa thanh ghi A và một dữ liệu trực tiếp. XCH A,@Ri (11): Trao đổi giữa thanh ghi A và một dữ liệu gián tiếp. XCHD A,@R (11): Trao đổi giữa nibble thấp (LSN) của thanh ghi A và LSN của dữ liệu gián tiếp. Nhóm lệnh chuyền điều khiển Bảng 19. Lệnh chuyển điều khiển ACALL addr11 (22): Gọi chương trình con dùng địa chì tuyệt đối. LCALL addr16 (32): Gọi chương trình con dùng địa chỉ dài. RET (12): Trở về từ lệnh gọi chương trình con. RETI (12): Trở về từ lệnh gọi ngắt. AJMP addr11 (22): Nhảy tuyệt đối. LJMP addr16 (32): Nhảy dài. SJMP rel (22):Nhảy ngắn. JMP @A+DPTR (12): Nhảy gián tiếp từ con trỏ dữ liệu. JZ rel (22): Nhảy nếu A=0. JNZ rel (22): Nhảy nếu A không bằng 0. JC rel (22): Nhảy nếu cờ nhớ được đặt. JNC rel (22): Nhảy nếu cờ nhớ không được đặt. JB bit,rel (32): Nhảy tương đối nếu bit trực tiếp được đặt. JNB bit,rel (32):Nhảy tương đối nếu bit trực tiếp không được đặt. JBC bit,rel (32): Nhảy tương đối nếu bit trực tiếp được đặt, rồi xóa bit. CJNE A,data,rel (32): So sánh dữ liệu trực tiếp với A và nhảy nếu không bằng. CJNE A,#data,rel (32): So sánh dữ liệu tức thời với A và nhảy nếu không bằng. CJNE (32): So sánh dữ liệu tức thời với nội dung thanh ghi Rn và Thái Nguyên 8-2008 90
  91. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ Rn,#data,rel nhảy nếu không bằng. CJNE (32): So sánh dữ liệu tức thời với dữ liệu gián tiếp và nhảy @Ri,#data,rel nếu không bằng. DJNZ Rn,rel (22): Giảm thanh ghi Rn và nhảy nếu không bằng. DJNZ data (32): Giảm dữ liệu trực tiếp và nhảy nếu không bằng. Các lệnh rẽ nhánh Có nhiều lệnh để điều khiển lên chương trình bao gồm việc gọi hoặc trả lại từ chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện. Tất cả các lệnh rẽ nhánh đều không ảnh hưởng đến cờ. Ta có thể định nhảy đến nơi cần nhảy mà không cần đưa rõ địa chỉ, trình biên dịch sẽ đặt địa chỉ nơi cần nhảy tới vào đúng khẩu lệnh đã đưa ra. Bảng 20. Lệnh nhảy có điều kiện Jump_if_not Jump_if C=1 JNC rel JC rel Bit=1 JNB bit,rel JB bit,rel/JNC bit,rel A=0 JNZ rel JZ rel Rn=0 DJNZ Rn,rel Direct=0 DJNZ direct,rel A direct CJNE A,direct,rel A#data CJNE A,#data,rel Rn#data CJNE Rn,#data,rel @Ri#data CJNE @Ri,#data,rel Nhảy không có điều kiện a. Cấu trúc “repeat until” Repeat Until Ngôn ngữ Assembly: LOOP: Thái Nguyên 8-2008 91
  92. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ JUMP_if_not_ ,LOOP b. Cấu trúc “while do” while do Ngôn ngữ Assembly: LOOP: JUMP_if_not_ ,DO SJMP STOP DO: SJMP LOOP STOP: c. Cấu trúc “if then else” if then else Ngôn ngữ Assembly JUMP_if_not_ ,ELSE SJMP DONE ELSE: DONE: d. Cấu trúc “case of ” case P1 of #11111110b: P2.0 = 1 #11111101b: P2.1 = 1 #11111011b: P2.2 = 1 else P2 = 0 end Ngôn ngữ Assembly CJNE P1,#11111110b, SKIP1 SETB P2.0 Thái Nguyên 8-2008 92
  93. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ SJMP EXIT SKIP1: CJNE P1,#11111101b,SKIP2 SETB P2.1 SJMP EXIT SKIP2: CJNE P1,#11111011b,SKIP3 SETB P2.2 SJMP EXIT SKIP3: MOV P2,#0 EXIT: Sau đây là sự tóm tắt từng hoạt động của lệnh nhảy. JC rel : Nhảy đến “rel” nếu cờ Carry C = 1. JNC rel : Nhảy đến “rel” nếu cờ Carry C = 0. JB bit, rel : Nhảy đến “rel” nếu (bit) = 1. JNB bit, rel : Nhảy đến “rel” nếu (bit) = 0. JBC bit, rel : Nhảy đến “rel” nếu bit = 1 và xóa bit. ACALL addr11 : Lệnh gọi tuyệt đối trong page 2K. (PC) (PC) + 2 (SP) (SP) + 1 ((SP)) (PC7PC0) (SP) (SP) + 1 ((SP)) (PC15PC8) (PC10PC0) page Address. LCALL addr16 : Lệnh gọi dài chương trình con trong 64K. (PC) (PC) + 3 (SP) (SP) + 1 ((SP)) (PC7PC0) (SP) (SP) + 1 ((SP)) (PC15PC8) (PC) Addr15Addr0. RET : Kết thúc chương trình con trở về chương trình chính. (PC15PC8) (SP) (SP) (SP) - 1 (PC7PC0) ((SP)) Thái Nguyên 8-2008 93
  94. Phạm Đức Long Bộ môn CNĐKTĐ Khoa CNTT - ĐHTN BÀI GIẢNG MÔN HỌC VI XỬ LÝ VÀ LẬP TRÌNH HỢP NGỮ (SP) (SP) -1. RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính hoạt động tương tự như RET. AJMP Addr11 : Nhảy tuyệt đối không điều kiện trong 2K. (PC) (PC) + 2 (PC10PC0) page Address. LJMP Addr16 : Nhảy dài không điều kiện trong 64K Hoạt động tương tự lệnh LCALL. SJMP rel :Nhảy ngắn không điều kiện trong (-128 127) byte (PC) (PC) + 2 (PC) (PC) + byte 2 JMP @ A + DPTR : Nhảy không điều kiện đến địa chỉ (A) + (DPTR) (PC) (A) + (DPTR) JZ rel : Nhảy đến A = 0. Thực hành lệh kế nếu A = 0. (PC) (PC) + 2 (A) = 0 (PC) (PC) + byte 2 JNZ rel : Nhảy đến A 0. Thực hành lệnh kế nếu A = 0. (PC) (PC) + 2 0 (PC) (PC) + byte 2 CJNE A, direct, rel : So sánh và nhảy đến A direct (PC) (PC) + 3 (A) (direct) (PC) (PC) + Relative Address. (A) (direct) C = 0 (A) = (direct). Thực hành lệnh kế tiếp CJNE A, # data, rel : Tương tự lệnh CJNE A, direct, rel. CJNE Rn, # data, rel : Tương tự lệnh CJNE A, direct, rel. CJNE @ Ri, # data, rel : Tương tự lệnh CJNE A, direct, rel. DJNE Rn, rel : Giảm Rn và nhảy nếu Rn 0. (PC) (PC) + 2 (Rn) (Rn) -1 (Rn) 0 (PC) (PC) + byte 2. DJNZ direct, rel : Tương tự lệnh DJNZ Rn, rel. Thái Nguyên 8-2008 94