Bài tập môn Vi xử lý - Chương 2 - Hồ Trung Mỹ
Caùc taùc vuï sao cheùp döõ lieäu
– Töø thanh ghi naøy sang thanh ghi khaùc (Td: LD A, B)
(a) Byte döõ lieäu cuï theå vaøo thanh ghi hay oâ nhôù (Td: LD B, 32H)
(b) Döõ lieäu cuï theå 16 bit vaøo caëp thanh ghi (Td: LD HL, 2050H)
– Töø oâ nhôù vaøo thanh ghi hoaëc ngöôïc laïi (Td: LD A, (2080H))
– Töø coång nhaäp coù ñòa chæ 8 bit vaøo thanh ghi A (Td: IN A, (01H))
– Töø thanh ghi A ra coång xuaát coù ñòa chæ 8 bit (Td: OUT (07H), A)
– Töø caùc thanh ghi Z80 vaøo caùc oâ nhôù stack vaø ngöôïc laïi (Td: PUSH BC)
– Hoaùn ñoåi noäi dung giöõa nhöõng thanh ghi (Td: EX DE, HL).
ÑHBK Tp HCM–BMÑT GVPT: Hoà Trung Myõ Baøi taäp Vi Xöû Lyù – Chöông 2 Giôùi thieäu moät soá nhoùm leänh trong taäp leänh Z80 VXL Z80 coù 158 kieåu leänh; noù bao goàm taát caû nhöõng leänh cuûa VXL 8085 (Intel). Moãi leänh coù 2 phaàn: moät laø taùc vuï (coâng vieäc) seõ ñöôïc thöïc hieän (nhö naïp [Load], coäng [Add], nhaûy [Jump]...) vaø ñöôïc goïi laø maõ taùc vuï hay maõ leänh (opcode); phaàn thöù hai chæ döõ lieäu laøm vieäc vôùi taùc vuï vaø ñöôïc goïi laø toaùn haïng (toaùn haïng). Caùc leänh 1 byte Trong leänh 1 byte thì maõ leänh vaø toaùn haïng trong cuøng 1 byte. Taùc vuï opcode operand Maõ nhò phaân (maõ maùy) sao cheùp noäi dung cuûa thanh ghi B vaøo thanh ghi A LD A, B 01111000 (78H) Caùc leänh 2 byte Trong leänh 2 byte thì byte ñaàu chæ maõ leänh vaø byte thöù hai chæ toaùn haïng. Taùc vuï opcode operand Maõ nhò phaân (maõ maùy) Naïp vaøo thanh ghi B soá hex 32 LD B, 32H 0000 0110 (06H) Byte1 0011 0010 (32H) Byte2 Caùc leänh 3 byte Trong leänh 3 byte thì byte ñaàu chæ maõ leänh vaø 2 byte tieáp theo chæ ñòa chæ hay döõ lieäu 16 bit theo thöù töï ngöôïc: byte thaáp tröôùc roài môùi tôùi byte cao. Taùc vuï opcode operand Maõ nhò phaân (maõ maùy) Naïp vaøo caëp thanh ghi BC giaù trò 16 bit laø 2080H LD BC, 2080H 0000 0001 (01H) Byte 1 1000 0000 (80H) Byte 2 0010 0000 (20H) Byte 3 Caùc leänh 4 byte Taùc vuï opcode operand Maõ nhò phaân (maõ maùy) Naïp vaøo thanh ghi chæ soá IX vôùi ñòa chæ 16 bit laø 2000H LD IX, 2000H 1101 1101 (DDH) Byte1 0010 0001 (21H) Byte2 0000 0000 (00H) Byte3 0010 0000 (20H) Byte4 Taäp leänh Z80 coù theå ñöôïc chia laøm 6 nhoùm chính: 1. Caùc taùc vuï naïp (Load) hoaëc sao cheùp döõ lieäu (chuyeån döõ lieäu) 2. Caùc taùc vuï soá hoïc 3. Caùc taùc vuï logic 4. Xöû lyù bit 5. Taùc vuï reõ nhaùnh chöông trình 6. Caùc taùc vuï ñieàu khieån maùy Caùc taùc vuï sao cheùp döõ lieäu – Töø thanh ghi naøy sang thanh ghi khaùc (Td: LD A, B) (a) Byte döõ lieäu cuï theå vaøo thanh ghi hay oâ nhôù (Td: LD B, 32H) (b) Döõ lieäu cuï theå 16 bit vaøo caëp thanh ghi (Td: LD HL, 2050H) – Töø oâ nhôù vaøo thanh ghi hoaëc ngöôïc laïi (Td: LD A, (2080H)) – Töø coång nhaäp coù ñòa chæ 8 bit vaøo thanh ghi A (Td: IN A, (01H)) – Töø thanh ghi A ra coång xuaát coù ñòa chæ 8 bit (Td: OUT (07H), A) – Töø caùc thanh ghi Z80 vaøo caùc oâ nhôù stack vaø ngöôïc laïi (Td: PUSH BC) – Hoaùn ñoåi noäi dung giöõa nhöõng thanh ghi (Td: EX DE, HL). Nhoùm sao cheùp 8 bit (naïp 8 bit) Daïng leänh: LD op1, op2 Leänh naøy thöïc hieän sao cheùp giaù trò cuûa toaùn haïng op2 vaøo toaùn haïng op1. Vôùi op1 vaø op2 coù theå laø: r hay r’ chæ thanh ghi 8 bit (nhö A, B,...) n chæ haèng soá nguyeân 1 byte (nhö 20H) (chæ coù vôùi op2) oâ nhôù coù ñòa chæ nn (nhö (2050H)) hoaëc ñöôïc chæ bôûi caëp thanh ghi (nhö (HL), (BC), (DE)) hoaëc ñöôïc chæ bôûi thanh ghi chæ soá (IX hoaëc IY) vôùi ñoä dôøi d. Thí duï: LD A, B LD A, 15H LD (HL), A LD B, (IX+19H) ; ñòa chæ oâ nhôù laø trò cuûa IX coäng vôùi 19H LD (1010H), A Nhoùm sao cheùp 16 bit (naïp 16 bit) Daïng leänh: LD op1, op2 Leänh naøy thöïc hieän sao cheùp giaù trò cuûa toaùn haïng op2 vaøo toaùn haïng op1. Vôùi op1 vaø op2 coù theå laø: dd chæ caëp thanh ghi 16 bit (nhö BC, DE, HL, SP) nn chæ haèng soá nguyeân 2 byte (nhö 2030H) (chæ coù vôùi op2) 2 oâ nhôù 8 bit coù ñòa chæ ñaàu laø nn (nhö (2050H)) caëp thanh ghi chæ soá (nhö IX, IY) Thí duï: LD HL, 5000H LD HL, (4545H) ; neáu oâ nhôù ôû 4545H chöùa trò 37H vaø oâ nhôù ôû 4546H chöùa A1H thì HL seõ chöùa giaù trò 16 bit laø A137H. LD IX, (6564H) LD (4392H), HL ; neáu HL chöùa A530H thì oâ nhôù ôû 4392H seõ chöùa trò 30H vaø oâ nhôù ôû 4393H seõ chöùa trò A5H. Caùc thí duï laäp trình: Thí duï 1: Xoaù 1 phaàn boä nhôù Ta muoán xoùa noäi dung boä nhôù töø ñòa chæ BASE ñeán ñòa chæ BASE + LENGTH vôùi LENGTH nhoû hôn 256. Baøi giaûi. ZEPROM: LD B, LENGTH ; Naïp vaøo B chieàu daøi LENGTH LD A, 0 ; xoùa A LD HL, BASE ; chæ ñeán BASE CLEAR: LD (HL), A ; xoùa oâ nhôù coù ñòa chæ chöùa trong HL INC HL ; HL = HL + 1 ñeå chæ ñeán oâ nhôù keá DEC B ; B = B – 1 giaûm boä ñeám soá oâ nhôù JR NZ, CLEAR RET Chuù yù: Sau khi thöïc thi leänh DEC B thì côø Z seõ ñöôïc ñaët theo giaù trò ôû B (Z=1 neáu B laø 0 vaø Z=0 neáu B khaùc 0). Leänh JR NZ, CLEAR laø leänh nhaûy töông ñoái (R=Relative=töông ñoái) ñeán nhaõn chöông trình CLEAR khi ñieàu kieän NZ ñuùng (NZ=Not Zero, nghóa laø khi Z=0) RET laø leänh return (quay veà töø chöông trình con). Ta coù theå vieát laïi ñoaïn chöông trình treân goïn hôn: ZEPROM: LD B, LENGTH ; Naïp vaøo B chieàu daøi LENGTH LD HL, BASE ; chæ ñeán BASE LOOP: LD (HL), 0 ; xoùa oâ nhôù coù ñòa chæ chöùa trong HL INC HL ; HL = HL + 1 ñeå chæ ñeán oâ nhôù keá DJNZ LOOP RET Chuù yù: YÙ nghóa cuûa leänh DJNZ LOOP töông ñöông vôùi nhoùm leänh DEC B roài JR NZ, LOOP. Nghóa laø tröôùc heát cho B = B – 1, sau ñoù kieåm tra neáu B=0 (Z=1) thì thöïc thi leänh keá, neáu B ¹ 0 (Z=0) thì nhaûy ñeán nhaõn LOOP. Thí duï 2: Kieåm tra 1 kyù töï Ta seõ kieåm tra xem kyù töï ôû oâ nhôù LOC coù baèng 0, 1, hoaëc 2 khoâng? Baøi giaûi. Ñoaïn chöông trình sau seõ thöïc hieän vieäc kieåm tra trò soá ôû oâ nhôù LOC coù baèng 0, 1, hoaëc 2 hay khoâng? ZOT: LD A, (LOC) ; laáy noäi dung oâ nhôù LOC cheùp vaøo A CP 0 ; so saùnh A vôùi 0? JP Z, ZERO ; neáu A = 0 thì nhaûy ñeán nhaõn ZERO CP 1 ; so saùnh A vôùi 1? JP Z, ONE ; neáu A = 1 thì nhaûy ñeán nhaõn ZERO CP 2 ; so saùnh A vôùi 1? JP Z, TWO ; neáu A = 2 thì nhaûy ñeán nhaõn ZERO JP NOTFND ; neáu khaùc 0, 1, 2 thì nhaûy ñeán nhaõn NOTFND Chuù yù: Leänh CP operand thöïc hieän so saùnh toaùn haïng operand (coù theå laø thanh ghi 1 byte khaùc nhö B, C,... hoaëc haèng soá 1 byte) vôùi thanh ghi A: neáu A = operand thì côø Z=1, neáu A < operand thì côø C=1. Leänh JP cond, true laø leänh nhaûy (JP=Jump=nhaûy) ñeán nhaõn true khi ñieàu kieän cond ñuùng vaø thöïc hieän leänh keá khi ñieàu kieän cond sai. Vôùi ñieàu kieän coù theå laø NZ (Not Zero=khaùc khoâng), Z (Zero=baèng khoâng), NC (No Carry=khoâng coù nhôù), C (Carry=coù nhôù), PO (Parity Odd=parity leõ), PE (Parity Even = parity chaún), P (Positive hay Plus, khi côø S=0: soá döông), M (Minus, khi côø S=1: soá aâm) Thí duï 3: Kieåm tra 1 kyù töï coù thuoäc 1 daõi trò soá khoâng Vieát chöông trình con kieåm tra xem 1 kyù töï ASCII ôû oâ nhôù LOC coù phaûi laø soá trong daõi soá töø 0 ñeán 9, neáu ñuùng thì cho côø Z=1. Baøi giaûi. BRACK: LD A, (LOC) ; laáy kyù töï vaøo A CP 30H ; so saùnh vôùi ASCII cuûa soá 0 JR C, EXIT ; neáu A < 30H thì thoaùt CP 39H ; so saùnh vôùi ASCII cuûa soá 9 JR NC, EXIT ; neáu A > 39H thì thoaùt CP A ; laøm cho côø Z=1 EXIT: RET Thí duï: Tìm phaàn töû lôùn nhaát trong baûng Ñòa chæ baét ñaàu cuûa baûng ñöôïc chöùa ôû ñòa chæ BASE. Phaàn töû ñaàu cuûa baûng laø soá byte coù trong baûng. Chöông trình sau seõ tìm phaàn töû lôùn nhaát trong baûng (giaû söû baûng chöùa caùc soá nguyeân döông). Giaù trò lôùn nhaát ñöôïc caát vaøo A, vaø vò trí cuûa noù ñöôïc caát vaøo oâ nhôù INDEX. Chöông trình naøy söû duïng caùc thanh ghi A, F, B, H vaø L, vaø seõ söû duïng ñònh ñòa chæ chæ soá ñeå coù theå tìm kieám baûng ôû baát cöù choã naøo trong boä nhôù. MAX: LD HL, BASE ; Ñòa chæ baûng LD B, (HL) ; soá byte trong baûng LD A, 0 ; xoùa giaù trò max INC HL ; khôûi trò cho chæ soá laø phaàn töû thöù nhaát LD (INDEX), HL ; phaàn töû keá LOOP: CP (HL) ; so saùnh vôùi phaàn töû keá JR NC, NOSW ; nhaûy neáu nhoû hôn A LD A, (HL) ; naïp giaù trò max môùi LD (INDEX), HL ; naïp chæ soá môùi NOSW: INC HL ; chæ ñeán phaàn töû keá DEC B ; giaûm boä ñeám JR NZ, LOOP ; laëp laïi neáu chöa duyeät heát baûng RET 2.1 Vieát chöông trình kieåm tra boä nhôù nhö sau: ñaàu tieân xoùa 1 khoái 256 byte (nghóa laø gaùn trò 00H), sau ñoù kieåm tra laïi xem caùc oâ nhôù ñoù coù baèng khoâng?. Laàn 2: Laëp laïi coâng vieäc treân vôùi caùc soá 1 (nghóa laø gaùn trò FFH). Laàn 3: Laëp laïi coâng vieäc treân vôùi caùc soá 01010101 (nghóa laø gaùn trò 55H). Vaø cuoái cuøng laàn 4 vôùi caùc soá 10101010 (nghóa laø gaùn trò AAH). 2.2 Vieát laïi chöông trình 2.1 vôùi trò kieåm tra laàn löôït laø byte 00H vaø FFH xen keû nhau. Ñoaïn chöông trình sau coù töông ñöông vôùi ñoaïn chöông trình trong thí duï 3: LD A, (CHAR) SUB 30H JP M, OUT SUB 10 JP P, OUT ADD 10 2.3 Vieát chöông trình con kieåm tra xem 1 kyù töï ASCII ôû oâ nhôù LOC coù phaûi laø chöõ trong daõi kyù töï chöõ töø A ñeán Z, neáu ñuùng thì cho côø Z=1. 2.4 Vieát chöông trình con kieåm tra xem 1 kyù töï ASCII ôû oâ nhôù LOC coù phaûi laø chöõ trong daõi kyù töï chöõ töø A ñeán Z hoaëc töø a ñeán z, neáu ñuùng thì cho côø Z=1. 2.5 Söûa laïi thí duï tìm kieám phaàn töû lôùn nhaát trong baûng ñeå laøm vieäc vôùi caû caùc soá aâm daïng buø 2. 2.6 Söûa laïi thí duï tìm kieám phaàn töû lôùn nhaát trong baûng ñeå thaønh chöông trình tìm phaàn töû nhoû nhaát trong baûng. 2.7 Vieát chöông trình saép thöù töï caùc soá trong baûng theo thöù töï taêng daàn
File đính kèm:
- bai_tap_mon_vi_xu_ly_chuong_2_ho_trung_my.doc