1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lớn kiến trúc máy tính Đề tài mô phỏng hiển thị Đèn led 7 thanh Để Đếm số từ 0 Đến 9

109 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mô phỏng hiển thị đèn LED 7 thanh để đếm số từ 0 đến 9
Tác giả Nguyễn Tuấn Anh, Trần Đức An, Hoàng Ngọc Đức, Nguyễn Đình Huy, Ngô Hoàng Nam, Ngô Minh Phong, Trần Tiến Vũ
Người hướng dẫn ThS. Đinh Xuân Trường
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Công nghệ Thông tin
Thể loại Bài tập lớn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 109
Dung lượng 15,89 MB

Nội dung

Bài số 1: Lập trình hợp ngữ Assembly Câu 5: Viết chương trình hợp ngữ Assembly cho phép nhập 1 chuỗi ký tự, in ra màn hình chuỗi ký tự đó theo dạng viết hoa và viết thường Flow chart Hì

Trang 1

-BÀI TẬP LỚN KIẾN TRÚC MÁY TÍNH

Nhóm: LỚP N05 – NHÓM KH

Tên các thành viên

Trang 2

1.1.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 7

1.2 TRẦN ĐỨC AN: B22DCKH002 10

1.2.1 Bài số 1: Lập trình hợp ngữ Assembly 10

1.2.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 16

1.3 HOÀNG NGỌC ĐỨC :B22DCKH032 21

1.3.1 Câu 1: Lập trình hợp ngữ Assembly 21

1.3.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 27

1.4 NGUYỄN ĐÌNH HUY: B22DCKH052 30

1.4.1 Bài số 1: Lập trình hợp ngữ Assembly 30

1.4.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 35

1.5 NGUYỄN HOÀNG NAM: B22DCKH079 38

1.5.1 Bài số 1: Lập trình hợp ngữ Assembly 38

1.5.2 bài số 2: Thực hành phân tích khảo sát bộ nhớ 43

1.6 NGÔ MINH PHONG: B22DCKH085 46

1.6.1 Bài số 1: Lập trình hợp ngữ Assembly 46

1.6.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 52

1.7 TRẦN TIẾN VŨ : B22DCKH134 54

1.7.1 Bài số 1: Lập trình hợp ngữ Assembly 54

1.1.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ: 61

PHẦN 2: PHẦN NHÓM 64

2.1 ĐỀ TÀI SNAKE GAME 65

2.1.1 Giới thiệu đề tài 65

2.1.2.Nội dung đề tài 65

Trang 3

2.2.3 Giải thích 85 2.2.4 Trình bày và giải thích mã nguồn chương trình 96 2.2.5 Tài liệu tham khảo 97

Trang 4

Tên thành viên Mã số sinh viên Bài tập Phần 1

Trang 5

1.1 NGUYỄN TUẤN ANH: B22DCKH005

1.1.1 Bài số 1: Lập trình hợp ngữ Assembly

Câu 5: Viết chương trình hợp ngữ Assembly cho phép nhập 1 chuỗi ký tự, in ra màn

hình chuỗi ký tự đó theo dạng viết hoa và viết thường

Flow chart

Hình 1: Flow chart “in ra màn hình chuỗi ký tự nhập vào theo dạng viết hoa và viết

thường”

Trang 6

Hình 2: Mã nguồn “in ra màn hình chuỗi ký tự nhập vào theo dạng viết hoa và viết thường”

Giao diện hiển thị

Trang 7

Câu 12: Viết chương trình hợp ngữ Assembly cho phép nhập vào một số và in ra

màn hình giai thừa của số đó.

Flow chart

Hình 4: Flow chart “in ra màn hình giai thừa của một số nhập vào từ bàn phím”

Mã nguồn Asm8086

Trang 8

Hình 5: Mã nguồn “in ra màn hình giai thừa của một số nhập vào từ bàn phím”

Giao diện hiển thị

Trang 9

