Chức năng đếm số lượng thành phần âm của dãy số nguyên...84.. Để vận dụng và nâng cao được kĩ năng lập trình hệ thống bằng hợp ngữ, sinh viên phải nỗ lực rất nhiều trong việc tự học, bổ
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚNMÔN: Lập trình hệ thống
Đề tài số 12
Giảng viên hướng dẫn: Th.S Đặng Thành PhuSinh viên thực hiện : Phan Quốc Cường – 2010A04
Hà Nội – Năm 2023
Trang 22 Chức năng lấy thời gian của tệp 7
3 Chức năng đếm số lượng thành phần âm của dãy số nguyên 8
4 Chức năng kiểm tra địa chỉ cơ sở của VIDEORAM 9
IV LẬP TRÌNH – CÀI ĐẶT 9
1 Chương trình chính 9
2 Lấy thời gian của tệp 12
3 Số lượng thành phần âm của dãy số nguyên 15
4 Địa chỉ cơ sở của VIDEORAM 19
V DEMO TOÀN BỘ CHƯƠNG TRÌNH 21
1 MENU chương trình 21
2 Lấy thời gian của tệp 22
3 Số lượng thành phần âm của dãy số nguyên 23
4 Kiểm tra địa chỉ cơ sở của VIDEORAM 23
VI KẾT LUẬN 24
VII TÀI LIỆU THAM KHẢO 24
Trang 3I MỞ ĐẦU
Lập trình hệ thống giúp cho sinh viên viết được chương trình bằng ngôn ngữ Assembly trên máy tính PC Sinh viên có các kĩ năng đơn giản như: Sử dụng trình biên dịch hợp ngữ trong môi trường Window, sửa lỗi, liên kết, khảo sát tập lệnh, các ngắt đơn giản của hệ điều hành DOS Để vận dụng và nâng cao được kĩ năng lập trình hệ thống bằng hợp ngữ, sinh viên phải nỗ lực rất nhiều trong việc tự học, bổ sung những kiến thức nhất định về phần cứng máy tính cũng như nguyên lý vận hành của các thiết bị ngoại vi có liên quan như: Máy in, hệ vi điều khiển, cổng vào ra nối tiếp/song song, …
Ngày nay, ứng dụng công nghệ thông tin và việc tin học hóa được xem là một trong những yếu tố mang tính quyết định trong hoạt động của các chính phủ, tổ chức, cũng như các công ty Nó đóng vai trò hết sức quan trọng, có thể tạo ra những bước đột phá mạnh mẽ Việc lập trình lên các hệ thống để phục vụ cho các nhu cầu riêng của tổ chức, công ty thậm chí các cá nhân, không lấy gì làm xa lạ Với một vài thao tác đơn giản, một người bất kì có thể sử dụng một hệ thống đơn giản.
Trang 4II ĐỀ BÀI
Hãy viết chương trình thực hiện 4 chức năng: 1 Lấy thời gian (time) của tệp
2 Số lượng thành phần âm của dãy số nguyên 3 Địa chỉ cơ sở của VIDEORAM
4 Thoát khỏi chương trình Ví dụ khi CT chạy:
Trang 5III MÔ TẢ BÀI TẬP LỚN
Đây là chương trình đa tệp, có sự liên kết giữa tệp C++ và tệp ASM Trong đó, màn hình giới thiệu và màn hình chức năng do chương trình C++ viết, các chức năng cụ thể do chương trình con viết bằng ASM đảm nhiệm Nhãn dùng chung là tên các chương trình con từ tệp ASM.
1 Chương trình C++
Cần khai báo Extern các nhãn dùng chung là tên các chương trình con bao gồm: GETTIME, SLTPAM và VIDEORAM.
Chương trình C++ sẽ hiện màn hình giới thiệu thông tin của sinh viên và lời nhắc ‘Có muốn tiếp tục chương trình không (c/k): ’ Nếu nhấn phím ‘c’ thì màn hình chức năng sẽ hiện ra, ngược lại thì thoát khỏi chương trình Màn hình giới thiệu sẽ có nội dung như sau:
Trang 6Nếu phím ‘c’ được nhấn, màn hình chức năng của chương trình sẽ có dạng:
Tại đây, sẽ thấy danh sách các chức năng chính của chương trình bao gồm: - 1 Chức năng lấy thời gian của tệp
- 2 Số lượng thành phần âm của dãy - 3 Địa chỉ cơ sở của VIDEORAM - 4 Thoát về DOS
Muốn sử dụng chức năng nào thì chỉ cần nhấn phím số tương ứng của chức năng đó Nếu bạn lỡ nhấn sai các giá trị của các phím từ 1 đến 4 sẽ có thông báo ‘Chức năng không hợp lệ, hãy chọn lại:’
Trang 7Nhấn phím 4 để thoát khỏi chương trình Ngược lại nếu chọn các phím chức năng từ 1 đến 3, chương trình C++ sẽ gọi chương trình con tương ứng do tệp ASM viết Khi sử dụng xong sẽ thoát chương trình con và trở về MENU lựa chọn chính.
2 Chức năng lấy thời gian của tệp
Chức năng: Lấy thời gian (giờ, phút, giây) của tệp Cách làm:
- Đầu tiên ta hiện thông báo “Nhập tên tệp cần lấy thời gian”
- Mở tệp đã có để đọc, sử dụng chức năng 3dh của ngắt int 21h với
AL=0 để đọc mở tệp thành công thì cờ carry
- Để lấy time của tệp ta sử dụng chức năng 57h của ngắt int 21h với
AL=0 để lấy time
- Sau khi dùng chức năng 57h của ngắt int 21h thì time sẽ được chứa trong thanh ghi CX, trong đó 5 bit cao nhất (11 - 15) chứa giá trị giờ của tệp, 6 bit tiếp theo (5 - 10) chứa giá trị phút của tệp, 5 bit còn lại (0
Trang 8– 4) chứa giá trị giây của tệp, giá trị giây của tệp chỉ nằm trong khoảng 0-30 vì giờ và phút đã chứa hết số bit còn lại do đó ta phải nhân 2 giá trị của giây Sau đó ta lần lượt gán các giá trị giờ phút giây chứa trong
CX vào AX để thực hiện dịch bit và các phép toán logic để lấy được từng giá trị giờ phút giây vào AX rồi lần lượt hiển thị các giá trị đó ra màn hình, dùng hàm HIEN_SO_N để hiển thị ra màn hình, dùng Macro HienString để hiển thị thông báo hoặc các kí tự ngăn cách thành phần
Các MACRO và chương trình con sử dụng:
o HienString: hiện một xâu ký tự kết thúc bằng ‘$’ ra màn hình o clrscr: Xóa màn hình
o HIEN_SO_N: hiện giá trị có trong AX ra màn hình
3 Chức năng đếm số lượng thành phần âm của dãy số nguyên
Chức năng: nhập vào một dãy số nguyên và đếm số lượng thành phần âm trong dãy
Cách làm:
- Hiện thông báo hãy nhập vào số lượng thành phần của dãy số nguyên - Sau khi nhập số lượng thành phần thì hiện thông báo nhập thành phần của
dãy số nguyên và nhập lần lượt các thành phần
- Sau khi nhập xong số lượng thành phần của dãy số nguyên thì hiện dãy số ra màn hình
- Truy cập đến giá trị đầu tiên của dãy để thực hiện so sánh với 0 nếu số đó nhỏ hơn 0 tăng DX lên 1, di chuyển đến giá trị tiếp theo và tiếp tục thực hiện so sánh đến hết dãy và tăng DX lên 1 nếu đó là số âm
- Sau khi kết thúc so sánh các phần tử trong dãy với 0 lúc này DX sẽ chứa số lượng thành phần âm của dãy
- Sử dụng hàm HIEN_SO_N để hiện giá trị số lượng thành phần âm ra màn hình
Trang 9Các MACRO và chương trình con sử dụng:
o HienString: hiện một xâu ký tự kết thúc bằng ‘$’ ra màn hình o clrscr: Xóa màn hình
o HIEN_SO_N: hiện giá trị có trong AX ra màn hình
4 Chức năng kiểm tra địa chỉ cơ sở của VIDEORAM
Chức năng: kiểm tra địa chỉ của VIDEORAM Cách làm:
- Để kiểm tra địa chỉ cơ sở của VIDEORAM ta sử dụng ngắt BIOS int 11h - Sau khi đưa được giá trị của byte có địa chỉ 0:410h vào AL thì ta tách 2 bit
có thông tin liên quan đến loại card điều khiển màn hình
- Kiểm tra liệu có phải loại card điều khiển màn hình là mono nếu bằng thì hiện địa chỉ của VIDEORAM là B000h, nếu không bằng thì hiện địa chỉ của VIDEORAM là B800h
Các MACRO và chương trình con sử dụng:
o HienString: hiện một xâu ký tự kết thúc bằng ‘$’ ra màn hình
Trang 10cout << "\n Truong Dai hoc Mo Ha Noi"; cout << "\n KHOA CONG NGHE THONG TIN"; cout << "\n -o0o -";
cout << "\n\n\n BAI TAP LON MON LTHT"; cout << "\n\n\n Cac SV thuc hien:";
cout << "\n 1 Phan Quoc Cuong Lop: 20A4"; cout << "\n 2 Tran Van B Lop: 17A2"; cout << "\n 3 Nguyen Thi C Lop: 17A2"; cout << "\n\n\n Co tiep tuc CT (c/k)? "; cout << "\n\n 1 Lay thoi gian cua tep";
cout << "\n 2 So luong thanh phan am cua day so nguyen"; cout << "\n 3 Dia chi co so cua VIDEORAM";
cout << "\n 4 Thoat khoi chuong trinh"; cout << "\n\n Hay chon: ";
while(1){
Trang 11if(( cin>>cn) && cn>0 && cn<5){
cout<<"\n Nhap khong hop le!"; cout<<"\n Vui long nhap lai: ";
Trang 12db 13,10,13,10,' Nhap ten tep can lay time: $' dd2 db 13,10,' Thoi gian cua tep: $'
Err_0 db 13,10,' Khong mo duoc tep!$'
Err_LT db 13,10,' Khong lay duoc thoi gian cua tep!$' Err_C db 13,10,' Khong dong duoc tep!$'
Trang 15db 13,10,13,10,' Vao so luong thanh phan: $' m2 db 13,10,' Nhap vao day so nguyen $' m3 db 13,10,' a[$'
m4 db ']= $'
m5 db 13,10,' Day so vua vao la: $' space db' $'
m6 db 13,10,' So luong thanh phan am cua day: $' tieptuc db 13,10,' Co tiep tuc CT (c/k)? $'
sltp dw ? index dw 0 a dw 100 dup
Trang 194 Địa chỉ cơ sở của VIDEORAM
db 13,10,13,10,' Dia chi co so cua VIDEORAM la: $' exit db 13,10,' An phim bat ky de tro ve Main menu $'
Trang 21V DEMO TOÀN BỘ CHƯƠNG TRÌNH1 MENU chương trình
Trang 222 Lấy thời gian của tệp
Trang 233 Số lượng thành phần âm của dãy số nguyên
4 Kiểm tra địa chỉ cơ sở của VIDEORAM
Trang 24VI KẾT LUẬN
Kết quả bài tập thực hiện đúng, đủ các yêu cầu được nêu Mã nguồn ngắn gọn, dễ hiểu, thực hành đúng theo những kiến thức đã được dạy và truyền đạt Chi tiết, tỉ mỉ, có kiểm tra dữ liệu đầu vào và cảnh báo người dùng Giao diện đơn giản, hiệu quả, không cầu kì, rườm rà gây rối mắt.
VII TÀI LIỆU THAM KHẢO
1 Giáo trình môn Lập trình hệ thống – thầy Đặng Thành Phu, khoa Công nghệ thông tin – Trường Đại học Mở Hà Nội
2 Các slide bài giảng trên lớp – môn Lập trình hệ thống, khoa Công nghệ thông tin – Trường Đại học Mở Hà Nội
3 Công cụ hỗ trợ THELP – thầy Đặng Thành Phu, khoa Công nghệ thông tin – Trường Đại học Mở Hà Nội