Đề kiểm tra giữa học kỳ 2 môn Vi xử lý - Năm học 2013-2014 - Hồ Trung Mỹ

ĐHQG TPHCM–ĐH Bách Khoa  
Khoa Đ-ĐT–BM Điện Tử  
GV soạn đáp án: Hồ Trung Mỹ  
Điểm  
Đề kiểm tra giửa HK 2 – NH: 2013-2014  
Chữ ký giám thị  
Môn: Vi xử lý – Mã MH: 402030  
Ngày thi: 26/03/2014 – Thời gian làm bài: 75 phút  
Đề có 4 trang và SV làm trực tiếp trên đề.  
(SV được sử dụng tài liệu của mình, KHÔNG được dùng Laptop)  
Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______  
Bộ môn Điện Tử duyệt  
GV ra đề  
Hồ Trung Mỹ  
Câu 1: (2 đ)  
Mạch giải mã địa chỉ cho các bộ nhớ (có số bit dữ liệu là 8) dùng 74138 như hình sau:  
a) Xác định vùng địa chỉ của các ngõ ra /Yi:  
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0  
Vùng địa chỉ (hex)  
/Y0: 0000 – 0FFF  
/Y1: 1000 – 1FFF  
/Y2: 2000 – 2FFF  
/Y3: 3000 – 3FFF  
/Y4: 4000 – 4FFF  
/Y5: 5000 – 5FFF  
/Y6: 6000 – 6FFF  
/Y7: 7000 – 7FFF  
0 0 0 0  
0 0 0 1  
0 0 1 0  
0 0 1 1  
0 1 0 0  
0 1 0 1  
0 1 1 0  
0 1 1 1  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
X X X X X X X X X X X X  
b) Từ mạch giải mã trên, sử dụng thêm các cổng logic cần thiết để tạo ra các tín hiệu chọn chip /CS0,  
/CS1 (giải mã địa chỉ toàn phần) tích cực thấp và có các vùng địa chỉ sau. Vẽ hình trực tiếp lên  
mạch giải mã địa chỉ phía trên.  
Tín hiệu chọn chip  
/CS0  
Vùng địa chỉ (Hex)  
1000 – 2FFF  
/CS1  
5400 – 57FF  
Đáp án của VXL_KTGHK_AY1314-S2_trang 1/5  
Câu 2: (3 đ)  
a) (1 đ) Cho trước các mạch giải mã địa chỉ bộ nhớ sau:  
Mạch giải mã địa chỉ ban đầu  
Mạch giải mã địa chỉ mới  
i) (0.5 đ) Bộ nhớ này có vùng địa chỉ là: A8000H – AFFFFH  
ii) (0.5 đ) Vẽ lại mạch giải mã địa chỉ mới (không cần vẽ lại bộ nhớ) để có địa chỉ bắt đầu là 50000H. Chỉ  
dùng các cổng logic để thiết kế mạch.  
b) (0.5 đ) Điền vào bảng sau giá trị của các biến 2 byte X (bắt đầu từ địa chì 1000H) và Y (bắt đầu từ địa  
chì 1002H) nếu sắp xếp thứ tự byte trong bộ nhớ theo: i) little endian và ii) big endian.  
Địa chì Nội dung  
Little Endian  
Big Endian  
Dạng thập phân  
1000H  
1001H  
1002H  
1003H  
A5H  
42H  
27H  
C3H  
Biến 2 byte  
Dạng thập phân  
Dạng hex  
Dạng hex  
có dấu  
+17061  
–15577  
có dấu  
–23230  
+10179  
42A5H  
C327H  
A542H  
27C3H  
X
Y
c) (0.5 đ) Hãy cho biết giá trị của các cờ trong thanh ghi F của Z80 sau khi thực thi các lệnh sau:  
LD  
A, 75H  
ADD A, 6CH  
0
1
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
1
0
1
0
0
1
1
0
0
0
0
0
0
1
0
1
Nhớ  
Cờ  
S
0
C
0
H
0
P/V  
0
75H  
6CH  
Trước  
+
Tổng  
Sau  
1
0
1
1
d) (1 đ) Viết các “từ điều khiển” để thực hiện phép toán sau: R3 5 x R1/4 – 3 x (bù 2 của R2)  
Từ điểu khiển  
Các tác vụ  
Chú thích  
SELA SELB SELD  
OPR  
Dịch phải = chia 2  
Dịch phải = chia 2  
R1/4 + R1 = 5R1/4  
001  
011  
011  
010  
010  
010  
100  
011  
000  
000  
001  
000  
000  
010  
010  
100  
011  
011  
011  
010  
010  
100  
100  
011  
10000  
10000  
00010  
01110  
00001  
00010  
00010  
00101  
R3 R1/2  
R3 R3/2 = R1/4  
R3 R3 + R1  
R2 bù 1 của R2  
R2 R2 + 1  
R2 = bù 2 của R2  
R4 = 2 x (bù 2 của R2)  
R4 = 3 x (bù 2 của R2)  
R3 = 5R1/4 – 3 x (bù 2 của R2)  
R4 R2 + R2  
R4 R4 + R2  
R3 R3 – R4  
Đáp án của VXL_KTGHK_AY1314-S2_trang 2/5  
Ý nghĩa của các vùng trong “từ điều khiển”:  
Mã nhị phân SELA SELB SELD  
OPR  
Tác vụ  
Ký hiệu  
TSFA  
INCA  
ADD  
00000 Chuyển A (output = A)  
000  
001  
010  
011  
100  
101  
110  
111  
Input Input Output  
00001  
00010  
00101  
00110  
01000  
01010  
01100  
01110  
10000  
11000  
Tăng A thêm 1  
A + B  
R1  
R2  
R3  
R4  
R5  
R6  
R7  
R1  
R2  
R3  
R4  
R5  
R6  
R7  
R1  
R2  
R3  
R4  
R5  
R6  
R7  
A – B  
SUB  
Giảm A đi 1  
A AND B  
A OR B  
DECA  
AND  
OR  
A XOR B  
Bù A  
XOR  
COMA  
SHRA  
SHLA  
Dịch phải A  
Dịch trái A  
Câu 3: (2.5 đ)  
a) (1 đ) Trước khi thực thi đoạn chương trình Z80 sau, giả sử các nội dung thanh ghi:  
HL = 0203H, IX = 0204H, DE = 5678H, SP = 0205H  
Bộ nhớ  
Hợp ngữ Z80  
A
D
E
SP  
Địa chỉ  
0200H  
0201H  
0202H  
0203H  
0204H  
0205H  
0206H  
SRAM  
A5H  
47H  
19H  
C6H  
E8H  
13H  
02H  
Trị mới  
LD A, (IX + 2)  
LD E, (IX – 3)  
LD D, (HL)  
PUSH DE  
02H ___ ___  
_________  
04H  
02H  
47H  
C6H  
___ ___ 47H _________  
___ C6H ___  
_________  
___ ___ ___  
0203H  
INC HL  
___  
___  
___ ___ _________  
___ ___  
0201H  
PUSH HL  
Đoạn chương trình trên được thực thi liên tục, hãy điền vào bảng các thanh ghi có trị bị thay đổi sau khi  
Z80 thực thi mỗi dòng lệnh và nội dung các ô nhớ bị thay đổi.  
b) (0.5 đ) Hãy cho biết cách định địa chỉ của các toán hạng trong các lệnh sau:  
Định địa chỉ của  
Lệnh Z80  
Toán hạng 1  
Thanh ghi  
Thanh ghi  
Toán hạng 2  
Chỉ số  
LD A, (IX + 2)  
LD D, (HL)  
Gián tiếp thanh ghi  
c) (0.5 đ) Hãy đánh dấu vào ô nào có mã điều kiện (cc) làm cho đoạn chương trình sau nhảy đến nhãn  
CONT. Thí dụ nếu cc = NC thì xét xem lệnh JR NC, CONT có nhảy đến nhãn CONT không? Nếu có  
thì đánh dấu vào ô NC trong bảng (giả sử A đang chứa giá trị 12).  
Chuỗi lệnh  
CP –18  
JR cc, CONT  
C
NC  
Z
NZ  
d) (0.5 đ) Lệnh nhảy JR NEXT có mã máy chứa trong bộ nhớ chương trình lần lượt là 18H, 57H. Nếu  
lệnh này bắt đầu ở địa chỉ 0218H, như vậy nhãn NEXT có địa chỉ là bao nhiêu? Tại sao?  
Ta có: Địa chỉ lệnh kế = địa chỉ lệnh hiện tại + chiều dài lệnh = 0218H + 2 = 021AH  
Địa chỉ nhảy đến (NEXT) = Địa chỉ lệnh kế + offset = 021AH + 57H = 0271H  
Câu 4: (1.5 đ) Phân tích chương trình hợp ngữ Z80.  
Giả sử ta có sẵn trong bộ nhớ bắt đầu từ địa chỉ 0200H các nội dung sau:  
0, 1, 4, 9, 16, 25, 36, 49, 64, 81  
nghĩa là (0200H) = 0, (0201H) = 1, ... , (0209H) = 81  
Đáp án của VXL_KTGHK_AY1314-S2_trang 3/5  
Chương trình  
Bài làm  
ORG 100H  
ORG 200H  
DEFB 0  
DEFB 1  
DEFB 4  
DEFB 9  
DEFB 16  
DEFB 25  
DEFB 36  
DEFB 49  
DEFB 64  
DEFB 81  
END  
a) (0.5 đ) Giả sử B và C chứa các giá trị nguyên không dấu  
luôn nhỏ hơn 10, hãy tính giá trị cất vào ô nhớ Result với  
các trường hợp sau:  
LD H,02H  
IN A,(01H)  
AND 3  
CP 0  
JR Z, L1  
CP 2  
JR Z,L3  
JR NC,L4  
A
0
1
2
3
B
5
5
5
5
C
7
7
7
7
(Result)  
2
15  
7
L2: SRA B  
SRA B  
SLA C  
LD A,B  
ADD A,C  
JR Fin  
L1: LD A,B  
SUB C  
JP P, Nxt  
NEG  
Nxt: JR Fin  
L3: LD A,B  
CP C  
25  
Chú ý: giá trị A trong bảng trên là giá trị sau lệnh AND 3  
b) (1 đ) Hãy điền vào bảng hoạt động của chương trình này.  
(Chú ý: B và C chứa các giá trị nguyên không dấu < 10)  
A
0
1
2
3
Phép tính  
(Result) = | B – C |  
JR NC,Fin  
LD A,C  
JR Fin  
L4: LD A,B  
AND 0FH  
LD L,A  
LD A,(HL)  
Fin: LD (Result),A  
Here: JR Here  
(Result) = B/4 + 2 x C  
(Result) = max(B, C)  
(Result) = B x B = B2  
Result: DEFS 1  
Câu 5: (1 đ) Lập trình hợp ngữ Z80  
a) (0.5 đ) Viết chương trình con BCD2Bin để đổi 1 số BCD 2 ký số trong thanh ghi A thành số nhị phân  
tương ứng đặt lại vào thanh ghi A.  
b) (0.5 đ) Viết đoạn chương trình bắt đầu từ địa chỉ 100H thực hiện chuyển 5 byte (mỗi byte là số BCD 2  
ký số) từng vùng có địa chỉ đầu 0220H sang vùng có địa chỉ đầu 0230H, trước khi điền mỗi byte vào  
vùng mới thì đổi nó sang nhị phân.  
Chương trình con BCD2Bin  
Đoạn chương trình áp dụng BCD2Bin  
BCD2Bin:  
ORG 100h  
LD D,A ; A = abH (dạng BCD)  
AND 0FH ; A = 0bH = b  
LD E,A ; E = 0bH = b  
LD A,D  
LD  
LD  
B,5  
HL,0220H  
IX,0230H  
A,(HL)  
LD  
Loop: LD  
AND 0F0H ; A = a0H và cờ CY = 0  
RLCA ; hoặc 4 RRCA  
RLCA  
CALL BCD2Bin  
LD  
(IX+0),A  
HL  
INC  
INC  
RLCA  
IX  
RLCA ; A = 0aH  
DJNZ Loop  
Here: JR Here  
ADD A,A ; A = 2a  
LD  
D,A ; D = 2a  
ADD A,A ; A = 2a + 2a = 4a  
ADD A,A ; A = 4a + 4a = 8a  
ADD A,D ; A = 8a + 2a = 10a  
ADD A,E ; A = 10a + b (dạng binary)  
RET  
Kết thúc bài kiểm tra  
Đáp án của VXL_KTGHK_AY1314-S2_trang 4/5  
Phụ lục: Các cách giải khác cho câu 5.  
1) Tối ưu mã cho cách đã giải:  
Chương trình con BCD2Bin  
Đoạn chương trình áp dụng BCD2Bin  
BCD2Bin:  
ORG 100h  
LD D,A ; A = abH (dạng BCD)  
AND 0FH ; A = 0bH = b  
LD E,A ; E = 0bH = b  
LD A,D  
LD  
LD  
B,5  
IX,0220H  
A,(IX)  
Loop: LD  
CALL BCD2Bin  
AND 0F0H ; A = a0H và cờ CY = 0  
RRCA ; A = a0H/2 = 16a/2 = 8a  
LD D,A ; D = 8a  
LD  
(IX + 10H),A  
IX  
INC  
DJNZ Loop  
Here: JR Here  
RRCA ; A = 8a/2 = 4a  
RRCA ; A = 4a/2 = 2a  
ADD A,D; A = 2a + 8a = 10a  
ADD A,E ; A = 10a + b (dạng binary)  
RET  
; Nhận xét:  
; Hai địa chỉ của đích và nguồn lệch nhau  
;
0230H – 0220H = 0010H  
; Nhận xét:  
; nếu 0 <= a <=9 thì 16a = a x 24 = a << 4 = a0H  
; RRCA = A >> 1  
2) Nhân 10 bằng phép cộng nhiều lần:  
Chương trình con BCD2Bin  
Đoạn chương trình áp dụng BCD2Bin  
BCD2Bin:  
ORG 100h  
PUSH BC  
LD  
LD  
B,5  
LD B,A ; A = abH (dạng BCD)  
AND 0FH ; A = 0bH = b  
LD C,A ; C = 0bH = b  
LD A,B  
HL,0220H  
DE,0230H  
A,(HL)  
LD  
Loop: LD  
CALL BCD2Bin  
AND 0F0H ; A = a0H và cờ CY = 0  
RLCA ; hoặc 4 RRCA  
RLCA  
LD  
(DE),A  
HL  
INC  
INC  
DE  
RLCA  
DJNZ Loop  
Here: JR Here  
RLCA ; A = 0aH = a  
LD B,A ; B = a  
LD A,C ; A = b  
LD C,B ; C = a  
Loop:  
ADD A,C ; A = A + a  
DJNZ Loop  
; A = 10a + b (dạng binary)  
POP BC  
RET  
3) Chuyển BCD sang nhị phân bằng cách tra bảng: (SV hãy tự viết cho cách này!)  
Đáp án của VXL_KTGHK_AY1314-S2_trang 5/5  
pdf 5 trang myanh 16320 Free
Bạn đang xem tài liệu "Đề kiểm tra giữa học kỳ 2 môn Vi xử lý - Năm học 2013-2014 - 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:

  • pdfde_kiem_tra_giua_hoc_ky_2_mon_vi_xu_ly_nam_hoc_2013_2014_ho.pdf