Câu 16: Viết chương trình hợp ngữ Assembly tính tổng 2 số kiểu word

Flow chart

Hình 7: Flow chart “in ra tổng hai số kiểu word nhập vào từ bàn phím”

Mã nguồn Asm8086

Trang 10

Hình 8: Mã nguồn “in ra tổng hai số kiểu word nhập vào từ bàn phím”

Giao diện hiển thị

Trang 11

RAM

Trang 12

Hình 11: Giao diện phần mềm CPU-ZCác thông số trên ảnh bao gồm:

Loại RAM: DDR4

Kích thước: 16 GBytes

Channel #: Dual

SSD

Trang 13

Kích thước : 476.92GB

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SP

Hình 13: Giao diện debug emu8086

VD:

AX = 0124 (hex), mã hàm cho một hàm DOS cụ thể.

BX = 000A (hex), một giá trị hoặc chỉ số cụ thể trong chương trình.

CX = 0001 (hex), một đếm hoặc biến lặp.

DX = 0017 (hex), một giá trị hoặc chỉ số cụ thể trong chương trình.

SP = 0100 (hex), con trỏ ngăn xếp.

BP = 0000 (hex), một con trỏ cơ sở hoặc chỉ số trong bộ nhớ dữ liệu.

SI = 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DI= 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DS = 0720 (hex), ES = 0700 (hex), SS = 0710 (hex), CS = 0724 (hex), các thanh ghi segment

chứa các địa chỉ của các đoạn chương trình

IP = 0032 (hex), địa chỉ hiện tại của lệnh được thực thi.

Lệnh INT 021h được sử dụng để gọi một dịch vụ hệ thống DOS.

Trang 14

Câu 4: Viết chương trình hợp ngữ Assembly cho phép nhập 1 ký tự viết thường và in

ra màn hình chữ hoa của ký tự đó.

Flow chart

Hình 14: Flow chart “chuyển kí tự in thường sang in hoa”

Trang 15

Mã nguồn Asm8086

Hình 15 : Mã nguồn “chuyển kí tự in thường sang in hoa”

Giao diện hiển thị

Trang 16

Câu 11 : Viết chương trình hợp ngữ Assembly tìm giá trị lớn nhất và nhỏ nhất của

một mảng số

Flow chart

Trang 17

Mã nguồn Asm8086

Hình 18: Mã nguồn “in số lớn nhất và nhỏ nhất của mảng”

Giao diện hiển thị

Trang 18

Hình 19: Giao diện hiển thị “in số lớn nhất và nhỏ nhất của mảng”

Câu 17 : Viết chương trình hợp ngữ cho phép nhập vào một mảng gồm 10 số có hai

chữ số Tính tổng các số chia hết cho 7 In tổng thu được ra màn hình dưới dạng thập phân.

Flow chart

Trang 19

Hình 20: Flow chart “in tổng các số chia hết cho 7 trong mảng”

Mã nguồn Asm8086

Trang 20

Hình 21: Mã nguồn “in tổng các số chia hết cho 7 trong mảng”

Giao diện hiển thị

Trang 21

Hình 22: Giao diện hiển thị “in tổng các số chia hết cho 7 trong mảng”

1.2.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:

Khảo sát cấu hình của máy và hệ thống bộ nhớ của máy đang sử dụng phần mềm CPU-Z bit v2.09.0x64:

64-Hình 23: Giao diện phần mềm CPU-ZCác thông số bao gồm :

Processor: Intel Core i5 11400H

Trang 22

Hình 24 : Giao diện phần mềm CPU-Z

Các thông số trên ảnh bao gồm:

Loại RAM: DDR4Kích thước: 8 GbytesChannel #: Single

Trang 23

Hình 25 : Giao diện Disk ManagementCác thông số trên ảnh bao gồm:

Loại ổ cứng: SSD

Kích thước: 476.92 GB

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP,DS,ES,SS,CS,BP,SP

Công cụ sử dụng: emu8086 microprocessor emulator

Trang 24

