Hãy viết chương trình thực hiện 4 chức năng : 1 .... Chia đôi 1 tệp thành 2 tệp bằng nhau 2 .... So sánh 2 số nguyên và hiện số bé 3 .... Liệu máy tính có cổng joystick ? 4 ....Thoát khỏi chương trình
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 HỌC: LẬP TRÌNH HỆ THỐNG
ĐỀ BÀI SỐ 05
Giảng viên hướng dẫn: TS
Nhóm sinh viên thực hiện: Nhóm 11
- - -
-Hà Nội - Năm 2023
Trang 2MỤC LỤC
1 MỞ ĐẦU 3
2 ĐỀ BÀI 4
3 MÔ TẢ BÀI TẬP LỚN 5
3.1 Chương trình C 5
3.2 Chức năng chia 1 tệp thành 2 tệp bằng nhau 7
3.3 Chức năng nhập 2 số nguyên và hiển thị số bé hơn 8
3.4 Chức năng kiểm tra máy tính có cổng Joystick hay không? 9
4 LẬP TRÌNH – CÀI ĐẶT 10
4.1 Chương trình chính 10
4.2 CHIATEP 12
4.3 HIENTHISOBE 14
4.4 JOYSTICK 18
5 DEMO TOÀN BỘ CHƯƠNG TRÌNH 20
5.1 MENU chương trình 20
5.2 CHIATEP 22
5.3 HIENTHISOBE 22
5.4 JOYSTICK 23
6 KẾT LUẬN 24
7 TÀI LIỆU THAM KHẢO 24
Trang 31 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ụngtrì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ậplệ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 trongviệ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ínhphủ, 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 42 ĐỀ BÀI
Hãy viết chương trình thực hiện 4 chức năng :
Hãy viết chương trình thực hiện 4 chức năng :
1 Chia đôi 1 tệp thành 2 tệp bằng nhau
2 So sánh 2 số nguyên và hiện số bé
3 Liệu máy tính có cổng joystick ?
4 Thoát khỏi chương trình
Ví dụ khi CT chạy :
Trang 53 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ứcnă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
Nế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:
Trang 6Tạ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 Chia đôi tệp thành 2 tệp bằng nhau
2 So sánh 2 số nguyên và hiện số bé
3 Liệu máy tính có cổng Joystick không?
4.Thoát chương trình trở 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ứcnă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
‘Vào sai rồi! ’, ‘Có thực hiện chức năng khác (c/k)?’
Trang 7Nhấn phím bất kỳ để thoát khỏi chương trình Ngược lại nếu chọn các phímchứ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ệpASM viết Khi sử dụng xong sẽ thoát chương trình con và trở về MENU lựachọn chính.
3.2 Chức năng CHIATEP
Chức năng: Chia 1 tệp thành 2 tệp bằng nhau
Cách làm:
Vào tên tệp cần chia (gọi CT con GET_FILE_NAME)
Mở tệp đã có để đọc (CN 3dh của ngắt 21h với AL=0 – để đọc)
Xác định độ dài tệp bằng cách đưa con trỏ tệp về cuối têp thì AX chứa độ dài tệp (CN 42h của ngắt int 21h với AL=2 và khoảng cách nằm trong CX=0 vàDX=0)
Trả con trỏ tệp trở lại đầu tệp (CN 42h của ngắt int 21h với AL=0 và khoảng cách nằm trong CX=0 vàDX=0)
Đọc toàn bộ tệp để vào vùng đệm (CN 3fh của ngắt int 21h)
Vào tên tệp con 1 (gọi CT con GET_FILE_NAME)
Tạo tệp mới và mở (CN 3ch của ngắt int 21h)
Ghi ½ dữ liệu từ vùng đệm vào tệp con 1 (CN 40h của ngắt int 21h)
Vào tên tệp con 2 (gọi CT con GET_FILE_NAME)
Trang 8 Tạo tệp mới và mở (CN 3ch của ngắt int 21h)
Ghi ½ dữ liệu còn lại từ vùng đệm vào tệp con 2 (CN 40h của ngắt int 21h)
Đóng 3 tệp (CN 3eh của ngắt int 21h)
Chú ý: Khi thực hiện các chức năng của tệp nếu có lỗi thì hiện thông báo sau đó kết
thức, còn nếu mọi chức năng đều thực hiện tốt thì không hiện gì cả.
3.3 Chức năng HIENTHISOBE
Chức năng: Nhập 2 số nguyên và hiển thị số bé hơn
Cách làm:
Vào số thứ nhất (gọi CT con VAO_SO_N)
Vào số thứ hai (gọi CT con VAO_SO_N)
So sánh 2 số nguyên (cmp)
Nhảy đến nhãn L1 : hiển thị số thứ 2(trong ax) nếu số thứ 2 < số thứ nhất (gọi
CT con HIEN_SO_N) ,sau đó thoát CT
Ngược lại nếu số thứ 2 không nhỏ hơn số thứ 1 thì dổi chéo vị trí thanh ghi của
2 số cho nhau, lúc này số thứ 1 bé hơn sẽ nằm trong thanh ghi ax, thực hiện tiếp CT nhảy đến nhãn L1: hiển thị số thứ 1(gọi CT con HIEN_SO_N) ,sau đó thoát CT
3.4 Chức năng JOYSTICK
Chức năng: kiểm tra xem máy tính có cổng joystick không?
Cách làm:
Hiển thị chuỗi “May tinh co cong Joystick khong?”
Dùng chức năng int 11h để kiểm tra xem máy tính có cổng joystick không
Nếu có thì nhảy đến nhãn L1: hiển thị có (có cờ carry) sau đó thoát chơngtrình
Ngược lại, nếu không có cờ carry thì máy tính không có joystick, hiển thịkhông Sau đó thoát chương trình
4 LẬP TRÌNH – CÀI ĐẶT
4.1 Chương trình chính
Trang 9cout <<" \n TRUONG DAI HOC MO HA NOI" ;
cout <<" \n KHOA CONG NGHE THONG TIN" ;
cout <<" \n -" ;
cout <<" \n BAI TAP LON MON LTHT " ;
cout <<" \n\n\n Cac sinh vien thuc hien :" ;
cout <<" \n 1.Nguyen Van Tung Lop: 2010A03" ;
cout <<" \n 2.Nguyen Thi Minh Anh Lop: 2010A04" ;
cout <<" \n 3.Nguyen Phan Ngoc Minh Lop: 2010A04" ;
cout <<" \n 4.Le Tuan Anh Lop: 2010A04" ;
cout <<" \n\n\n Co tiep tuc chuong trinh khong (c/k)" ;
Trang 10cout <<" \n CAC CHUC NANG CHINH BAI TAP LON " ;
cout <<" \n -" ;
cout <<" \n 1 chia doi tep thanh 2 tep bang nhau " ;
cout <<" \n 2 so sanh 2 so nguyen va hien so be " ;
cout <<" \n 3 May tinh co cong joystick khong? " ;
// cout<<"\n 4 Hien xau ";
case 4 : Thoat (); break ;
default : cout <<" \n Vao sai roi !! " ;
Trang 11ct1 db 13 , 10 , 'Vao ten tep can chia : $'
ct2 db 13 , 10 , 'Vao ten tep con 1 : $'
ct3 db 13 , 10 , 'Vao ten tep con 2 : $'
Err_1 db 13 , 10 , 'Tep da ton tai !$'
Err_O db 13 , 10 , 'Khong mo duoc tep !$'
Err_R db 13 , 10 , 'Khong doc duoc tep !$'
Err_W db 13 , 10 , 'Khong ghi duoc tep !$'
Err_S db 13 , 10 , 'Khong di chuyen duoc con reo tep !$'
Err_C db 13 , 10 , 'Khong dong duoc tep !$'
mov al , 0 ; Gán giá trị 0 cho thanh ghi AL Đầy là phầL n thầd p cu [a thanh ghi AX và được sư[ dụng đê[ chỉ [ định chêd độ mở [ tệp.
Trang 12mov ah , 3dh ; chức năng 3DH cu [a int 21, mở [ tệp
xor cx , cx ; Đặt giá trị cu [a thanh ghi CX vêL 0 CX
sẽ được sư[ dụng làm khoa [ng cách so sánh trong việc di chuyê[ n con tro [ tệp
mov dx , cx ; Đặt giá trị cu [a thanh ghi DX bằng giá trị cu [a thanh ghi CX DX sẽ được sư[ dụng trong việc di chuyê[ n con tro [ tệp.
mov al , ; Đặt giá trị cu [a thanh ghi AL bằng 2, đại diện cho chêd độ so sánh với cuỗd i tệp
mov ah , 42h ; Chức năng di chuyê[ n con tro [ tệp mới
mov dodai_tep, ax ; Chuyê[ n vêL cuỗd i tệp thành cỗng thí AX
là độ dài tệp -> biêd n dodai_tep
mov bx ,the_tep ; Đưa giá trị cu [a biêd n the_tep (the [ tệp) vào thanh ghi BXĐ-Đưa con tro [ tệp trở [ vêL đầL u tệp
Trang 13mov al , ; Gán giá trị 0 vào thanh ghi AL Đầy là phầL n thầd p cu [a thanh ghi AX và được sư[ dụng đê[ chỉ [ định chêd độ SO SANH VỚI ĐẦL U TỆP
xor cx , cx ; ĐẶT CX-Khoa [ng cách so sánh là 0
mov dx , cx ; Đặt giá trị cu [a thanh ghi DX bằng giá trị cu [a thanh ghi CX DX sẽ được sư[ dụng trong việc di chuyê[ n con tro [ tệp.
mov ah , 42h ; Chức năng di chuyê[ n con tro [ tệp
jmp DONG_TEP ;nhay den dóng tệp
L_CT3: ; đọc toàn bộ dữ liệu từ tệp đã mở [ và lưu vào vùng đệm
mov bx ,the_tep ; Đưa giá trị cu [a biêd n the_tep (the [ tệp) vào thanh ghi BX BX sẽ được sư[ dụng đê[ xác định tệp cầL n đọc.ĐỌC TOÀN
BỘ TỆP - VÙNG ĐỆM
mov cx ,dodai_tep ; Di chuyê[ n giá trị cu [a biêd n dodai_tep (độ dài cu [a tệp) vào thanh ghi CX CX sẽ được sư[ dụng làm sỗd lượng byte cầL n đọc từ tệp
lea dx ,dem ;Đưa địa chỉ [ cu [a biêd n dem (vùng nhớ đệm) vào thanh địa chỉ [ DX Địa chỉ [ này sẽ được sư[ dụng đê[ lưu trữ dữ liệu đọc từ tệp
HienString ct2 ; Hiện thỗng báo ct2
lea dx ,buff ; Vào tên tệp con 1( Đưa địa chỉ [
cu [a biêd n buff (chứa tên tệp con 1) vào thanh ghi DX)
Trang 14call GET_FILE_NAME ;nhập vào tên tệp 1
lea dx ,file_name ; Chức năng tạo tệp mới và mở [(Đưa địa chỉ [ cu [a biêd n file_name (chứa tên tệp con 1) vào thanh ghi DX.)
mov ax , 4300h ; Chức năng 43h với AX = 4300h đê[ kiê[ m tra tệp tỗL n tại
int 21h ; Gọi chức năng DOS
jc L_CT4_TIEPTUC ; Nêd u CF=1 (lỗ_ i), kiê[ m tra tiêd p tục
jz L_CT4_TIEPTUC ; Nêd u ZF=0 (tệp đã tỗL n tại), kiê[ m tra tiêd p tục
jnc L_CT5 ; Tạo và mở [ tệp tỗd t thì nha [y,
HienString Err_O ; còn có lỗ_ i khi tạo và mở [ tệp (CF=1) thì hiện thỗng báo Err_O
jmp DONG_TEP
L_CT5:
mov the_tepc1, ax ; The [ tệp ở [ AX -> biêd n the_tepc1
mov bx , ax ; Ghi ½ dữ liệu từ vùng đệm (chứa dữ liệu đọc được) -> tệp con 1
jnc L_CT6 ; Ghi tỗd t thì nha [y,
HienString Err_W ; còn có lỗ_ i khi ghi tệp (CF=1) thì hiện thỗng báo Err_W
jmp DONG_TEPC1
L_CT6:
HienString ct3 ; Hiện thỗng báo ct3
lea dx ,buff ; Vào tên tệp con 2
Trang 15int 21h ; Gọi chức năng DOS
jc L_CT6_TIEPTUC ; Nêd u CF=1 (lỗ_ i), kiê[ m tra tiêd p tục
jz L_CT6_TIEPTUC ; Nêd u ZF=0 (tệp đã tỗL n tại), kiê[ m tra tiêd p tục
jnc L_CT7 ; Tạo và mở [ tệp tỗd t thì nha [y,
HienString Err_O ; còn có lỗ_ i khi tạo và mở [ tệp (CF=1) thì hiện thỗng báo Err_O
jmp DONG_TEPC1
L_CT7:
mov the_tepc2, ax ; The [ tệp ở [ AX -> biêd n the_tepc2
mov bx , ax ; Ghi 1/2 du lieu con lai tu dem vao tep con 2
Trang 16HienString Err_W ; còn có lỗ_ i khi ghi tệp (CF=1) thì hiện thỗng báo Err_W
DONG_TEPC2:
mov bx ,the_tepc2 ; Đóng tệp con 2
mov ah , 3eh
int 21h
jnc DONG_TEPC1 ; Đóng tệp tỗd t thì nha [y,
HienString Err_C ; còn có lỗ_ i khi đóng tệp (CF=1) thì hiện thỗng báo Err_C
Trang 17je L2 ; nha [y nêd u ax=bx, sỗd 2 = sỗd 1
jl L1 ; nha [y nêd u ax<bx, sỗd 2 < sỗd 1
xchg ax , bx ; ngược lại, đỗ[ i chéo dl, s1=ã, s2=bx, rỗL i thực hiện tiêd p ctr chuyeent đêd n l1, hiện sỗd bé ax
jne Exit ; nêd u khác, nha [y đêd n exit
jmp PS ; nha [y vêL ps, thực hiện lại ct
jne Exit ; nêd u khác, nha [y đêd n exit
jmp PS ; nha [y vêL ps, thực hiện lại ct
Exit:
ret
Include LIB2.ASM
@CN2$qv ENDP
Trang 195 DEMO TOÀN BỘ CHƯƠNG TRÌNH
5.1 MENU chương trình
Trang 205.2 CHIATEP
5.3 HIENSOBE
Trang 215.4 JOYSTICK
Trang 226 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ắngọ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
7 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