You are on page 1of 7

Câu 1: Tính toán của bộ CPU đơn giản (3 bit)

Mã hóa các lệnh trong bộ nhớ và giải thích các bước khi thực hiện lệnh bằng mạch dãy tuần tự phép
tính:
(6 or 1) + 4 – 3

Lưu ý: Làm từ trái sang phải, trong ngoặc trước.


Bộ mã lệnh:
D2 D1 D0 Mạch điều khiển
1 0 0 0 Mov A, C: đưa dữ liệu từ thanh ghi lưu kết quả C vào thanh ghi A
2 0 0 1 Mov B, C: đưa dữ liệu từ thanh ghi lưu kết quả C vào thanh ghi B
3 0 1 0 ADD (+)
4 0 1 1 SUB (-)
5 1 0 0 AND
6 1 0 1 OR
7 1 1 0 LOAD A: Đưa dữ liệu vào thanh ghi A
8 1 1 1 LOAD B: Đưa dữ liệu vào thanh ghi B

(6 or 1) + 4 – 3 = C1 + 4 – 3 = C2 - 3
Coi 6 OR 1 = C1
Coi C1+4 = C2
Bước Mảng thanh Giải thích
ghi
1 110 LOAD A: Gọi thanh ghi A để đưa dữ liệu cần tính vào
2 110 Đưa giá trị bằng 6 vào thanh ghi A
(chuyển 6 sang nhị phân = 110)
3 111 Gọi thanh ghi B để đưa dữ liệu cần tính vào
4 001 Đưa giá trị bằng 1 vào thanh ghi B
(chuyển 1 sang nhị phân = 001)
5 101 Thực hiện phép tính OR giữa thanh ghi A và thanh ghi B, kết quả thu được
đưa vào thanh ghi C
6 000 Mov A, C: đưa dữ liệu từ thanh ghi lưu kết quả C vào thanh ghi A
7 111 Gọi thanh ghi B để đưa dữ liệu cần tính vào
8 100 Đưa giá trị bằng 4 vào thanh ghi B
(chuyển 4 sang nhị phân = 100)
9 010 Thực hiện phép tính ADD giữa thanh ghi A và thanh ghi B, kết quả thu được
đưa vào thanh ghi C
10 000 Mov A, C: đưa dữ liệu từ thanh ghi lưu kết quả C vào thanh ghi A
11 111 Gọi thanh ghi B để đưa dữ liệu cần tính vào
12 011 Đưa giá trị bằng 3 vào thanh ghi B
(chuyển 3 sang nhị phân = 011)
13 011 Thực hiện phép tính SUB giữa thanh ghi A và thanh ghi B, kết quả thu được
đưa vào thanh ghi C

LOAD A => 6 (110) => LOAD B = > 1(001) => ADD => MOV A, C => ,,.

Vidu: (6 + 1 OR 5) + 2

Câu 2:
Ghép nối mở rộng bộ nhớ cho 8085 (VXL cơ bản lâu rồi, có 16-bit địa chỉ)
Mã nhị phân 16-bit địa chỉ Hexa
Đầu tiên (thấp nhất) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
Thứ 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h
Thứ 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0002h
……..
Cuối cùng (cao 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFh
nhất)

+ Bộ nhớ lẻ, bắt đầu từ địa chỉ bất kỳ trong không gian bộ nhớ hoặc địa chỉ thấp nhất trong không gian
bộ nhớ (0000h)
Mã hexa (cơ số 16): 0000h hoặc 0x0000
1 số màu đỏ ở trên tương đương 4-bit nhị phân
0000h = 0x0000 = 16 bit = 0000 0000 0000 0000 (nhị phân)
+ Bộ nhớ chẵn, bắt đầu từ địa chỉ bất kỳ trong không gian bộ nhớ hoặc địa chỉ thấp nhất trong không
gian bộ nhớ (0000h)
+ Bộ nhớ chẵn hoặc lẻ, ở địa chỉ cao nhất trong không gian bộ nhớ (FFFFh = 0xFFFF)

Vidu: Mở rộng bộ nhớ 4KB cho 8085 từ các IC nhớ 2 KB, với địa chỉ bắt đầu là 0x8000 (8000h)

Giải:
B1: Hình dung trong tưởng tượng là sẽ cần bao nhiêu IC, cần bộ nhớ 4 KB từ IC 2 KB=> cần 2 IC 2KB
B2: Tính toán chuyển dung lượng sang nhị phân để biết xem là cần bao nhiêu bit đường địa chỉ để kết
nối.
(1 KB = 1024 bit)
IC1: 2 KB = 2. 1024 = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ từ A0 đến A10
Tên của từng bit A15 A1 A0
Đầu tiên (thấp nhất) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16-bit địa chỉ, đặt địa chỉ là A (Address)
IC2: 2 KB = 2. 1024 = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ từ A0 đến A10

