1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập lớn môn lập trình hệ thống Đề tài số 7 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

19 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chia đôi 1 tệp thành 2 tệp bằng nhau
Tác giả Nguyễn Thị Mỹ Duyên- 1910A01, Nguyễn Thị Ngọc Minh - 2010A05
Người hướng dẫn Đặng Thành Phu
Trường học Trường Đại Học Mở Hà Nội
Chuyên ngành Lập trình hệ thống
Thể loại Báo cáo
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 19
Dung lượng 373,9 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ngôn ngữ lập trình assembly được sử dụng trong nhiều lĩnh vực, bao gồm: ● Hệ điều hành: Một số phần cốt lõi của hệ điều hành được viết bằng assembly để đảm bảo hiệu suất tối ưu.. Thoát k

Trang 1

TRƯỜ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ố 7

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

Hà Nội – 2024

Giảng Viên Hướng Dẫn: Đặng Thành Phu

Sinh Viên Thực Hiện : Nguyễn Thị Mỹ Duyên- 1910A01 Nguyễn Thị Ngọc Minh - 2010A05

Trang 2

MỤC LỤC

1 MỞ ĐẦU 3

2 ĐỀ TÀI 4

3 MÔ TẢ BÀI TẬP LỚN 5

3.1 Chương trình chính C++ 5

3.2 Chương trình chia đôi 1 tệp thành 2 tệp bằng nhau 6

3.3 So sánh 2 số nguyên và hiện số bé 7

3.4.Liệu máy tính có cổng Joystick hay không 8

4 LẬP TRÌNH - CÀI ĐẶT 8

4.1 Chương trình chính 8

4.2 Chương trình chia đôi 1 tệp thành 2 tệp bằng nhau 10

4.3 Chương trình so sánh 2 số nguyên và hiện số nguyên bé 15

4.4 Chương trình kiểm tra máy tính có cổng Joystick hay không 16

4.5 Chương trình thoát khỏi chương trình 17

5 DEMO TOÀN BỘ CHƯƠNG TRÌNH 17

5.1 Chương trình chính 17

5.2 Chương trình đặt ngày, tháng, năm cho hệ thống 18

5.3 Chương trình chia đôi 1 tệp thành 2 tệp bằng nhau 18

5.4 Chương trình so sánh 2 số nguyên và hiện số nguyên bé 18

5.5 Liệu máy tính có cổng Joystick không 19

6 TÀI LIỆU THAM KHẢO 19

Trang 3

1 MỞ ĐẦU

Ngôn ngữ lập trình assembly là một phần quan trọng của lĩnh vực lập trình hệ thống và máy tính Nó cung cấp một giao diện trực tiếp với phần cứng máy tính, cho phép lập trình viên tương tác với và kiểm soát các tài nguyên phần cứng một cách chi tiết

● Gần gũi với ngôn ngữ máy: Assembly được viết bằng ngôn ngữ máy, gần gũi với ngôn ngữ bin (binary) của máy tính Mỗi lệnh assembly tương ứng với một lệnh máy cụ thể

● Tối ưu hóa hiệu suất: Lập trình assembly cho phép tối ưu hóa hiệu suất ứng dụng vì bạn có kiểm soát trực tiếp trên cách mã máy hoạt động

● Quản lý bộ nhớ: Bạn phải quản lý bộ nhớ thủ công trong assembly, điều này cung cấp kiến thức sâu về cách máy tính quản lý bộ nhớ

● Làm việc gần với phần cứng: Assembly cho phép truy cập trực tiếp vào các thiết bị và giao tiếp với phần cứng máy tính Ngôn ngữ lập trình assembly được sử dụng trong nhiều lĩnh vực, bao gồm:

● Hệ điều hành: Một số phần cốt lõi của hệ điều hành được viết bằng assembly để đảm bảo hiệu suất tối ưu

● Trình điều khiển thiết bị: Assembly được sử dụng để viết các trình điều khiển cho các thiết bị phần cứng

● Lập trình nhúng: Trong các ứng dụng nhúng, assembly là lựa chọn phổ biến để kiểm soát phần cứng

Ngôn ngữ lập trình assembly là một công cụ mạnh mẽ trong lập trình hệ thống và là cầu nối giữa lập trình viên và phần cứng máy tính Hiểu biết

về assembly mang lại sự hiểu rõ sâu sắc về cách máy tính hoạt động và cung cấp khả năng tối ưu hóa hiệu suất trong việc phát triển ứng dụng

Trang 4

2 ĐỀ TÀI

CÂU 7

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 5

3 MÔ TẢ BÀI TẬP LỚN

3.1 Chương trình chí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: NTN, SLPTL và DCCOM2

Chương trình C++ sẽ hiện màn hình giới thiệu thông tin tên của bài tập lớn

