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 (1.14 MB, 24 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>TRƯỜNG ĐẠI HỌC MỞ HÀ NỘIKHOA CƠNG NGHỆ THƠNG TIN</b>
<i><b> 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</b></i>
Hà Nội – Năm 2023
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">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 TỒ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
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">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.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><b>II. ĐỀ BÀI</b>
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 .... Thốt khỏi chương trình Ví dụ khi CT chạy:
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"><b>III. 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ứ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.
<i><b>1. Chương trình C++</b></i>
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ì thốt khỏi chương trình. Màn hình giới thiệu sẽ có nội dung như sau:
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">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:
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:’
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Nhấn phím 4 để thố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ẽ thốt chương trình con và trở về MENU lựa chọn chính.
<b>2. Chức năng lấy thời gian của tệp</b>
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 <b>3dh</b> của ngắt int <b>21h</b> với
<b>AL=0 để đọc mở tệp thành cơng thì cờ carry </b>
- Để lấy time của tệp ta sử dụng chức năng <b>57h</b> của ngắt int <b>21h </b>với
<b>AL=0 để lấy time</b>
- Sau khi dùng chức năng <b>57h</b> của ngắt int <b>21h</b> thì time sẽ được chứa trong thanh ghi <b>CX</b>, 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
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="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
<b>CX</b> vào <b>AX</b> để 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 <b>AX </b>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 <b>AX</b> ra màn hình
<b>3. Chức năng đếm số lượng thành phần âm của dãy số nguyên</b>
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ố ngun 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 <b>DX </b>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 <b>DX </b>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 <b>DX </b>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
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">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 <b>AX</b> ra màn hình
<b>4. Chức năng kiểm tra địa chỉ cơ sở của VIDEORAM</b>
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 <b>AL</b> 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
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">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. 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){
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">if(( cin>>cn) && cn>0 && cn<5){
cout<<"\n Nhap khong hop le!"; cout<<"\n Vui long nhap lai: ";
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">db 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!$'
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">db 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
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19"><b>4. Địa chỉ cơ sở của VIDEORAM</b>
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 $'
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21"><b>V. DEMO TỒN BỘ CHƯƠNG TRÌNH1. MENU chương trình</b>
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22"><b>2. Lấy thời gian của tệp</b>
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23"><b>3. Số lượng thành phần âm của dãy số nguyên</b>
<b>4. Kiểm tra địa chỉ cơ sở của VIDEORAM</b>
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24"><b>VI. 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ắ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.
<b>VII. 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ô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
</div>