Điểm Đ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)

Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______

Bộ môn Điện Tử duyệt

GV ra đề 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 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

0 0 0 X X X X X 0 0 1 X X X X X 0 1 0 X X X X X 0 1 1 X X X X X 1 0 0 X X X X X 1 0 1 X X X X X 1 1 0 X X X X X 1 1 1 X X X X X

1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 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

Vùng địa chỉ (HEX) /Y1: B2000–B3FFF /Y1: B2000–B3FFF /Y2: B4000–B5FFF /Y3: B6000–B7FFF /Y4: B8000–B9FFF /Y5: BA000–BBFFF /Y6: BC000–BDFFF /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.

Vùng địa chỉ (Hex) B0000–B5FFF B6000–B6FFF B7000–BA7FF Tín hiệu chọn chip /CS0 (24 KB) /CS1 ( 4 KB) /CS2 (14 KB)

VXL_KTGHK_AY1112-S2_trang 1/4

Câ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ác lệnh Z80

Câu 3: (1 đ) Viết các lệnh Z80 để thực hiện các công việc sau: Công việc a) Nạp giá trị 23H vào thanh ghi E và nạp giá Chỉ dùng 1 lệnh: LD DE, 5723H trị 57H vào thanh ghi D

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

L1:

0100 0101 0103 0104 0106

B8 28 MM 3D 10 NN 76

L2:

Lệnh CP B JR Z, L2 DEC A DJNZ L1 HALT

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) MM = 0106H – 0103H = 03H

NN = 0100H – 0106H = FAH

VXL_KTGHK_AY1112-S2_trang 2/4

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à giá trị 0 hay 1 cho các cờ C và Z. Lần lặp 1 (0.5đ) Lần lặp 2 (0.5đ) Lần lặp 3 (0.5đ)

A = 85H Cờ Z = 0 Cờ C = 0 E = F3H D = 00H

A = 78H Cờ Z = 1 Cờ C = 0 E = 78H D = 00H

A = 83H Cờ Z = 0 Cờ C = 1 E = 70H D = 01H DE = 120 + 123 + 125 = 368 = 0170H

Chương trình 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

Ý 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 . . . ; 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: . . .

; 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ác khác làm cho cờ C=0: ; STC ; C = 1 ; CCF ; C = NOT(C)=0

VXL_KTGHK_AY1112-S2_trang 3/4

Câ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

; ‘A’ = ‘a’ – 20H JR C,KTHUC CP 'z'+1 ; hoặc CP 7BH JR NC,KTHUC SUB 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. LD HL,STRING

; kiểm tra xem có đến ký tự NULL chưa?

LOOP: LD A,(HL) CP 0 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

Kết thúc bài kiểm tra

VXL_KTGHK_AY1112-S2_trang 4/4

Phụ lục: Một đáp số khác của câu 2 dùng giải mã địa chỉ toàn phần:

VXL_KTGHK_AY1112-S2_trang 5/4