Tải bản đầy đủ (.docx) (22 trang)

BTL lập trình hệ thống

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (260.09 KB, 22 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<small>TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI</small>

<b><small>KHOA CÔNG NGHỆ THÔNG TIN</small></b>

<b>BÁO CÁO BÀI TẬP LỚN</b>

<b>MÔN HỌC: LẬP TRÌNH HỆ THỐNG</b>

<b><small>ĐỀ BÀI SỐ 05</small></b>

<i><b><small> Giảng viên hướng dẫn: TS. </small></b></i>

<i><b><small> Nhóm sinh viên thực hiện: Nhóm 11</small></b></i>

<b><small>-Hà Nội - Năm 2023</small></b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

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

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>1. MỞ ĐẦU</b>

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 đượckĩ 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.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>2. ĐỀ BÀI</b>

Hãy viết chương trình thực hiện 4 chức năng :

<small>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 nhau2 .... So sánh 2 số nguyên và hiện số bé3 .... Liệu máy tính có cổng joystick ?4 ....Thốt khỏi chương trình</small>

<i><small>Ví dụ khi CT chạy :</small></i>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>3. MÔ TẢ BÀI TẬP LỚN</b>

Đâ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 chunglà 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:

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

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. 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.Thố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)?’

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Nhấn phím bất kỳ để thố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.

<b>3.2 Chức năng CHIATEP</b>

 Chức năng: Chia 1 tệp thành 2 tệp bằng nhau Cách làm:

<small>Vào tên tệp cần chia (gọi CT con GET_FILE_NAME)</small>

<small>Mở tệp đã có để đọc (CN 3dh của ngắt 21h với AL=0 – để đọc)</small>

<small>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àitệp (CN 42h của ngắt int 21h với AL=2 và khoảng cách nằm trong CX=0vàDX=0)</small>

<small>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ảngcách nằm trong CX=0 vàDX=0)</small>

<small>Đọ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)</small>

<small>Tạo tệp mới và mở (CN 3ch của ngắt int 21h)</small>

<small>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)</small>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small>Tạo tệp mới và mở (CN 3ch của ngắt int 21h)</small>

<small>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)</small>

<i><small>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</small></i>

<small>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ả.</small>

<small>Nhảy đến nhãn L1 : hiển thị số thứ 2(trong ax) nếu số thứ 2 < số thứ nhất (gọiCT con HIEN_SO_N) ,sau đó thốt CT</small>

<small>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ủa2 số cho nhau, lúc này số thứ 1 bé hơn sẽ nằm trong thanh ghi ax, thực hiệntiếp CT nhảy đến nhãn L1: hiển thị số thứ 1(gọi CT con HIEN_SO_N) ,sau đóthốt CT</small>

<b>3.4 Chức năng JOYSTICK</b>

 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 đó thốt chơng

 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 đó thốt chương trình

<b>4. LẬP TRÌNH – CÀI ĐẶT4.1 Chương trình chính</b>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<small>#include <stdio.h></small>

<small>#include <conio.h></small>

<small>#include <iostream.h>externvoidCN1();</small>

<small> char tl; int cn; clrscr();</small>

<small> cout<<"\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 :";</small>

<small> 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)"; tl=getch();</small>

<small> if(tl=='c') {</small>

<small> L1:</small>

<small> clrscr();</small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<small> cout<<"\n CAC CHUC NANG CHINH BAI TAP LON "; cout<<"\n ---";</small>

<small> 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? ";</small>

<small>// cout<<"\n 4. Hien xau ";</small>

<small> cout<<"\n 4. Thoat "; cout<<"\n\n Hay chon : "; cin>>cn;</small>

<small> switch(cn) {</small>

<small> case1: CN1(); break; case2: CN2(); break; case3: CN3(); break;</small>

<small>// case 4: CN4(); break;</small>

<small> case4: Thoat(); break;</small>

<small> default: cout<<"\n Vao sai roi !! "; }</small>

<small> cout<<"\n Co thuc hien chuc nang khac (c/k) "; tl=getch();</small>

<small> if(tl=='c') {</small>

<small> gotoL1; }</small>

<small> } }</small>

<b>4.2 CHIATEP</b>

<small>Include LIB1.ASM.MODEL small</small>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small> ct1 db13,10,'Vao ten tep can chia : $'</small>

<small> ct2 db13,10,'Vao ten tep con 1 : $'</small>

<small> ct3 db13,10,'Vao ten tep con 2 : $'</small>

<small> Err_1 db13,10,'Tep da ton tai !$'</small>

<small> Err_O db13,10,'Khong mo duoc tep !$'</small>

<small> Err_R db13,10,'Khong doc duoc tep !$'</small>

<small> Err_W db13,10,'Khong ghi duoc tep !$'</small>

<small> Err_S db13,10,'Khong di chuyen duoc con reo tep !$'</small>

<small> Err_C db13,10,'Khong dong duoc tep !$'</small>

<small> the_tep dw ? the_tepc1 dw ? the_tepc2 dw ? buff db30 db ? file_name db30dup(?) dodai_tep dw ?</small>

