Bài tập Chương 2 môn Vi xử lý - Hồ Trung Mỹ
Ñ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.
Maõ nhò phaân
(maõ maùy)
01111000 (78H)
Taùc vuï
opcode
LD
operand
A, B
sao cheùp noäi dung cuûa thanh
ghi B vaøo thanh ghi A
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.
Maõ nhò phaân
(maõ maùy)
0000 0110 (06H) Byte1
0011 0010 (32H) Byte2
Taùc vuï
opcode
LD
operand
B, 32H
Naïp vaøo thanh ghi B soá hex
32
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.
Maõ nhò phaân
(maõ maùy)
Taùc vuï
opcode
operand
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
Maõ nhò phaân
(maõ maùy)
Taùc vuï
opcode
operand
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
BT-VXL-Ch 2 – trang 1
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
LD
LD
LD
LD
A, B
A, 15H
(HL), A
B, (IX+19H) ; ñòa chæ oâ nhôù laø trò cuûa IX coäng vôùi 19H
(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ø:
BT-VXL-Ch 2 – trang 2
• 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
LD
HL, 5000H
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
LD
IX, (6564H)
(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
A, 0 ; xoùa A
HL, BASE ; chæ ñeán BASE
(HL), A ; xoùa oâ nhôù coù ñòa chæ chöùa trong HL
LD
LD
CLEAR:
LD
INC HL
DEC B
; HL = HL + 1 ñeå chæ ñeán oâ nhôù keá
; 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
BT-VXL-Ch 2 – trang 3
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
CP
A, (LOC)
0
; laáy noäi dung oâ nhôù LOC cheùp vaøo A
; so saùnh A vôùi 0?
JP
CP
Z, ZERO
1
; neáu A = 0 thì nhaûy ñeán nhaõn ZERO
; so saùnh A vôùi 1?
JP
CP
Z, ONE
2
; neáu A = 1 thì nhaûy ñeán nhaõn ZERO
; so saùnh A vôùi 1?
JP
Z, TWO
; neáu A = 2 thì nhaûy ñeán nhaõn ZERO
JP
Chuù yù:
NOTFND ; neáu khaùc 0, 1, 2 thì nhaûy ñeán nhaõn NOTFND
• 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
CP
JR
A, (LOC)
30H
C, EXIT
; laáy kyù töï vaøo A
; so saùnh vôùi ASCII cuûa soá 0
; neáu A < 30H thì thoaùt
BT-VXL-Ch 2 – trang 4
CP
JR
CP
39H
NC, EXIT ; neáu A > 39H thì thoaùt
; laøm cho côø Z=1
; so saùnh vôùi ASCII cuûa soá 9
A
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
LD
LD
HL, BASE ; Ñòa chæ baûng
B, (HL)
A, 0
; soá byte trong baûng
; xoùa giaù trò max
INC HL
; khôûi trò cho chæ soá laø phaàn töû thöù nhaát
; phaàn töû keá
; so saùnh vôùi phaàn töû keá
LD
CP
JR
LD
LD
(INDEX), HL
(HL)
NC, NOSW ; nhaûy neáu nhoû hôn A
A, (HL)
(INDEX), HL
LOOP:
; naïp giaù trò max môùi
; naïp chæ soá môùi
NOSW:
INC HL
DEC B
; chæ ñeán phaàn töû keá
; 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.
2.3 Ñ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)
BT-VXL-Ch 2 – trang 5
SUB 30H
JP
M, OUT
SUB 10
JP
P, OUT
ADD 10
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, neáu ñuùng thì cho côø Z=1.
2.5 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.6 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.7 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.8 Vieát chöông trình saép thöù töï caùc soá trong baûng theo thöù töï taêng daàn
BT-VXL-Ch 2 – trang 6
Bạn đang xem tài liệu "Bài tập Chương 2 môn Vi xử lý - Hồ Trung Mỹ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_tap_chuong_2_mon_vi_xu_ly_ho_trung_my.pdf