Sau đó khi ấn ‘c’ thì hiện ra màn hình chứa menu các chức năng của bài tập lớn Màn hình sẽ có nội dung như ảnh sau :

Trang 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 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

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 ‘Vao sai roi, nhap lai nhe!’

Nhấ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 hoàn thành xong chương trình con, sẽ ấn phím bất kỳ để thoát chương trình con và trở về MENU lựa chọn chính

3.2 Chương trình chia đôi 1 tệp thành 2 tệp bằng nhau

❖ Chức năng: chia đôi tệp thành 2 tệp bằng nhau

❖ Cách làm:

- Định nghĩa hai macro: HienString để hiển thị một chuỗi ký tự và

CLRSCR để xóa màn hình.

Trang 7

- Sử dụng các hàm hệ thống DOS để thực hiện các hoạt động như mở, đọc, ghi và đóng tệp

- Chương trình yêu cầu người dùng nhập tên của tệp cần chia

- Sau khi nhập tên tệp, thì mở tệp và đọc toàn bộ nội dung vào bộ đệm

- Sau đó, tạo hai tệp mới và ghi nửa đầu tiên của dữ liệu vào tệp thứ nhất

và nửa còn lại vào tệp thứ hai

- Cuối cùng, yêu cầu người dùng có muốn tiếp tục chương trình hay không

❖ Chương trình con sử dụng:

o HienString: Hiện thông báo

o call GET_FILE_NAME: Vào tên tệp

3.3 So sánh 2 số nguyên và hiện số bé

❖ Chức năng: Chương trình so sánh 2 số nguyên mà người dùng nhập từ bàn phím Sau đó hiển thị số nhỏ hơn trên màn hình và hỏi người dùng có muốn tiếp tục không Nếu có thì lặp lại quá trình, nếu không thì chương trình kết thúc

❖ Cách làm:

- Chương trình bắt đầu bằng việc xóa màn hình để làm sạch màn hình terminal

- Sau đó, hiển thị thông điệp yêu cầu người dùng nhập số thứ nhất từ bàn phím

- Tiếp theo, lấy giá trị số thứ nhất từ người dùng bằng cách gọi procedure

VAO_SO_N từ một tệp mã nguồn khác.

- Giá trị số thứ nhất sau đó được lưu vào thanh ghi BX để so sánh

- Tiếp theo, chương trình hiển thị thông điệp yêu cầu nhập số thứ hai từ người dùng

- Lấy giá trị số thứ hai từ người dùng cũng bằng cách gọi procedure

VAO_SO_N.

- Hai số được so sánh và chương trình giữ nguyên nếu số thứ hai nhỏ hơn

số thứ nhất; nếu không, nó hoán đổi giá trị của hai số để số nhỏ hơn được lưu vào thanh ghi AX

- Sau đó, chương trình hiển thị số nhỏ hơn trên màn hình

- Tiếp theo, hiển thị thông điệp hỏi người dùng có muốn tiếp tục không

- Chương trình chờ người dùng nhập một ký tự từ bàn phím để quyết định tiếp tục hay kết thúc

Trang 8

- Nếu người dùng chọn tiếp tục bằng cách nhập 'c', chương trình quay lại bước đầu tiên; nếu không, chương trình kết thúc

❖ Chương trình con sử dụng :

 VAO_SO_N : vào số thứ 1

 VAO_SO_N : Vào số thứ 2

3.4.Liệu máy tính có cổng Joystick hay không

❖ Chức năng: kiểm tra máy tính có cổng Joystick hay không và hiển thị kết quả tương ứng

❖ Cách làm:

- Sử dụng một hàm hoặc macro để xóa màn hình

- Sử dụng một hàm hoặc macro để hiển thị các thông điệp yêu cầu người dùng

- Sử dụng một ngắt hệ thống phù hợp (trong đoạn mã đã cung cấp, ngắt

int 11h được sử dụng).

- Lưu kết quả kiểm tra được trả về trong thanh ghi AH.

- Xác định trạng thái của cổng joystick dựa trên kết quả được lưu trong

thanh ghi AH.

- Trong đoạn mã đã được cung cấp, bit thứ 5 của thanh ghi AH được sử

dụng để xác định trạng thái của cổng joystick Nếu bit này được set, tức

là CF=1, máy tính không có cổng joystick; nếu không, máy tính có

cổng joystick

- Dựa vào kết quả kiểm tra, hiển thị thông điệp tương ứng cho người dùng

- Hiển thị thông điệp yêu cầu người dùng nhấn một phím bất kỳ để tiếp tục

- Chờ người dùng nhập một phím và kết thúc chương trình

❖ Chương trình con sử dụng:

o HienString: hiện thông báo

4 LẬP TRÌNH - CÀI ĐẶT

4.1 Chương trình chính

#include <iostream.h>

#include <conio.h>