Giải thích nội dung các thanh ghi, trên cơ sở đó giải thích cơ chế quản lý bộ nhớ của

hệ thống trong trường hợp cụ thể này

Trang 25

▶ BP (Base Pointer)=0000: Con trỏ cơ sở, chứa địa chỉ của dữ liệu trong

đoạn ngăn xếp SS hoặc các đoạn khác SS:BP

▶ SI (Source Index)=0000: Thanh ghi chỉ số nguồn SI thường dùng chứa

địa chỉ ô nhớ nguồn ở đoạn dữ liệu DS như trong các lệnh chuỗi trong

các thao tác chuyển dữ liệu DS:SI

▶ DI (Destination Index)=0000: Thanh ghi chỉ số đích DI thường dùng chứa

địa chỉ ô nhớ đích ở đoạn dữ liệu DS trong các thao tác chuyển dữ

liệu DS:DI

▶ SI và DI có thể được sử dụng như thanh ghi đa năng

- Các thanh ghi đoạn:

▶ CS (Code Segment)=0723: Thanh ghi đoạn mã CS chứa địa chỉ bắt đầu

đoạn mã

▶ DS (Data Segment)=0720: Thanh ghi đoạn dữ liệu DS chứa địa chỉ bắt

đầu đoạn dữ liệu

▶ SS (Stack Segment)=0710: Thanh ghi đoạn ngăn xếp SS chứa địa chỉ bắt

đầu đoạn ngăn xếp

▶ ES (Extra Segment)=0700: Thanh ghi đoạn dữ liệu mở rộng ES chứa địa

chỉ bắt đầu đoạn dữ liệu mở rộng

▶IP (Instruction Pointer)=0025: Con trỏ lệnh (còn gọi là bộ đếm chương trình

PC) IP luôn chứa địa chỉ của lệnh tiếp theo sẽ được thực hiện;

• Thanh ghi IP (con trỏ lệnh) chứa địa chỉ offset của lệnh tiếp theo

• CS:IP chứa địa chỉ logic của lệnh tiếp theo đó

*Sau câu lệnh 33

Thay đổi:

Câu lệnh sub al,32 đã được thực hiện nghĩa là trừ đi giá trị ở thanh ghi al đi 32 đơn vị

IP tăng lên để trỏ đến vị trí của câu lệnh tiếp theo

• AX = 0961

• IP = 0027

Trang 26

Câu 2 : Viết chương trình hợp ngữ Assembly cho phép nhập 1 ký tự và in ra màn

hình ký tự đó.

Flow chart

Hình 26: Flow chart “nhập và in ra màn hình kí tự đó”

Mã nguồn Asm8086

Trang 27

Hình 28: Giao diện hiển thị “nhập và in ra màn hình kí tự đó”

Câu 9 :Viết chương trình hợp ngữ Assembly cho phép nhập số nhị phân (8bit) chứa

vào trong thanh ghi BL Chương trình phải kiểm tra ký tự nhập có hợp lệ hay không (ký

tự "0"hoặc ký tự "1") Việc nhập kết thúc khi nhấn # hoặc đủ 8 bit Xuất ra số đã nhập dưới dạng hệ thập lục phân (hệ 16).

Flow chart

Trang 28

Hình 29: Flow chart “Chuyển nhị phân sang thập lục phân”

Mã nguồn Asm8086

Trang 29

Hình 30: Mã nguồn “Chuyển nhị phân sang thập lục phân”

Trang 30

Giao diện hiển thị

Hình 31: Giao diện hiển thị “Chuyển nhị phân sang thập lục phân”

Trang 31

Câu 19 : Viết chương trình hợp ngữ cho hai chuỗi ký tự A và B có độ dài là n và m (n

> m), chỉ ra xâu B có phải là xâu con của xâu A không? Nếu xâu B là xâu con của xâu

A thì chỉ ra vị trí xâu B ở xâu A.

Flow chart

Hình 32: Flow chart “B có phải là xâu con của A hay không”

Trang 32

Mã nguồn Asm8086

Hình 33: Mã nguồn “B có phải là xâu con của A hay không”

Giao diện hiển thị

Trang 33

Hình 34: Giao diện hiển thị “B có phải là xâu con của A hay không”

1.3.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:

Khảo sát cấu hình của máy và hệ thống bộ nhớ của máy đang sử dụng phần mềm CPU-Z 64-bitv2.09.0x64:

Hình 35: Giao diện phần mềm CPU-ZCác thông số trên ảnh bao gồm:

Processor: AMD Ryzen 7 5800HCache:

Trang 34

Hình 36: Giao diện phần mềm CPU-Z

Các thông số trên ảnh bao gồm:

Loại RAM: DDR4Kích thước: 8 GBytesChannel #: Dual

Trang 35

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP,DS,ES,SS,CS,BP,SP

Công cụ sử dụng: emu8086 microprocessor emulator

Giải thích nội dung các thanh ghi, trên cơ sở đó giải thích cơ chế quản lý bộ nhớ của

hệ thống trong trường hợp cụ thể này

Trang 36

Câu 3: Viết chương trình hợp ngữ Assembly cho phép nhập 1 chuỗi ký tự và in ra

Trang 37

Giao diện hiển thị

Hình 39: Giao diện hiển thị “Nhập và in ra 1 chuỗi ký tự”

Câu 10: Viết chương trình hợp ngữ Assembly yều cầu đếm chiều dài của một chuỗi

ký tự cho trước.

Flow chart

Trang 38

Mã nguồn Asm8086

Hình 41: Mã nguồn “Đếm chiều dài của 1 chuỗi cho trước”

Giao diện hiển thị

Trang 39

Câu 18: Viết chương trình hợp ngữ đếm số lần xuất hiện của chuỗi con "ktmt"trong

một chuỗi In kết quả dưới dạng số thập phân.

Flow chart

Hình 43: Flow chart “đếm số lần xuất hiện của chuỗi con "ktmt"trong một chuỗi”

Mã nguồn Asm8086

Trang 40

Hình 44: Mã nguồn “đếm số lần xuất hiện của chuỗi con "ktmt"trong một chuỗi”

Giao diện hiển thị

Trang 41

Hình 45: Giao diện hiển thị “đếm số lần xuất hiện của chuỗi con "ktmt"trong một chuỗi”

1.4.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:

Khảo sát cấu hình của máy và hệ thống bộ nhớ của máy đang sử dụng Sử dụng phần mềm

L1 Data Cache: 4 x 32 KBytes (8-way set associative)

L1 Instruction Cache: 4 x 32 KBytes (8-way set associative)

Level 2 Cache: 4 x 256 KBytes (4-way set associative)

Level 3 Cache: 6 MBytes (12-way set associative)

Trang 42

Channel #: Single

Hình 48: Giao diện Disk Management

Các thông số trên ảnh bao gồm:

Loại ổ cứng : SSD

Kích thước : 476.92GB

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SP:

Trang 43

BP = 0000 (hex), một con trỏ cơ sở hoặc chỉ số trong bộ nhớ dữ liệu.

SI = 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DI= 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DS = 0720 (hex),

ES = 0700 (hex),

SS = 0710 (hex),

CS = F400 (hex), các thanh ghi segment chứa các địa chỉ của các đoạn chương trình.

IP = 0200 (hex), địa chỉ hiện tại của lệnh được thực thi.

Lệnh INT 021h được sử dụng để gọi một dịch vụ hệ thống DOS.

Trang 44

Câu 7:Viết chương trình hợp ngữ Assembly chuyển một số từ hệ cơ số 10 sang hệ nhị

phân.

Hình 49: flow char ”chuyển một số từ hệ cơ số 10 sang hệ nhị phân”

Trang 45

Hình 50: Mã nguồn”chuyển một số từ hệ cơ số 10 sang hệ nhị phân

