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ỘI KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MÔ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 Phu
Sinh viên thực hiện : Phan Quốc Cường – 2010A04
Hà Nội – Năm 2023
Trang 2MỤC LỤC
I MỞ ĐẦU 3
II ĐỀ BÀI 4
III MÔ TẢ BÀI TẬP LỚN 5
1 Chương trình C++ 5
2 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
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ứatrong 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ảng0-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 đượctừng giá trị giờ phút giây vào AX rồi lần lượt hiển thị các giá trị đó ramàn hình, dùng hàm HIEN_SO_N để hiển thị ra màn hình, dùngMacro HienString để hiển thị thông báo hoặc các kí tự ngăn cách thànhphầ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 âmtrong 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ủadã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ựchiệ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ànhì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ủaVIDEORAM 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){
Trang 12Err_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 13L0:
clrscr
HienString dd1
lea dx, buff call GET_FILE_NAME lea dx, file_name
Trang 14HienString hcmov ax,cxshr ax,5
xor ah,ahand al,00111111bcall HIEN_SO_NHienString hcmov al,cland al,00011111bshl al,1
xor ah,ahcall HIEN_SO_N DONG_TEP: mov bx, the_tep mov ah, 3eh int 21h
jnc Exit
HienString Err_C Exit:
HienString tieptuc mov ah, 1 int 21h
cmp al, 'c' jne KT
jmp L0
KT:
ret
Trang 15db 13,10,13,10,' Vao so luong thanh phan: $'
m2 db 13,10,' Nhap vao day so nguyen $'
Trang 17inc index
add bx,2
loop L1
HienString m5 mov cx,sltp lea bx,a
L2:
mov ax,[bx] call HIEN_SO_N HienString space add bx,2
loop L2
mov cx,sltp lea bx,a
xor dx,dx
L3:
mov ax, [bx] cmp ax,0
jl IsNegative jmp IsNotNegative
Trang 18inc dx
IsNotNegative: add bx, 2
loop L3
HienString m6 mov ax,dx
call HIEN_SO_N HienString tieptuc mov ah,1
Trang 194 Địa chỉ cơ sở của VIDEORAM
Trang 20mov ax,0B000hHien:
call HIEN_HEXAHienString exitmov ah, 1
int 21h
THOAT:
ret
@VIDEORAM$qv ENDPinclude lib2.asm
End
Trang 21V DEMO TOÀN BỘ CHƯƠNG TRÌNH
1 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ôngnghệ 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ôngtin – Trường Đại học Mở Hà Nội