Trang 9

extern CHIADOITEP();

extern int SOSANH2SO();

extern CONGJOYSTICK();

extern VEDOS();

void main()

{

char tl;

int cn; /*chuc nang*/

clrscr();

cout<<"\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 NGUYEN THI MY DUYEN Lop: 1910a01"; cout<<"\n 2 NGUYEN THI NGOC MINH Lop: 2010A05";

cout<<"\n\n\n Co tiep tuc CT (c/k)?";

tl=getch();

if(tl=='c')

{

L1:

clrscr();

cout<<"\n CAC CHUC NANG CUA BTL";

cout<<"\n -*** -";

cout<<"\n\n 1 Chia doi 1 tep thanh 2 tep bang nhau ";

cout<< "\n 2 So sanh 2 so nguyen va hien so be";

cout<< "\n 3 Lieu MT co cong Joystick";

cout<< "\n 4 Ve DOS";

cout<< "\n\n Hay chon: ";

cin>>cn;

switch(cn)

{

case 1: CHIADOITEP() ; break;

case 2: SOSANH2SO(); break;

case 3: CONGJOYSTICK(); break;

case 4: VEDOS(); break;

Trang 10

default:cout<<"\n Vao sai roi! Vui long chon lai";

}

cout<<"\n Co thuc hien CN khac(c/k): ";

tl=getch();

if(tl=='c') goto L1;

}

}

4.2 Chương trình chia đôi 1 tệp thành 2 tệp bằng nhau

; KET THUC BANG '$' RA MAN HINH |

; -HienString MACRO xau

push AX DX

mov DX,offset xau ; DX tro den dau xau

mov AH,9 ; Chuc nang hien 1 xau ky tu

int 21h ; (ket thuc bang '$') len man hinh

pop DX AX

ENDM

; -; MACRO XOA MAN HINH |

; -CLRSCR MACRO

push AX

mov AH,0fh ; Chuc nang lay mode man hinh hien thoi

int 10h ; va so mode nam o AL

mov AH,0 ; Chuc nang dat mode cho man hinh

int 10h ; so mode can dat nam o AL

pop AX

ENDM

; -INCLUDE lib1.asm

.MODEL small

.STACK 100h

Trang 11

ct1 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_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 !$'

the_tep dw ?

the_tepc1 dw ?

the_tepc2 dw ?

buff db 30

db ?

file_name db 30 dup(?)

dodai_tep dw ?

dem db 20000 dup(?)

tieptuc db 13,10,' Co tiep tuc CT (c/k) ? $'

.CODE

PUBLIC @CHIADOITEP$qv

@CHIADOITEP$qv PROC

L_CT0:

clrscr

HienString ct1

lea dx,buff ; Vao ten tep can chia

call GET_FILE_NAME

lea dx,file_name ; Mo tep da co de doc

mov al,0

mov ah,3dh

int 21h

jnc L_CT1 ; Mo tep tot(cf=0) thi nhay

HienString Err_O ; con mo tep co loi (CF=1) thi hien Err_O

jmp Exit_CT

L_CT1:

mov the_tep,ax ; Cat the tep co trong AX > bien the tep

mov bx,ax ; dua con tro ve cuoi tep de xac dinh do dai tep

Trang 12

xor cx,cx ; khoang cach so sanh la 0

mov dx,cx

mov al,2 ; So voi cuoi tep

mov ah,42h ; Chuc nang di chuyen con tro tep

int 21h

jnc L_CT2 ; Chuyen con tro tep tot thi nhay

HienString Err_S ; con chuyen co loi (CF=1)thi hien thong bao Err_S jmp DONG_TEP

L_CT2:

mov dodai_tep,ax ; Chuyen ve cuoi tep tot thi ax la do dai tep -> bien dodai_tep

mov bx,the_tep ; dua con tro tep tro ve dau tep

mov al,0 ; So voi dau tep

xor cx,cx ; Khoang cach so sanh la 0

mov dx,cx

mov ah,42h ; Chuc nang di chuyen con tro tep

int 21h

jnc L_CT3 ; Chuyen con tro tep tot thi nhay

HienString Err_S ; con chuyen co loi(cf=1) thi hien thong bao Err_S jmp DONG_TEP

L_CT3:

mov bx,the_tep ; doc toan bo tep -> vung dem

mov cx,dodai_tep

lea dx,dem

mov ah,3fh ; Chuc nang doc tep

int 21h

jnc L_CT4 ; doc tep tot thi nhay

HienString Err_R ; con loi khi doc tep thi hien thong bao Err_R

jmp DONG_TEP

L_CT4:

HienString ct2 ; Hien thong bao ct2

lea dx,buff ; vao ten tep con 1

call GET_FILE_NAME

lea dx,file_name ; Chuc nang tao tep moi va mo

