Chương trình sau khi chạy:Câu 9: Viết chương trình hợp ngữ Assembly cho phép nhập số nhị phân 8 bit chứa vào trong thanh ghi BL.. Câu 13: Viết chương trình hợp ngữ Assembly cho phép nhập
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN
Vượng
B21DCAT227 1, 5, 9, 13, 17Trần Minh Tú B21DCAT199 2, 6, 10, 14, 18Phạm Đức Minh B21DCAT133 3, 7, 11, 15, 19Mai Đức Trung B21DCAT193 4, 8, 12, 16, 20
Giảng viên hướng dẫn: ThS Đinh Xuân Trường
Trang 2Hà Nội, 2024
Trang 3MỤC LỤC PHẦN 1: PHẦN LÀM CÁ NHÂN
1.1 NGUYỄN QUỐC VƯỢNG: B21DCAT227
1.1.1 Bài số 1: Lập trình hợp ngữ Assembly
1.1.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1.2 TRẦN MINH TÚ : B21DCAT199
1.2.1 Bài số 1: Lập trình hợp ngữ Assembly
1.2.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1.3 MAI ĐỨC TRUNG : B21DCAT193
Trang 5Flowchart minh họa
Chương trình sau khi chạy:
Trang 6Câ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
Flowchart minh họa
Trang 7Chương trình sau khi chạy:
Câu 9: Viết chương trình hợp ngữ Assembly cho phép nhập số nhị phân (8 bit) 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)
Trang 8Flowchart minh họa
Trang 9Chương trình sau khi chạy:
Trang 10Câu 13: Viết chương trình hợp ngữ Assembly cho phép nhập vào các số và in ra màn hình tổng của các số đó.
Flowchart minh họa
Trang 12Chương trình sau khi chạy:
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
Trang 13Flowchart minh họa
Trang 14Chương trình sau khi chạy:
Trang 151.1.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1 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 (Bộ nhớ trong: ROM, RAM, Cache System, Bộ nhớ ngoài: ổ đĩa cứng, CD, Thiết bị vào ra.)
CPU: Intel Core i5 10300H
Trang 16- Intel Core i5: Dòng CPU Core i5 của Intel, thuộc phân khúc tầm trung, cân bằng giữa hiệu năng và giá cả.
- 10300: Đây là số model, và nó được chia thành các phần nhỏ hơn để giải thích cụ thể hơn:
· 10: Chỉ thế hệ của CPU, ở đây là thế hệ thứ 10 (Comet Lake)
· 300: Là số model cụ thể, với các số càng cao thường thể hiện hiệu suất và tính năng
tốt hơn so với các số thấp hơn trong cùng một thế hệ
- H: Chữ cái cuối cùng chỉ loại CPU và mục đích sử dụng:
● H: High Performance Graphics, chỉ các bộ vi xử lý hiệu năng cao dành cho laptop, thường được sử dụng trong các máy tính xách tay gaming hoặc các máy tính xách tay cần hiệu suấtcao cho công việc chuyên sâu
Cache:
Ram: (Thông số 1 thanh)
Trang 17Bộ nhớ ngoài:
2 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
Các bước thực hiện:
● Mở file asm bằng phần mềm trên
● Chọn emulate trên thanh công cụ rồi chọn nút debug nằm cuối của cửa sổ vừa mở ra
● Chạy Single step để xem kết quả debug từng mã lệnh từ đầu đến cuối
Trang 183 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.
Khi chương trình bắt đầu chạy, hệ điều hành thực hiện các bước sau để quản lý bộ nhớ:
● Khởi tạo các thanh ghi: Hệ điều hành sẽ khởi tạo các thanh ghi cần thiết như IP, DS, SS,
SP, v.v., để chuẩn bị cho quá trình thực thi chương trình
● Cấp phát không gian địa chỉ: Hệ điều hành sẽ cấp phát không gian địa chỉ cho chương trình, bao gồm các đoạn mã (code segment), đoạn dữ liệu (data segment), và đoạn ngăn xếp(stack segment) Các thanh ghi DS, SS, và các con trỏ tương ứng sẽ được thiết lập để trỏ tớicác đoạn này
Trang 20Kết quả khi chạy
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
Trang 21Mã nguồn Assembly 8086
Kết quả khi chạy
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ự
Trang 22cho trước.
Flow chart
Mã nguồn Assembly 8086
Trang 23Kết quả khi chạy
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ố đó
Flow chart
Trang 24Mã nguồn Assembly 8086
Trang 26Kết quả khi chạy
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
Trang 27Mã nguồn Assembly 8086
Trang 28Kết quả khi chạy
Trang 291.2.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1 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 (Bộ nhớ trong: ROM, RAM, Cache System, Bộ nhớ ngoài: ổ đĩa cứng, CD, Thiết bị vào ra.)
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 CPU-Z 64-bit v2.10x64:
CPU: Intel Core i5 11400H
- Intel Core i5: Dòng CPU Core i5 của Intel, thuộc phân khúc tầm trung, cân bằng giữa hiệu năng và giá cả
- 11400: Đây là số model, và nó được chia thành các phần nhỏ hơn để giải thích cụ thể hơn:
• 11: Chỉ thế hệ của CPU, ở đây là thế hệ thứ 11 (Rocket Lake)
• 400: Là số model cụ thể của thế hệ
• H: Chữ cái cuối cùng chỉ loại CPU và mục đích sử dụng H: High
Performance Graphics, chỉ các bộ vi xử lý hiệu năng cao dành cho laptop, thường được sử dụng trong các máy tính xách tay gaming hoặc các máy tính xách tay cần hiệu suất cao cho công việc chuyên sâu
Giao diện phần mềm CPU-Z
Trang 30ROM/RAM:
Trang 31Bộ nhớ ngoài:
Trang 322 Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SPCông cụ sử dụng: emu8086 microprocessor emulator
Các bước thực hiện:
● Mở file asm bằng phần mềm emu8086
Trang 33● Chọn emulate trên thanh công cụ rồi chọn nút debug nằm cuối của cửa sổ vừa mở ra
● Chạy Single step để xem kết quả debug từng mã lệnh từ đầu đến cuối
Trang 343 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.
● Khi chương trình bắt đầu chạy, hệ điều hành tự động khởi tạo các thanh ghi, vùng nhớ và cấp phát không gian địa chỉ cho chương trình
● Tương ứng với các câu lệnh trong mã nguồn, nội dung các thanh ghi có thể thay đổi hoặc không
Bắt đầu:
Kết thúc
o IP (Instruction Pointer): Là con trỏ lệnh, bắt đầu có giá trị 0003 và kết thúc có giá trị 0204
o DS (Data Segment), SI (Source Index): Thanh ghi đoạn DS thường dùng để trỏ vào vị trí các biến được xác định Trong chương trình DS được gán giá trị 0720 SI là thanh ghi chỉ số nguồn, nó trỏ tới vị trí của dữ liệu trong mảng và chuỗi
o SS (Stack Segment), BP(Base Pointer): SS chứa địa chỉ cơ sở của stack và BP dùng để trỏ tới dữ liệu trong stack
o SP (Stack Pointer): Là con trỏ trỏ tới đỉnh của stack, giá trị thay đổi khi có thao tác với stack (pop, push)
1.3 MAI ĐỨC TRUNG : B21DCAT193
1.3.1 Bài số 1: Lập trình hợp ngữ Assembly
Trang 35Câ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ự đó.
FlowChart
Mã nguồn
Trang 36Hiển thị kết quả Câu 8: Viết chương trình hợp ngữ Assembly chuyển một số từ hệ cơ số 10
sang hệ cơ số 16 (Hexa).
FlowChart
Trang 37Mã nguồn
Trang 38Hiển thị kết quả 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ố đó.
FlowChart
Trang 39Mã nguồn
Kết quả hiển thị
Trang 40Câu 16: Viết chương trình hợp ngữ Assembly tính tổng 2 số kiểu word.
FlowChart
Trang 41Mã nguồn
Kết quả hiển thị
Trang 42Câu 20: 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 A chứa mấy xâu B.
FlowChart
Trang 43Mã nguồn
Kết quả hiển thị
1.3.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1) 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 (Bộ nhớ trong: ROM,RAM, Cache System, Bộ nhớ ngoài: ổ đĩa cứng, CD, Thiết bị vào ra.)
Trang 44Bộ nhớ trong
Trang 45Bộ nhớ ngoài
2) Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SPCông cụ sử dụng: emu8086 microprocessor emulator
Các bước thực hiện:
● Mở file asm bằng phần mềm trên
● Chọn RUN trên thanh công cụ
● Chạy Single step để xem kết quả debug từng mã lệnh từ đầu đến cuối
Trang 463) 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ốngtrong trường hợp cụ thể này.
Tác dụng của từng thanh ghi:
●Thanh ghi IP: chứa địa chỉ của lệnh tiếp theo sẽ được thực thi trong bộ nhớ Nó giúp
CPU xác định vị trí của lệnh tiếp theo trong chương trình
●Thanh ghi DS: chứa địa chỉ của đoạn bộ nhớ mà các biến dữ liệu đang được lưu trữ
Nó xác định phần của bộ nhớ chứa dữ liệu của chương trình
●Thanh ghi ES: cũng chứa địa chỉ của một đoạn bộ nhớ, thường được sử dụng để lưu
trữ dữ liệu bổ sung hoặc dùng trong các phép toán liên quan đến bộ nhớ
●Thanh ghi SS: chứa địa chỉ của đoạn bộ nhớ dùng cho ngăn xếp (stack) Ngăn xếp là
vùng bộ nhớ dùng để lưu trữ các giá trị tạm thời, chẳng hạn như các biến cục bộ, địa chỉ trả về, và các tham số hàm
●Thanh ghi CS: chứa địa chỉ của đoạn bộ nhớ chứa mã lệnh của chương trình Nó giúp
CPU biết được nơi lưu trữ các lệnh cần thực thi
●Thanh ghi BP: được sử dụng để tham chiếu đến các biến và dữ liệu trong khung ngăn
xếp (stack frame) của hàm hiện tại Nó giúp giữ vị trí của ngăn xếp ổn định khi truy xuất các tham số và biến cục bộ
●Thanh ghi SP: chứa địa chỉ của phần tử trên cùng của ngăn xếp Nó giúp theo dõi vị trí
hiện tại trong ngăn xếp
Trang 47Ví dụ:
●IP tự động được cập nhật sau mỗi lệnh được thực thi Khi một lệnh được thực hiện, IP
sẽ tăng lên để trỏ đến lệnh tiếp theo
Thanh ghi IP tự động tăng với các lệnh khác nhau
●DS thường được thiết lập khi chương trình khởi động hoặc khi cần thay đổi đoạn bộ nhớ
DS giữ nguyên vì không truy cập đến đoạn bộ nhớ khác
●ES tương tự như DS, bằng cách kết hợp ES với một offset
Trang 48●SS được thiết lập khi khởi động chương trình hoặc khi thực hiện các lệnh liên quan đến ngăn xếp Các địa chỉ trên ngăn xếp thường được tính bằng cách kết hợp SS với các giá trị offset, ví dụ như từ các thanh ghi SP (Stack Pointer) hoặc BP (Base Pointer).
Thay đổi SS khi nhập kí tự từ bàn phím
●CS thường được thiết lập khi chương trình khởi động và được cập nhật khi có thay đổi trong đoạn mã Địa chỉ của lệnh được tính bằng cách kết hợp CS với IP
SSS
Trang 49CS thay đổi khi truy cập ngắt 21H
●BP thường không thay đổi trong khi một hàm đang thực thi, và được sử dụng để tham chiếu đến các địa chỉ tương đối trong ngăn xếp
s
BP không thay đổi
●SP tự động được cập nhật khi thực hiện các lệnh liên quan đến ngăn xếp, như PUSH và POP SP thay đổi khi các giá trị được đẩy vào hoặc lấy ra từ ngăn xếp
Trang 50SP thay đổi khi nhập kí tự (PUSH vào stack)
1.4 PHẠM ĐỨC MINH : B21DCAT133
1.4.1 Bài số 1: Lập trình hợp ngữ Assembly
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 màn hình chuỗi ký tự đó
Trang 51Hình 1.1 Mã nguồn chương trình
Trang 52Hình 1.2 Flowchart của chương trình 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.
Trang 53Hình 2.1.1 Mã nguồn chương trình
Trang 55Hình 2.2 Flowchart của chương trình
Câu 11: Viết chương trình hợp ngữ Assembly tìm giá trị lớn nhất và nhỏ nhấtcủa một mảng số
Trang 56Hình 3.1.1 Mã nguồn chương trình
Trang 58Hình 3.2 Flowchart của chương trình
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
Trang 59Hình 4.1.1 Mã nguồn chương trình
Trang 60Hình 4.1.2 Mã nguồn chương trình
Trang 61Hình 4.2 Flowchart chương trình
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
Trang 62Hình 5.1.1 Mã nguồn chương trình
Trang 64Hình 5.1.3 Mã nguồn chương trình
Trang 65Hình 5.2 Flowchart chương trình
Trang 661.4.2 Bài số 2: Thực hành phân tích khảo sát bộ nhớ:
1 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
- CPU: AMD Ryzen 5 5600G
+ G:
· G: Chữ "G" trong tên gọi này viết tắt của "Graphics", nghĩa là CPU này có tích hợp đồ họa Cụ thể, Ryzen 5 5600G có tích hợp đồ họa Radeon Vega, cho phép xử lý các tác vụ đồ họa cơ bản và chơi một số game mà không cần card đồ họa rời
- Cache:
Trang 68+ DC Mode: Unganged Chế độ hoạt động của RAM, thông thường chế độ này không ảnh hưởng nhiều đến hiệu suất nhưng có thể liên quan đến cách hệ thống quản lý các kênh bộ nhớ.
+ Uncore Frequency: 1330.6 MHz Đây là tần số hoạt động của phần không phải lõi của CPU (uncore), bao gồm bộ điều khiển bộ nhớ và các thành phần khác
+ DRAM Frequency: 1330.0 MHz Tần số hoạt động thực tế của RAM Vì đây là DDR (Double Data Rate), tần số hiệu quả sẽ là 1330.0 MHz x 2 = 2660.0 MHz
+ FSB:DRAM: 3:40 Tỷ lệ giữa tốc độ bus phía trước (FSB) và tần số DRAM Điều này thường không ảnh hưởng nhiều đến hiệu suất thực tế trong các hệ thống hiện đại sử dụng công nghệ DDR
- Bộ nhớ ngoài:
2 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
Các bước thực hiện:
- Mở file asm bằng phần mềm trên
Trang 69- Chọn emulate trên thanh công cụ rồi chọn nút debug nằm cuối của cửa sổ vừa mở ra
- Chạy Single step để xem kết quả debug từng mã lệnh từ đầu đến cuối
3 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.
● Nội dung các thanh ghi
- IP (Instruction Pointer): Chứa địa chỉ của lệnh hiện tại đang được thực thi
- DS (Data Segment): Chứa địa chỉ của đoạn dữ liệu
- SI (Source Index): Lưu trữ địa chỉ của nguồn dữ liệu trong các thao tác chuỗi
- SS (Stack Segment): Chứa địa chỉ của đoạn ngăn xếp
- BP (Base Pointer): Lưu trữ địa chỉ cơ sở của ngăn xếp trong các thủ tục
- SP (Stack Pointer): Chứa địa chỉ của đỉnh ngăn xếp hiện tại
● Cơ chế quản lý bộ nhớ
Trang 70- Hệ thống quản lý bộ nhớ bằng cách phân đoạn mã, dữ liệu, và ngăn xếp Các thanh ghi DS, SS, SP, và IP điều khiển việc truy cập và quản lý các đoạn này, đảm bảo chương trình thực thi đúng và hiệu quả.
Trang 71PHẦN 2: PHẦN NHÓM
❖ Phân chia công việc
➢Giao diện hiển thị: Trần Minh Tú, Phạm Đức Minh
➢Xử lý tính toán BMI: Mai Đức Trung, Nguyễn Quốc Vượng
1 Giới thiệu đề tài
1 Mở đầu:
● Đề tài: Phát triển một phần mềm tính chỉ số BMI (Body Mass Index) nhằm cung cấp
● công cụ tiện ích cho người dùng trong việc theo dõi và quản lý sức khỏe
● Mục tiêu: Tạo ra một ứng dụng đơn giản, dễ sử dụng, cho phép người dùng nhập thông tin về chiều cao và cân nặng để tính toán chỉ số BMI và đưa ra khuyến nghị
● Nhập dữ liệu: Người dùng nhập chiều cao và cân nặng
● Tính toán BMI: Dựa trên dữ liệu đã nhập, phần mềm sẽ tính toán chỉ số BMI
● Hiển thị kết quả: Hiển thị chỉ số BMI và tình trạng sức khỏe tương ứng
● Khuyến nghị: Đưa ra khuyến nghị về chế độ ăn uống và tập luyện dựa trên chỉ số BMI
2 Nội dung chính của đề tài
1.Cơ sở lý thuyết:
● Công thức tính chỉ số BMI:
BMI =Cân nặng(kg)∗10000
Chiều cao (cm)❑2
● Phân loại các mức BMI:
○ Dưới 18.5: Thiếu cân
○ 18.5 - 24.9: Bình thường
○ 25 - 29.9: Thừa cân
○ Trên 30: Béo phì
● Ảnh hưởng của BMI đến sức khỏe và các khuyến nghị y tế
2.Phân tích yêu cầu:
● Xác định yêu cầu chức năng của phần mềm:
○ Nhập chiều cao và cân nặng
○ Tính toán chỉ số BMI
Trang 72○ Hiển thị kết quả BMI và phân loại tình trạng sức khỏe.
○ Đưa ra khuyến nghị dinh dưỡng và lối sống
● Yêu cầu phi chức năng:
○ Giao diện đơn giản và dễ sử dụng trong môi trường emu8086
● Giao diện người dùng (UI):
○ Thiết kế giao diện nhập liệu và hiển thị kết quả bằng các lệnh đồ họa cơ bản trong emu8086
4.Công nghệ và công cụ sử dụng:
● Ngôn ngữ lập trình: Assembly (x86) với emu8086
● Trình biên dịch và giả lập: Sử dụng emu8086 để viết mã, biên dịch và kiểm thử chương trình
5.Phát triển và triển khai:
● Lập trình và kiểm thử các chức năng chính của phần mềm
● Kiểm tra tính chính xác của các phép tính và khả năng hiển thị kết quả đúng đắn
● Đóng gói và chuẩn bị tài liệu hướng dẫn sử dụng chương trình
3 Giao diện hiển thị
Giao diện mở đầu của chương trình: