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 21.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 32.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 4Tên thành viên Mã số sinh viên Bài tập Phần 1
Trang 51.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 6Hì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 7Câ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 8Hì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 9Câ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 10Hì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 11RAM
Trang 12Hì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 13Kí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 14Câ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 15Mã 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 16Câ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 17Mã 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 18Hì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 19Hình 20: Flow chart “in tổng các số chia hết cho 7 trong mảng”
Mã nguồn Asm8086
Trang 20Hì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 21Hì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 23Hì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 24Giả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 26Câ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 27Hì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 28Hình 29: Flow chart “Chuyển nhị phân sang thập lục phân”
Mã nguồn Asm8086
Trang 29Hình 30: Mã nguồn “Chuyển nhị phân sang thập lục phân”
Trang 30Giao 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 31Câ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 32Mã 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 33Hì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 34Hì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 35Dù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 36Câ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 37Giao 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 38Mã 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 39Câ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 40Hì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 41Hì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 42Channel #: 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 43BP = 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 44Câ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 45Hình 50: Mã nguồn”chuyển một số từ hệ cơ số 10 sang hệ nhị phân
Trang 46Hì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 47Hì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 48Câ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 49Hì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 50Hì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 51Hì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 52Câ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 53Hì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 54hì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 55Hì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 56Hì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 57Hì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 58Hì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 60mề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 61L1 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 62Câ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 63Hì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 64số 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 65Hì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 67Mã 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 68Hì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 69Hì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 71Hì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 72Loạ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.