mov cx,0 ; Khong dat thuoc tinh nao cho tep

mov ah,3ch

Trang 13

int 21h

jnc L_CT5 ; Tao va mo tep tot thi nhay

HienString Err_O ; con co loi khi tao va mo tep thi hien thong bao Err_O

jmp DONG_TEP

L_CT5:

mov the_tepc1,ax ;the tep o AX-> bien the_tep 1

mov bx,ax ; Ghi 1/2 du lieu tu vung dem -> tep con 1

mov cx,dodai_tep

shr cx,1 ; 1/2 do dai tep

lea dx,dem

mov ah,40h

int 21h

jnc L_CT6 ; Ghi tot thi nhay

HienString Err_W ; con co loi khi ghi tep thi hien thong bao Err_W jmp DONG_TEPC1

L_CT6:

HienString ct3 ; Hien thong bao ct3

lea dx,buff ; Vao ten tep con 2

call GET_FILE_NAME

lea dx,file_name ; Chuc nang tao tep moi va mo

mov cx,0 ; Khong dat thuoc tinh cho tep

mov ah,3ch

int 21h

jnc L_CT7 ; Tao va mo tep tot thi nhay

HienString Err_O ; con co loi khi ghi tep thi hien thong bAO Err_O jmp DONG_TEPC1

L_CT7:

mov the_tepc2,ax ; The tep AX -> bien the_tepc2

mov bx,ax ; Ghi 1/2 du lieu con lai tu dem vao tep con 2

mov cx,dodai_tep

mov ax,cx

shr ax,1

sub cx,ax ; so luong byte con lai cho tep con 2

lea dx,dem

add dx,ax ; Tro den dau vung nho chua du lieu con lai

Trang 14

mov ah,40h

int 21h

jnc DONG_TEPC2 ; Ghi tep tot thi nhay

HienString Err_W ; con co loi khi ghi tep thi hien thong bao Err_W DONG_TEPC2:

mov bx,the_tepc2 ; dong tep con 2

mov ah,3eh

int 21h

jnc DONG_TEPC1 ; dong tep tot thi nhay

HienString Err_C ; con co loi khi dong tep thi hien thong bao Err_C DONG_TEPC1:

mov bx,the_tepc1 ; dong tep con 1

mov ah,3eh

int 21h

jnc DONG_TEP

HienString Err_C

DONG_TEP:

mov bx,the_tep ; dong tep can chia

mov ah,3eh

int 21h

jnc Exit_CT

HienString Err_C

Exit_CT:

HienString tieptuc ; Hien thong bao tieptuc

mov ah,1 ; Cho 1 ki tu tu ban phim

int 21h

cmp al,'c' ; ky tu vao co phai 'c'

jne Thoat_CT ; Khong phai 'c' thi nhay de Thoat_CT,

jmp L_CT0 ; con dung la 'c' thi nhay ve L_CT0

Thoat_CT:

ret

@CHIADOITEP$qv ENDP

INCLUDE lib3.asm ; lib3.asm chua CT con GET_FILE_NAME

END

Trang 15

4.3.Chương trình so sánh 2 số nguyên và hiện số nguyên bé

include lib1.asm

.MODEL small

.DATA

M1 db 13,10,' CHUC NANG SO SANH HAI SO NGUYEN '

db 13,10,' -*** -'

db 13,10,13,10,' Hay vao so thu nhat: $'

M2 db 13,10,' Hay vao so thu hai: $ '

M3 db 13,10,' So be la: $'

M4 db 13,10,' Co tiep tuc CT (c/k)?: $'

.CODE

PUBLIC @SOSANH2SO$qv

@SOSANH2SO$qv PROC

L0:

clrscr ; Xoa man hinh

HienString M1 ; Hien thong bao M1

call VAO_SO_N ; Vao so thu 1

mov bx,ax ; BX chua gia tri so thu 1

HienString M2 ; Hien thong bao M2

call VAO_SO_N ; Vao so thu 2 (AX chua gia tri so thu 2)

HienString M3 ; Hien thong bao M3

cmp ax,bx ; So sanh 2 so (o AX va BX)

jl L1 ; Neu AX < BX thi nhay den L1 (giu nguyen),

xchg ax,bx ; con AX > hoac = BX thi doi cheo de luc nao AX cung chua so be

L1:

call HIEN_SO_N ; Hien so be

HienString M4 ; Hien thong bao M4

mov ah,1 ; Cho nhan 1 ky tu tu ban phim

int 21h

cmp al,'c' ; Lieu ky tu vao la 'c'

jne Thoat ; Ky tu vao khong phai la 'c' thi nhay ve Thoat,

jmp L0 ; con ky tu vao la 'c' thi quay ve L0

Thoat:

ret

@SOSANH2SO$qv ENDP

Ngày đăng: 26/03/2025, 22:33

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w