Trang 46

Hình 51: Giao diện hiển thị”chuyển từ hệ số cơ số 10 sang hệ nhị phân

Câu 14: Viết chương trình hợp ngữ Assembly cho phép nhập vào 2 số và in ra màn

hình ƯCLN và BCNN của hai số đó.

Trang 47

Hình 53: Mã nguồn”nhập vào 2 số và in ra màn hình ƯCLN và BCNN của hai số đó.”

Trang 48

Câu 15: Viết chương trình hợp ngữ Assembly cho phép in ra số lượng các số chia hết cho

11 và tính tổng của các số đó từ một mảng cho trước.

Hình 55: flow char “ in ra số lượng các số chia hết cho 11 và tính tổng của các số đó từ một mảng cho

trước”

Trang 49

Hình 56: Mã nguồn “in ra số lượng các số chia hết cho 11 và tính tổng của các số đó từ một mảng cho

trước”

Hình 57: Giao diện hiển thị “in ra số lượng các số chia hết cho 11 và tính tổng của các số đó từ một

mảng cho trước”

1.5.2 bài số 2: Thực hành phân tích khảo sát bộ nhớ

Khảo sát cấu hình của máy và hệ thống bộ nhớ của máy đang sử dụng Sử dụngphần

mềm CPU-Z 64-bit v2.09.0.x64:

CPU AMD Ryzen 7 6800H

Trang 50

Hình 58: Giao diện phần mềm CPU - Z – CPU C

Hình 59: Giao diện phần mềm CPU - Z - Cache L1 Data Cache: 4 x 32 KBytes (8-way set associative)

L1 Instruction Cache: 4 x 32 KBytes (8-way set associative)

Level 2 Cache: 4 x 512 KBytes (4-way set associative)

Level 3 Cache: 16 MBytes (16-way set associative)

Trang 51

Hình 60:Giao diện phần mềm CPU - Z - Cache Loại RAM: DDR5

Kích thước: 8 GBytes

Channel #: 2x32-bit

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SP

Trang 52

Câu 6 Viết chương trình hợp ngữ Assembly cho phép nhập một chuỗi các ký tự kết

thúc bởi "# "và yêu cầu in ra màn hình chuỗi ký tự đó theo thứ tự ngược lại.

Flow chart

Hình 61: Flow chart “ nhập một chuỗi các ký tự kết thúc bởi "#" và in ra màn hình chuỗi ký tự đó theo

thứ tự ngược lại”

Mã nguồn Asm8086

Trang 53

Hình 62: Mã nguồn “nhập một chuỗi các ký tự kết thúc bởi "#" và in ra màn hình chuỗi ký tự đó theo

thứ tự ngược lại.”

Giao diện hiển thị

Hình 63: Giao diện hiển thị “nhập một chuỗi các ký tự kết thúc bởi "#" và in ra màn hình chuỗi ký tự

đó theo thứ tự ngược lại.”

Trang 54

hình tổng của các số đó.

Flow chart

Hình 64: Flow chart “nhập vào các số và in ra màn hình tổng của các số đó.”

Mã nguồn Asm8086

Trang 55

Hình 65: Mã nguồn “nhập vào các số và in ra màn hình tổng của các số đó.”

Trang 56

Hình 66: Giao diện hiển thị “nhập vào các số và in ra màn hình tổng của các số đó.”

Câu 15 Viết chương trình hợp ngữ Assembly cho phép in ra số lượng các số chia hết

cho 11 và tính tổng của các số đó từ một mảng cho trước.

Flow chart

Trang 57

Hình 67: Flow chart “in ra số lượng các số chia hết cho 11 và tính tổng của các số đó từ một mảng cho

trước”

Mã nguồn Asm8086

Trang 58

Hình 68: Mã nguồn “in ra số lượng các số chia hết cho 11 và tính tổng của các số đó từ một mảng cho

trước”

Giao diện hiển thị

Trang 60

mềm CPU-Z 64-bit v2.09.0.x64:

