Đề thi vi xử lý có đáp án 3
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 /Y2: 54000 – 55FFF 0 1 0 1 0 1 1 X X X X X X X X X X X X X /Y3: 56000 – 57FFF 0 1 0 1 1 0 0 X X X X X X X X X X X X X /Y4: 58000 – 59FFF 0 1 0 1 1 0 1 X X X X X X X X X X X X X /Y5: 5A000 – 5BFFF 0 1 0 1 1 1 0 X X X X X X X X X X X X X /Y6: 5C000 – 5DFFF 0 1 0 1 1 1 1 X X X X X X X X X X X X X /Y7: 5E000 – 5FFFF 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 (16 KB) 50000 – 53FFF /CS1 ( 2 KB) 54000 – 547FF /CS2 (20 KB) 54800 – 597FF VXL_KTGHK_AY1213-S2_trang 2/6 Câu 2: (1 đ) Thiết kế bộ nhớ RAM tĩnh 16Kx8 từ 2 RAM 8Kx4, 1 RAM 8Kx8, và 1 số cổng logic: Câu 3: (1 đ) Viết các “từ điều khiển” (control word) để thực hiện phép toán sau: R3 3 x R1/2 – 2 x (bù 1 của R2) Các tác vụ Chú thích 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” Mã nhị phân SELA SELB SELD 000 Input Input Output 001 R1 R1 R1 010 R2 R2 R2 011 R3 R3 R3 100 R4 R4 R4 101 R5 R5 R5 110 R6 R6 R6 111 R7 R7 R7 OPR Tác vụ Ký hiệu 00000 Chuyển A (output = A) TSFA 00001 Tăng A thêm 1 INCA 00010 A + B ADD 00101 A – B SUB 00110 Giảm A đi 1 DECA 01000 A AND B AND 01010 A OR B OR 01100 A XOR B XOR 01110 Bù A COMA 10000 Dịch phải A SHRA 11000 Dịch trái A SHLA VXL_KTGHK_AY1213-S2_trang 3/6 Câu 4: (1.5 đ) 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 Đị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 L1: ADC A,(HL) INC HL DJNZ L1 LD (VAR1),A SRA A SRA A LD D,A SRA A SRA A LD E,A SRA A ADD A,E ADD A,D LD (VAR2),A JR $ org 200h TABLE: DEFB 12 DEFB 25 DEFB 67 VAR1: DEFS 1 VAR2: DEFS 1 a) (0.5 đ) Điền dạng số hex cho HL và dạng số thập phân cho (HL) và A: Trước khi thực thi ADC và INC Sau khi thực thi ADC và INC Lần lặp HL A (HL) Cờ 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 và B. Nếu A bằng B thì cờ C = 1, và ngược lại thì cờ C = 0. b) (0.5 đ) Viết đoạn chương trình bắt đầu từ địa chỉ 200H và áp dụng chương trình con COMP_U8 để thực hiện OR 4 bit thấp của thanh ghi D và kết quả phép toán OR 4 bit này cất ở LSB của thanh ghi E. (Thí dụ: D = 00100111B thì thanh ghi E = 01H, và D = 111110000B thì thanh ghi E = 00H) Chương trình con COMP_U8 Đoạn ch ương trình áp dụng COMP_U8 COMP_U8: CP B JR Z,OUT_1 AND A ; C <- 0 RET OUT_1: SCF ; C <- 1 RET ORG 200H ; Chuẩn bị sẵn dữ liệu trong ; thanh ghi D LD A,D AND 0FH ;Cách 2: OR 0F0H LD B,0 ;Cách 2: LD B,0F0H CALL COMP_U8 JR C,OR_OUT_0 SET 0,E ; hoặc LD E,1 JR CONTINUE OR_OUT_0: RES 0,E ; hoặc LD E,0 CONTINUE: 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 LD A,D LD (SUM),A JR $ ORG 200H TABLE: DEFB 'A' DEFB '0' DEFB '1' DEFB '1' DEFB 'C' SUM: DEFS 1 Kết thúc bài kiểm tra VXL_KTGHK_AY1213-S2_trang 5/6 Phụ lục: Một cách giải khác cho các câu hỏi trên Câu 1: b) Phần mạch giải mã địa chỉ cho /CS2 Câu 2: SV làm thiếu đường /CS của bộ nhớ 16Kx8 cũng được tối đa điểm cho câu này: Câu 3: Có nhiều cách để viết các “từ điều khiển” thực hiện phép tính: R3 3 x R1/2 – 2 x (bù 1 của R2) 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 RET COMP_U8: CP B JR NZ, OUT_0 SCF ; C <- 1 RET OUT_0: AND A ; C <- 0 RET Câu 7: Cách viết khác cho chương trình con Is_ASCII_Number: Is_ASCII_Number: CP '0' ; hoac CP 30H JR C, NOT_C CONTINUE: ; A ‘0’ và Kiểm tra tiếp xem A ‘9’ ? CP '9' ; hoac CP 39H JR NZ, NEXT ; khi A = ‘9’ thì Z = 1 và C = 0 NOT_C: CCF ; C <- NOT(C) RET NEXT: ; trường hợp A ‘9’ ; khi A > ‘9’ thì Z = 0 và C = 0 ; khi A < ‘9’ thì Z = 0 và C = 1 RET . VXL_KTGHK_AY12 13- 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-20 13 Môn: Vi xử lý – Mã MH: 402 030 Ngày thi: 20/ 03/ 20 13 – Thời gian. 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. 1/16 + 1 /32 ) = Tổng x 0 .34 Ngoài ra: 1 /3 = 0 .33 33 Như vậy tính được gần đúng Tổng /3 VXL_KTGHK_AY12 13- 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