Tải bản đầy đủ (.pdf) (6 trang)

Đề thi vi xử lý có đáp án 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (422.28 KB, 6 trang )

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


×