<small> dem db20000dup(?)</small>

<small> tieptuc db13,10,' Co tiep tuc CT (c/k) ? $'</small>

<small>PUBLIC @CN1$qv@CN1$qv PROC</small>

<small> moval,0 ; Gán giá trị 0 cho thanh ghi AL.Đầy là phầLn thầdp cu[a thanh ghi AX và được sư[ dụng đê[ chỉ[ định chêd độ mở[tệp.</small>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small> movah,3dh ; chức năng 3DH cu[a int 21, mở[ tệpđã có</small>

<small> int 21h</small>

<small> jnc L_CT1 ; Mở[ tệp thành cỗng (CF=0 khongco co carry) thì nha[y đêdn L_CT1 </small>

<small> HienString Err_O ; cịn mở[ tệp có lỗ_i (CF=1) thìhiện Err_O</small>

<small> movdx,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.</small>

<small> moval, ; Đặt giá trị cu[a thanh ghi AL bằng 2,đại diện cho chêd độ so sánh với cuỗdi tệp</small>

<small> movah,42h ; Chức năng di chuyê[n con tro[ tệp mớicu[a cn 21h</small>

<small> L_CT2: ; di chuyê[n con tro[ tệp vêL đầLu tệp sau khi đã xác địnhđộ dài cu[a tệp</small>

<small> mov dodai_tep,ax ; Chuyê[n vêL cuỗdi tệp thành cỗng thí AXlà độ dài tệp -> biêdn dodai_tep</small>

<small> mov bx,the_tep ; Đưa giá trị cu[a biêdn the_tep (the[tệp) vào thanh ghi BXĐ-Đưa con tro[ tệp trở[ vêL đầLu tệp</small>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small> mov al, ; Gán giá trị 0 vào thanh ghi AL. Đầy làphầLn thầdp cu[a thanh ghi AX và được sư[ dụng đê[ chỉ[ định chêd độ SO SANHVỚI ĐẦLU TỆP</small>

<small> xor cx,cx ; ĐẶT CX-Khoa[ng cách so sánh là 0</small>

<small> movdx,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.</small>

<small> movah,42h ; Chức năng di chuyê[n con tro[ tệp</small>

<small> jmp DONG_TEP ;nhay den dóng tệp</small>

<small> L_CT3: ; đọc toàn bộ dữ liệu từ tệp đã mở[ và lưu vàovùng đệm</small>

<small> mov bx,the_tep ; Đưa giá trị cu[a biêdn the_tep (the[ tệp)vào thanh ghi BX. BX sẽ được sư[ dụng đê[ xác định tệp cầLn đọc.ĐỌC TOÀNBỘ TỆP - VÙNG ĐỆM</small>

<small> mov cx,dodai_tep ; Di chuyê[n giá trị cu[a biêdn 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 bytecầLn đọc từ tệp</small>

<small> lea dx,dem ;Đưa địa chỉ[ cu[a biêdn 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</small>

<small> HienString ct2 ; Hiện thỗng báo ct2 </small>

<small> lea dx,buff ; Vào tên tệp con 1( Đưa địa chỉ[cu[a biêdn buff (chứa tên tệp con 1) vào thanh ghi DX)</small>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<small> call GET_FILE_NAME ;nhập vào tên tệp 1</small>

<small> lea dx,file_name ; Chức năng tạo tệp mới và mở[(Đưa địachỉ[ cu[a biêdn file_name (chứa tên tệp con 1) vào thanh ghi DX.)</small>

<small> </small>

<small> mov ax, 4300h ; Chức năng 43h với AX = 4300hđê[ kiê[m tra tệp tỗLn tại</small>

<small> int 21h ; Gọi chức năng DOS</small>

<small> jc L_CT4_TIEPTUC ; Nêdu CF=1 (lỗ_i), kiê[m tra tiêdptục</small>

<small> jz L_CT4_TIEPTUC ; Nêdu ZF=0 (tệp đã tỗLn tại),kiê[m tra tiêdp tục</small>

<small> jmp DONG_TEP L_CT4_TIEPTUC: </small>

<small> movcx,0 ; Khỗng đặt thuộc tính nào cho tệp</small>

<small> movah,3ch int 21h</small>

<small> jnc L_CT5 ; Tạo và mở[ tệp tỗdt thì nha[y,</small>

<small> 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 </small>

<small> jmp DONG_TEP L_CT5:</small>

<small> mov the_tepc1,ax; The[ tệp ở[ AX -> biêdn the_tepc1</small>

<small> mov bx,ax ; Ghi ½ dữ liệu từ vùng đệm (chứa dữliệu đọc được) -> tệp con 1</small>

<small> mov cx,dodai_tep</small>

<small> shr cx, ; 1/2 do dai tep</small>

<small> lea dx,dem mov ah,40h int 21h</small>

<small> jnc L_CT6 ; Ghi tỗdt thì nha[y,</small>

<small> HienString Err_W ; cịn có lỗ_i khi ghi tệp (CF=1) thì hiệnthỗng báo Err_W </small>

<small> jmp DONG_TEPC1 L_CT6:</small>

<small> HienString ct3 ; Hiện thỗng báo ct3 </small>

<small> lea dx,buff ; Vào tên tệp con 2</small>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<small> int 21h ; Gọi chức năng DOS</small>

<small> jc L_CT6_TIEPTUC ; Nêdu CF=1 (lỗ_i), kiê[m tra tiêdptục</small>

<small> jz L_CT6_TIEPTUC ; Nêdu ZF=0 (tệp đã tỗLn tại),kiê[m tra tiêdp tục</small>

<small> jmp DONG_TEPC1 L_CT6_TIEPTUC:</small>

<small> movcx,0 ; Khỗng đặt thuộc tính nào cho tệp</small>

<small> movah,3ch int 21h</small>

<small> jnc L_CT7 ; Tạo và mở[ tệp tỗdt thì nha[y,</small>

<small> 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 </small>

<small> jmp DONG_TEPC1</small>

<small> L_CT7:</small>

<small> mov the_tepc2,ax ; The[ tệp ở[ AX -> biêdn the_tepc2</small>

<small> mov bx,ax ; Ghi 1/2 du lieu con lai tu dem vao tepcon 2</small>

<small> mov cx,dodai_tep mov ax,cx</small>

<small> jnc DONG_TEPC2 ; Ghi tệp tỗdt thì nha[y,</small>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<small> HienString Err_W ; cịn có lỗ_i khi ghi tệp (CF=1) thì hiệnthỗng báo Err_W </small>

<small> DONG_TEPC2:</small>

<small> mov bx,the_tepc2 ; Đóng tệp con 2</small>

<small> mov ah,3eh int 21h</small>

<small> jnc DONG_TEPC1 ; Đóng tệp tỗdt thì nha[y,</small>

<small> HienString Err_C ; cịn có lỗ_i khi đóng tệp (CF=1) thìhiện thỗng báo Err_C </small>

<small> DONG_TEPC1:</small>

<small> mov bx,the_tepc1 ; Đóng tệp con 1</small>

<small> mov ah,3eh int 21h jnc DONG_TEP HienString Err_C DONG_TEP:</small>

<small> mov bx,the_tep ; Đóng tệp cầLn chia</small>

<small> mov ah,3eh int 21h jnc Exit_CT HienString Err_C Exit_CT: </small>

<small> HienString tieptuc ; Hiện thỗng báo tieptuc</small>

<small> Thoat_CT: ret</small>

<small>INCLUDE lib3.asm ; lib3.asm chứa CT con GET_FILE_NAME</small>

<small>@CN1$qv ENDP</small>

<small>END </small>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<b>4.3 HIENSOBE</b>

<small>;check nêdu 2 sỗd bằng nhau</small>

<small>Include LIB1.ASM.MODEL small.DATA</small>

<small>PUBLIC @CN2$qv@CN2$qv PROC PS:</small>

<small> CLRSCR</small>

<small> HienString M1 call VAO_SO_N</small>

<small> je L2 ; nha[y nêdu ax=bx, sỗd 2 = sỗd 1</small>

<small> jl L1 ; nha[y nêdu ax<bx, sỗd 2 < sỗd 1</small>

<small> xchgax, bx ; ngược lại, đỗ[i chéo dl, s1=ã, s2=bx, rỗLi thực hiện tiêdp ctr chuyeent đêdn l1, hiện sỗd bé ax</small>

<small> jne Exit ; nêdu khác, nha[y đêdn exit</small>

<small> jmp PS ; nha[y vêL ps, thực hiện lại ct</small>

<small> L2:</small>

<small> HienString M4 HienString M5</small>

<small> movah, ; chờ nhận 1 kí tự từ bàn phím</small>

<small> int21H</small>

<small> cmpal,'c' ; so sánh kí tự nhận vào vs 'c'</small>

<small> jne Exit ; nêdu khác, nha[y đêdn exit</small>

<small> jmp PS ; nha[y vêL ps, thực hiện lại ct</small>

<small> Exit: retInclude LIB2.ASM@CN2$qv ENDP</small>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<b>4.4 JOYSTICK</b>

<small>INCLUDE lib1.asm.MODEL small.DATA</small>

<small> CLRSCR HienString m1 int11h</small>

<small> moval,ah</small>

<small> moval, jc L1</small>

<small> HienString m2 jmp Exit L1:</small>

<small> HienString m3 Exit:</small>

<small> HienString m4 ret</small>

<small>@CN3$qv ENDP END </small>

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>5. DEMO TỒN BỘ CHƯƠNG TRÌNH5.1 MENU chương trình</b>

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<i><b>5.2 CHIATEP</b></i>

<b>5.3 HIENSOBE</b>

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b>5.4 JOYSTICK</b>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>6. KẾT LUẬN</b>

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.

<b>7. TÀI LIỆU THAM KHẢO</b>

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

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×