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).

 

doc6 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: tuando | Lượt xem: 379 | Lượt tải: 0download
Tóm tắt nội dung Bài tập môn Vi xử lý - Chương 2 - Hồ Trung Mỹ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Ñ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:

  • docbai_tap_mon_vi_xu_ly_chuong_2_ho_trung_my.doc