CPU: Intel Core i5 - 7300U

Hình 70: Giao diện phần mềm CPU - Z – CPU

Cache

Trang 61

L1 Data Cache: 2 x 32 KBytes (8-way set associative)

L1 Instruction Cache: 2 x 32 KBytes (8-way set associative)

Level 2 Cache: 2 x 256 KBytes (4-way set associative)

Level 3 Cache: 3 MBytes (12-way set associative)

Hình 72: Giao diện phần mềm CPU - Z - Memory

Loại RAM: DDR3

Kích thước: 8 GBytes

Channel #: Dual

Trang 62

Câu 1: Viết chương trình hợp ngữ in ra lời chào Tiếng Anh và Tiếng Việt.

Flow chat

Hình 73: Flow chat “in ra màn hình lời chào Tiếng Anh và Tiếng Việt”

Mã nguồn Asm8086

Trang 63

Hình 74: Mã nguồn“in ra màn hình lời chào Tiếng Anh và Tiếng Việt”

Giao diện hiển thị

Hình 75: Giao diện hiển thị“in ra màn hình lời chào Tiếng Anh và Tiếng Việt”

Trang 64

số 16 (Hexa).

Flow chat

Hình 76: Flow chat “in ra chuyển một số từ hệ cơ số 10 sang hệ cơ số 16”

Mã nguồn Asm8086

Trang 65

Hình 78: Mã nguồn “in ra chuyển một số từ hệ cơ số 10 sang hệ cơ số 16”

Giao diện hiển thị

Hình 79: Giao diện hiển thị“in ra chuyển một số từ hệ cơ số 10 sang hệ cơ số 16”

Trang 66

> m), chỉ ra xâu A chứa mấy xâu B.

Flow chat

Hình 80: Flow chat “in ra hai chuỗi ký tự A và B có độ dài là nvà m (n > m), chỉ ra xâu A chứa

mấy xâu B”

Trang 67

Mã nguồn Asm8086

Hình 82: Mã nguồn “in ra hai chuỗi ký tự A và B có độ dài là nvà m (n > m), chỉ ra xâu A

chứa mấy xâu B”

Trang 68

Hình 83: Mã nguồn“in ra hai chuỗi ký tự A và B có độ dài là n

và m (n > m), chỉ ra xâu A chứa mấy xâu B”

Trang 69

Hình 84: Mã nguồn “in ra hai chuỗi ký tự A và B có độ dài là n

và m (n > m), chỉ ra xâu A chứa mấy xâu B”

Giao diện hiển thị

Trang 71

Hình 87: Giao diện phần mềm CPU-Z

Các thông số trên ảnh bao gồm:

Loại RAM: DDR4

Kích thước: 4 GBytes

Channel #: Single

SSD

Trang 72

Loại ổ cứng : SSD Kích thước : 223,57GB

Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SP

Hình 89: Giao diện debug emu8086

VD:

AX = 0124 (hex), mã hàm cho một hàm DOS cụ thể.

BX = 000A (hex), một giá trị hoặc chỉ số cụ thể trong chương trình.

CX = 0001 (hex), một đếm hoặc biến lặp.

DX = 0017 (hex), một giá trị hoặc chỉ số cụ thể trong chương trình.

SP = 0100 (hex), con trỏ ngăn xếp.

BP = 0000 (hex), một con trỏ cơ sở hoặc chỉ số trong bộ nhớ dữ liệu.

SI = 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DI= 0000 (hex), một chỉ số hoặc con trỏ cụ thể.

DS = 0720 (hex), ES = 0700 (hex), SS = 0710 (hex), CS = 0724 (hex), các thanh ghi segment

chứa các địa chỉ của các đoạn chương trình

IP = 0032 (hex), địa chỉ hiện tại của lệnh được thực thi.

Lệnh INT 021h được sử dụng để gọi một dịch vụ hệ thống DOS.

Ngày đăng: 15/11/2024, 19:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w