B3: Chuyển địa chỉ bắt đầu đề bài cho sang nhị phân.
+ Chuyển địa chỉ bắt đầu 0x8000 (8000h) sang nhị phân.
0x8000 = 1000 0000 0000 0000

B4: Thực hiện gán địa chỉ cho IC như đã tính ở bước 2
IC1: 2 KB (sử dụng 11 đường địa chỉ)
Đề bài cho cái địa bắt đầu ở đề bài, chính là cái vị trí mà mình sẽ gắn cái con IC nhớ đầu tiên vào
Địa chỉ bắt đầu: 1000 0|000 0000 0000
Địa chỉ kết thúc: 1000 0|111 1111 1111
Tất cả bit sau dấu gạch thẳng => chuyển sang bit trạng thái cuối cùng (0 => 1, 1010 => 1111, 10001 =>
1111, 100000011100 => 111111111111)

=> Cần tính địa chỉ bắt đầu cho IC2= Địa chỉ kết thúc IC1 + 1
1000 0|111 1111 1111 + 1 = 1000 1|000 0000 0000
IC2: 2 KB (sử dụng 11 đường địa chỉ)
Địa chỉ bắt đầu: 1000 1|000 0000 0000
Địa chỉ kết thúc: 1000 1|111 1111 1111

B5: Vẽ sơ đồ kết nối 8085 với IC1 và IC2

Vidu: Mở rộng bộ nhớ 2KB từ các IC nhớ 1 KB, địa chỉ bắt đầu từ địa chỉ thấp nhất trong không gian bộ
nhớ.

=> 2 IC 1 KB.

Vidu2: Mở rộng bộ nhớ 2KB từ các IC nhớ 1 KB, địa chỉ bắt đầu từ địa chỉ 0x7005
IC1: 1 KB
Địa chỉ bắt đầu: 1110 00|00 0000 0101
Địa chỉ kết thúc: 1110 00|11 1111 1111

Vidu 3: Mở rộng bộ nhớ 4KB từ các IC nhớ 1 KB, địa chỉ bắt đầu từ địa chỉ 0x7060

Giải:
B1: Tưởng tượng tính toán số lượng IC cần sử dụng. cần bộ nhớ 4 KB từ IC 1KB => 4 con IC 1 KB
B2: Tính toán số đường địa chỉ (bus) của IC cần sử dụng.
IC1: 1 KB = 1024 = 210
=> Sử dụng 10 đường địa chỉ từ A0 đến A9
IC2: 1 KB = 1024 = 210
=> Sử dụng 10 đường địa chỉ từ A0 đến A9
IC3: 1 KB = 1024 = 210
=> Sử dụng 10 đường địa chỉ từ A0 đến A9
IC4: 1 KB = 1024 = 210
=> Sử dụng 10 đường địa chỉ từ A0 đến A9
B3: Chuyển địa chỉ đề bài cho (mã hexa) sang mã nhị phân
0x7060 = 0111 0000 0110 0000
B4: Tìm địa chỉ bắt đầu và địa chỉ kết thúc cho các IC
IC1: 1 KB (sử dụng 10 đường địa chỉ)
A15 A0
Địa chỉ bắt đầu: 0111 00|00 0110 0000
Địa chỉ kết thúc: 0111 00|11 1111 1111

IC2: 1 KB (sử dụng 10 đường địa chỉ)


Địa chỉ bắt đầu: (IC1 (trước dấu gạch thẳng) +1, sau dấu gạch thẳng chuyển về 0)
A15 A0
Địa chỉ bắt đầu: 0111 01|00 0000 0000
Địa chỉ kết thúc: 0111 01|11 1111 1111

IC3: 1 KB (sử dụng 10 đường địa chỉ)


Địa chỉ bắt đầu: (IC2 (trước dấu gạch thẳng) +1, sau dấu gạch thẳng chuyển về 0)
A15 A0
Địa chỉ bắt đầu: 0111 10|00 0000 0000
Địa chỉ kết thúc: 0111 10|11 1111 1111

IC4: 1 KB (sử dụng 10 đường địa chỉ)


Địa chỉ bắt đầu: (IC3 (trước dấu gạch thẳng) +1, sau dấu gạch thẳng chuyển về 0)
A15 A0
Địa chỉ bắt đầu: 0111 11|00 0000 0000
Địa chỉ kết thúc: 0111 11|11 1111 1111
B5: Vẽ sơ đồ kết nối với 8085
+ Cần sử dụng đến các bit nằm trước dấu gạch đứng ở các IC trong bước 4
+ Vẽ các chân cơ bản đủ của một IC: databus, tên IC, chân CS
+ Chân CS có gạch ngang ở trên đầu biểu thị tín hiệu vào phải ở mức 0
+ Sử dụng các loại tính toán cơ bản trong điện tử số để tạo ra cái tín hiệu mức 0 từ tổ hợp các đường địa
chỉ còn lại. (Not, and, or, nand, xor,….)

TH2: Mở rộng bộ nhớ lẻ từ các IC 2KB, 4KB.


