Vẽ hình trực tiếp lên mạch giải mã phía trên... Câu 5: 2 đ Phân tích đoạn chương trình hợp ngữ Z80 sau bằng cách ghi các giá trị hex ở các thanh ghi trong bảng sau khi thực hiện lệnh v
Trang 1ĐHQG TPHCM–ĐH Bách Khoa
Khoa Đ-ĐT–BM Điện Tử
Chữ ký giám thị Đáp án của Đề kiểm tra giửa HK 2 – NH:2011-2012
Môn: Vi xử lý – Mã MH:402030 Ngày thi: 04/04/2012 – 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 máy tính)
Điểm
Họ và tên SV: MSSV: Nhóm:
Hồ Trung Mỹ
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)
1 0 1 1 0 0 0 X X X X X X X X X X X X X /Y0: B0000–B1FFF
1 0 1 1 0 0 1 X X X X X X X X X X X X X /Y1: B2000–B3FFF
1 0 1 1 0 1 0 X X X X X X X X X X X X X /Y2: B4000–B5FFF
1 0 1 1 0 1 1 X X X X X X X X X X X X X /Y3: B6000–B7FFF
1 0 1 1 1 0 0 X X X X X X X X X X X X X /Y4: B8000–B9FFF
1 0 1 1 1 0 1 X X X X X X X X X X X X X /Y5: BA000–BBFFF
1 0 1 1 1 1 0 X X X X X X X X X X X X X /Y6: BC000–BDFFF
1 0 1 1 1 1 1 X X X X X X X X X X X X X /Y7: BE000–BFFFF
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, /CS2 (giải mã địa chỉ toàn phần) tích cực thấp và có các vùng địa chỉ liên tục Vẽ hình trực
tiếp lên mạch giải mã phía trên
Tín hiệu chọn chip Vùng địa chỉ (Hex)
/CS0 (24 KB) B0000–B5FFF /CS1 ( 4 KB) B6000–B6FFF /CS2 (14 KB) B7000–BA7FF
Trang 2Câu 2: (1 đ)
Vẽ thêm các đường kết nối (có thể dùng thêm các cổng logic) CPU với ROM và RAM tĩnh để CPU có thể
truy cập ROM 8Kx8 với vùng địa chỉ (hex): 0000–1FFF và RAM 8Kx8 với vùng địa chỉ (hex): 4000–5FFF
Xem cách giải khác dùng giải mã toàn phần ở phần phụ lục!
Chú ý:
Các tín hiệu RD và WR của CPU không bao giờ đồng thời bằng 0
Đường R/W của RAM = 1 là cho phép đọc và = 0 là cho phép ghi
Câu 3: (1 đ)
Viết các lệnh Z80 để thực hiện các công việc sau:
a) Nạp giá trị 23H vào thanh ghi E và nạp giá
trị 57H vào thanh ghi D Chỉ dùng 1 lệnh: LD DE, 5723H
b) Xóa cờ carry C Chỉ dùng 1 lệnh: OR A
(hoặc AND A hoặc XOR A hoặc CP A) c) Hoán đổi 4 bit thấp và 4 bit cao của thanh
ghi A Tối đa 4 lệnh: RRCA (hoặc dùng toàn RLCA) RRCA
RRCA RRCA d) Nạp giá trị 28H vào ô nhớ có địa chỉ là 200H Tối đa 2 lệnh: LD A,28H
LD (0200H), A Câu 4: (1 đ)
Cho trước đoạn chương trình hợp ngữ Z80 sau:
Địa chỉ (hex) Mã máy (hex) Nhãn Lệnh
Các byte MM và NN (hex) có giá trị sau: (byte thấp của phép toán trừ 2 số 16 bit)
Trang 3Câu 5: (2 đ)
Phân tích đoạn chương trình hợp ngữ Z80 sau bằng cách ghi các giá trị hex ở các thanh ghi trong bảng sau
khi thực hiện lệnh và giá trị 0 hay 1 cho các cờ C và Z
Chương trình Lần lặp 1 (0.5đ) Lần lặp 2 (0.5đ) Lần lặp 3 (0.5đ)
ORG 100H
LD B,3
LD HL,TABLE
XOR A
LD D,A
LD E,A
L1: LD A,(HL)
BIT 7,A
JR Z,L2
NEG
L2: ADD A,E
LD E,A
LD A,D
ADC A,0
LD D,A
INC HL
DJNZ L1
JR $
TABLE: DEFB 120
DEFB -123
DEFB -125
DEFB 57
A = 78H
Cờ Z = 1
Cờ C = 0
E = 78H
D = 00H
A = 85H
Cờ Z = 0
Cờ C = 0
E = F3H
D = 00H
A = 83H
Cờ Z = 0
Cờ C = 1
E = 70H
D = 01H
DE = 120 + 123 + 125 = 368 = 0170H
Ý nghĩa của đoạn chương trình trên là: (0.5 đ)
Tính tổng trị tuyệt đối của N phần tử đầu trong bảng (N là giá trị ở trong B)
Câu 6: (1 đ)
a) Viết chương trình con AND_8 để thực hiện AND 8 bit trong thanh ghi A và kết quả đặt ở cờ C (thí dụ: nếu A = 0FH thì cờ C = 0, nếu A = FFH thì cờ C = 1)
b) Viết đoạn chương trình gọi AND_8 để thực hiện AND 4 bit thấp của thanh ghi A và kết quả đặt ở LSB của thanh ghi B (thí dụ A= 5FH thì LSB của B là 1, nếu A = 2EH thì LSB của B là 0)
Chương trình con AND_8 Đoạn chương trình thực hiện AND 4 bit thấp của A
; Chuong trinh con AND 8 bit
AND_8: CP 0FFH
JR Z,AND_8_1
AND A ; cờ C = 0
RET
AND_8_1:
SCF ; cờ C = 1
RET
; Có cách khác làm cho cờ C=0:
; SCF ; C = 1
; CCF ; C = NOT(C)=0
; A đã chứa trị cần tính
OR 0F0H CALL AND_8
JR C,OUT_1 RES 0,B ; LSB của B = 0
JR NEXT OUT_1: SET 0,B ; LSB của B = 1 NEXT:
Trang 4Câu 7: (1 đ)
a) Viết chương trình con a_z2A_Z bằng hợp ngữ Z80 kiểm tra nội dung của thanh ghi A nếu thuộc ký
tự chữ thường (thuộc tập ký tự từ ‘a’ đến ‘z’) thì biến đổi nó thành ký tự chữ in hoa (thuộc tập ký tự
từ ‘A’ đến ‘Z’), ngược lại thì không thay đổi nội dung thanh ghi A Biết mã ASCII của các ký tự ‘a’
đến ‘z’ là 61H đến 7AH và mã ASCII của các ký tự ‘A’ đến ‘Z’ là 41H đến 5AH (0.5 đ)
a_z2A_Z:
CP 'a' ; hoặc CP 61H RET C
CP 'z'+1 ; hoặc CP 7BH RET NC
ADD A,'A'-'a' ; hoặc ADD A,0E0H hoặc ADD A,-20H RET
Có thể viết theo cách khác:
A_z2A_Z: CP 'a' ; hoặc CP 61H
JR C,KTHUC
CP 'z'+1 ; hoặc CP 7BH
JR NC,KTHUC SUB 20H ; ‘A’ = ‘a’ – 20H KTHUC: RET
b) Viết đoạn chương trình gọi chương trình con ở a) để thực hiện biến đổi các ký tự chữ thường sang
chữ hoa trong chuỗi ký tự được khai báo với nhãn STRING có kết thúc chuỗi là ký tự NULL (mã
ASCII là 0) (0.5 đ)
Thí dụ: STRING: DB ‘H’, ’e’, ’l’, ‘l’, ‘o’, 0 (trong bộ nhớ chứa “Hello”)
Sau khi chạy đoạn chương trình này, ta thấy trong bộ nhớ có nội dung giống như ta định nghĩa
STRING: DB ‘H’, ’E’, ’L’, ‘L’, ‘O’, 0
Bài giải
LOOP: LD A,(HL)
CP 0 ; kiểm tra xem có đến ký tự NULL chưa?
JR Z,NEXT CALL a_z2A_Z
LD (HL),A INC HL
JR LOOP NEXT: JR $ ; Phần định nghĩa STRING có thể xem như cho trước, không ghi cũng được
STRING: DEFB 'H' DEFB 'e' DEFB 'l' DEFB 'l' DEFB 'o' DEFB 0
Trang 5Phụ lục:
Một đáp số khác của câu 2 dùng giải mã địa chỉ toàn phần:
Bảng chân trị của tín hiệu R/W của RAM:
Suy ra có 4 nghiệm cho R/W: (chọn 1 trong 4 nghiệm)
R/W = NOT(RD) OR WR (khi cho tất cả X=0)
R/W = NOT(RD) AND WR (khi cho tất cả X=0)
R/W = WR (khi rút gọn với X)
R/W = NOT(RD) (khi rút gọn với X)