VXL_KTGHK_AY1213-S2_trang 1/6
ĐHQG TPHCM–ĐH Bách Khoa
Khoa Đ-ĐT–BM Điện Tử
Điểm Đáp án của Đề kiểm tra giửa HK 2 – NH: 2012-2013
Môn: Vi xử lý – Mã MH:
402030
Ngày thi: 20/03/2013 – Thời gian làm bài: 80 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)
Chữ ký giám thị
Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______
Bộ môn Điện Tử duyệt GV ra đề và soạn đáp án Hồ Trung Mỹ
Chú ý: Xem phụ lục để coi cách giải khác (nếu có) từ trang 5
Câu 1: (3 đ)
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:
A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
Vùng địa chỉ (hex)
0 1 0 1 0 0 0 X X X X X X X X X X X X X
/Y0: 50000 – 51FFF
0 1 0 1 0 0 1 X X X X X X X X X X X X X
/Y1: 52000 – 53FFF
0 1 0 1 0 1 0 X X X X X X X X X X X X X
Từ điểu khiển
SELA SELB SELD OPR
R3 R1/2
Dịch phải = chia 2 001 000 011 10000
R0 bù 1 của R2
010 000 000 01110
R0 2 x R0
Dịch trái = nhân 2 000 000 000 11000
R3 R3 + R1
R3 = 3 x R1/2 011 001 011 00010
R3 R3 – R0
Kết quả cần tính 011 000 011 00101
Phụ lục: Ý nghĩa của các vùng trong “từ điều khiển”
Định địa chỉ của
Toán hạng 1 Toán hạng 2
CONST: EQU KKKK
0100 21 47 15 LD HL, CONST ; **
Thanh ghi Tức thời mở rộng
0103 06 05 LD B, 5
0105 B8 L1: CP B ; ** Hiểu ngầm Thanh ghi
0106 28 05 JR Z, L2
0108 3D DEC A
0109 0C INC C
010A 23 INC HL
010B 10 NN DJNZ L1
010D 76 L2: HALT
a) (0.5 đ) Hãy ghi các cách địa chỉ cho các dòng lệnh in đậm và nghiêng (đánh dấu **). (0.5 đ)
b) (1 đ) Hãy tìm các giá trị của KKKK và NN (hex): KKKK = 1547H và NN = F8H
Câu 5: (1.5 đ) Phân tích chương trình hợp ngữ Z80. Giả sử kết quả tính được 255.
Chương trình Bài làm
ORG 100H
LD B,3
LD HL,TABLE
XOR A
C
A
Cờ
C
HL
1 0200 0 12 0 12 0 0201
2 0201 12 25 0 37 0 0202
3 0202 37 67 0 104 0 0203
b) (0.5 đ) Sau khi thực thi chương trình thì nội dung (dạng số
thập phân) của các biến VAR1 và VAR2 là
(VAR1) = 104D
(VAR2) = 35D
c) (0.5 đ) Hãy cho biết chương trình này làm gì? Giải thích.
Chương trình tính tổng 3 số 8 bit trong bộ nhớ bắt đầu
từ địa chỉ 0200H rồi cất vào biến VAR1, và tính trung
bình cộng của 3 số này rồi cất vào biến VAR2.
Giải thích:
Vòng lặp L1 để cộng dồn 3 số 8 bit cho trị số Tổ
ng.
Các lần dịch phải và cộng lại tương ứng thực hiện:
A = Tổng x (1/4 + 1/16 + 1/32) = Tổng x 0.34
Ngoài ra: 1/3 = 0.3333
Như vậy tính được gần đúng Tổng/3
VXL_KTGHK_AY1213-S2_trang 4/6
Câu 6: (1 đ) Lập trình hợp ngữ Z80
a) (0.5 đ) Viết chương trình con COMP_U8 để thực hiện so sánh 2 số 8 bit không dấu trong thanh ghi A
JR $
Câu 7: (1 đ) Lập trình hợp ngữ Z80
a) (0.5 đ) Viết chương trình con Is_ASCII_Number kiểm tra nội dung của thanh ghi A nếu thuộc tập số
ASCII ( ‘0’ = 30H đến ‘9’ = 39H) thì cờ C = 1, và nếu không thuộc tập số ASCII thì cho cờ C = 0.
b) (0.5 đ) Áp dụng chương trình con Is_ASCII_Number để đếm số byte là ASCII chữ trong 1 bảng có địa
đầu trong HL và chiều dài bảng trong thanh ghi B, kết quả đếm được cất vào biến SUM.
Chương trình con Is_ASCII_Number Áp dụng chương trình con Is_ASCII_Number
Is_ASCII_Number:
CP '0' ; hoac CP 30H
JR C, OUT_0
CP '9'+1 ; hoac CP 3AH
JR NC, OUT_0
; '0' <= A <= '9'
SCF
RET
OUT_0: ; A < '0' hoac A > '9'
AND A ; C <- 0
RET
ORG 100h
LD HL,TABLE
LD B,5
LD D,0
LOOP: LD A,(HL)
CALL Is_ASCII_Number
JR NC,NEXT
INC D
NEXT: INC HL
DJNZ LOOP
Cách 2:
Các tác vụ Chú thích
Từ điểu khiển
S
ELA SELB SELD
O
PR
R0 R1/2
Dịch phải = chia 2 001 000 000 10000
R3 bù 1 của R2
010 000 011 01110
R3 R1 – R3
R3 = R1 – bù 1 của R2 001 011 011 00101
R3 R3 + R3
R3 = 2R1 – 2(bù 1 của R2) 011 011 011 00010
R3 R3 – R0
Kết quả cần tính 011 000 011 00101
. . .
VXL_KTGHK_AY1213-S2_trang 6/6
Câu 6:
Các cách viết khác cho chương trình con COMP_U8:
Chương trình con COMP_U8 – Cách 2 Chương trình con COMP_U8 – Cách 3
COMP_U8:
CP B
SCF ; C <- 1
RET Z
AND A ; C <- 0
; hoặc thay dòng AND A bằng CCF