VD: Mở rộng bộ nhớ 3KB (5KB, 7KB) từ các IC 2 KB.
B1: Cần bao nhiêu IC =? 2 cái IC
B2: Tính toán đường bit địa chỉ cần sử dụng.
IC1: 2 KB = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ từ A0 đến A10
IC2: 1 KB (hiểu trong tưởng tượng là con này nó tổng là 2 KB) = 210
=> Sử dụng 10 đường địa chỉ từ A0 đến A9

VD: Mở rộng bộ nhớ 3 KB từ 1 IC 4 KB ở địa chỉ bắt đầu 0000h (địa chỉ thấp nhất trong không gian bộ
nhớ)
B1: Cần 1 IC 4 KB
B2: Tính toán số đường địa chỉ cần sử dụng
IC1: 2 KB (hiểu trong tưởng tượng là con này nó tổng là 4 KB => còn thừa 2 KB)
2 KB = 2. 1024 = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ A0 đến A10

IC1: 1 KB (hiểu trong tưởng tượng là con này nó tổng là 4 KB => còn thừa 1 KB)
1 KB = 1024 = 210
=> Sử dụng 10 đường địa chỉ A0 đến A9
B3: Chuyển địa chỉ bắt đầu sang mã nhị phân
0000h = 0000 0000 0000 0000

B4: Tìm địa chỉ bắt đầu và kết thúc


(Coi như là đang làm cho 2 IC khác nhau)
IC1: 2 KB (sử dụng 11 đường địa chỉ) và 1 KB (sử dụng 10 đường địa chỉ)
A15 A0
Địa chỉ bắt đầu (2KB): 0000 0|000 0000 0000
Địa chỉ kết thúc (2KB): 0000 0|111 1111 1111
Địa chỉ bắt đầu (1KB): 0000 10|00 0000 0000
Địa chỉ kết thúc (1KB): 0000 10|11 1111 1111
B5: Vẽ sơ đồ với 8085
+ Đối với bộ nhớ lẻ mà sử dụng 1 IC chẵn thì nhớ địa chỉ kết thúc cuối cùng (trước dấu gạch thẳng)
+ Vẽ các chân cơ bản đủ của một IC: databus, tên IC, chân CS
+ Chân CS có gạch ngang ở trên đầu biểu thị tín hiệu vào phải ở mức 0
+ Sử dụng các loại tính toán cơ bản trong điện tử số để tạo ra cái tín hiệu mức 0 từ tổ hợp các đường địa
chỉ còn lại. (Not, and, or, nand, xor,….)

Vidu: bộ nhớ 5KB từ các IC nhớ 2KB với địa chỉ bắt đầu 4000h
Vidu2: Bộ nhớ 7KB từ một IC nhớ 8KB với địa chỉ bắt đầu 8000h

TH3: Mở rộng bộ nhớ ở địa chỉ cao nhất trong không gian bộ nhớ (FFFFh hoặc có thể viết là 0xFFFF)
Vidu: bộ nhớ 4KB từ IC 2KB ở địa chỉ cao nhất trong không gian bộ nhớ

B1: tính toán số lượng IC cần dùng => dùng 2 cái IC


B2: Tính toán số đường bit địa chỉ cần sử dụng
IC1: 2 KB = 2. 1024 = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ A0 đến A10
IC2: 2 KB = 2. 1024 = 2. 210 = 211
=> Sử dụng 11 đường địa chỉ A0 đến A10
B3: chuyển mã hexa sang nhị phân
FFFFh = 1111 1111 1111 1111
B4: Tìm địa chỉ bắt đầu và kết thúc (điểm khác biệt nằm ở đây)
IC1: 2 KB (sử dụng 11 đường địa chỉ)
A15 A0
Địa chỉ kết thúc: 1111 1|111 1111 1111
Địa chỉ bắt đầu: 1111 1|000 0000 0000
Các bit đằng sau dấu gạch đứng chuyển hết về 0
Địa chỉ kết thúc của IC2=IC1 -1 (đằng trước dấu gạch đứng), đằng sau chuyển về 1
IC2: 2 KB (sử dụng 11 đường địa chỉ)
A15 A0
Địa chỉ kết thúc: 1111 0|111 1111 1111
Địa chỉ bắt đầu: 1111 0|000 0000 0000
B5: Vẽ sơ đồ 8085
+ Sử dụng địa chỉ bắt đầu của từng IC (trước dấu gạch thẳng)
+ Vẽ các chân cơ bản đủ của một IC: databus, tên IC, chân CS
+ Chân CS có gạch ngang ở trên đầu biểu thị tín hiệu vào phải ở mức 0
+ Sử dụng các loại tính toán cơ bản trong điện tử số để tạo ra cái tín hiệu mức 0 từ tổ hợp các đường địa
chỉ còn lại. (Not, and, or, nand, xor,….)

Vidu: Mở rộng bộ nhớ 6KB từ các IC 2KB ở địa chỉ cao nhất trong không gian bộ nhớ.

You might also like