Tài liệu Giáo trình thực hành: Lập trình hệ thống pdf

39 815 5
Tài liệu Giáo trình thực hành: Lập trình hệ thống pdf

Đ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

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ BỘ MÔN ĐIỆN TỬ - VIỄN THƠNG Giáo trình thực hành LẬP TRÌNH HỆ THỐNG Biên soạn: ThS Nguyễn Hứa Duy Khang Ks Trần Hữu Danh -ĐHCT5-2008 Thực hành lập trình hệ thống NỘI DUNG Giới thiệu BÀI 1: NHẬP MÔN HỢP NGỮ 1 Mục tiêu Kiến thức cần chuẩn bị Nội dung thực hành 3.1 Khảo sát lệnh Intel-8086 3.2 Cấu trúc chương trình dạng EXE 3.3 Viết chương trình đơn giản Bài tập đề nghị BÀI 2: XUẤT NHẬP KÝ TỰ Mục tiêu Kiến thức cần chuẩn bị Nội dung thực hành 3.1 In ký tự hình 3.2 In chuỗi ký tự hình 3.3 Nhận ký tự từ bàn phím 3.4 Nhận chuỗi ký tự từ bàn phím Bài tập đề nghị BÀI 3: CẤU TRÚC RẼ NHÁNH – VÒNG LẬP Mục tiêu Tóm tắt lý thuyết Nội dung thực hành 12 3.1 Cấu trúc rẽ nhánh 12 3.2 Cấu trúc vòng lập 13 Bài tập đề nghị 13 BÀI 4: NHẬP XUẤT SỐ DẠNG BIN-HEX-DEC 15 Mục tiêu 15 Kiến thức cần chuẩn bị 15 Nội dung thực hành 15 3.1 Nhập xuất số nhị phân 15 3.2 Nhập xuất số thập lục phân 16 3.3 Xuất số thập phân nguyên dương 18 Bài tập đề nghị 19 BÀI 5: XỬ LÝ TẬP TIN 21 Mục tiêu 21 Kiến thức cần chuẩn bị 21 Nội dung thực hành 21 3.1 Tạo tập tin 21 Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh i Thực hành lập trình hệ thống 3.2 Ghi nội dung tập tin 22 3.3 Đọc nội dung tập tin 23 3.4 Xóa tập tin 25 3.5 Đổi tên tập tin 26 Bài tập đề nghị 27 BÀI 6: XỬ LÝ CHUỖI KÝ TỰ 28 Mục tiêu 28 Kiến thức cần chuẩn bị 28 Nội dung thực hành 28 3.1 So sánh chuỗi 28 3.2 Di chuyễn chuỗi 30 3.3 Dị tìm chuỗi 31 Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh ii Giới Thiệu Thực hành Lập trình Hệ Thống giúp cho sinh viên viết chương trình ngơn ngữ Assembly máy tính PC Giáo trình hướng dẫn sinh viên kỹ việc lập trình Assembly như: Sử dụng trình biên dịch hợp ngữ môi trường Windows, biên dịch, sửa lỗi liên kết, khảo sát tập lệnh, ngắt đơn giản Hệ điều hành DOS Để vận dụng nâng cao kỹ lập trình hệ thống Hợp ngữ, địi hỏi sinh viên phải nổ lực nhiều việc tự học, đọc thêm tài liệu để bổ sung kiến thức định phần cứng máy tính nguyên ly vận hành thiết bị ngoại vi có liên quan, như: Máy in, hệ vi điều khiển, cổng vào nối tiếp/ song song Thời lượng mơn học có giới hạn, nên thực hành tổ chức thành chủ đề sau đây, chủ đề thực hành buổi (5 tiết): Bài 1: Nhập môn hợp ngữ Bài 2: Xuất nhập ký tự Bài 3: Cấu trúc rẽ nhánh – Vòng lập Bài 4: Xử lý ký tự - Ký số Bài 5: Xử lý tập tin Bài 6: Nhập xuất số BIN-HEX-DEC Để thực hành đạt hiệu cao, sinh viên cần phải chuẩn bị cho trước vào bắt đầu thực hành Muốn đạt điều này, sinh viên phải tuân thủ phương pháp học sau: Trước vào thực hành: - Nắm mục tiêu thực hành Xem lại kiến thức cần chuẩn bị nêu cho thực hành Nắm nội dung cần phải làm buổi thực hành Trong thực hành: - Tuyệt đối tuân thủ thực hành theo thứ tự nội dung thực hành Hoàn thành vấn đề trả lời câu hỏi đặt phần trước chuyển sang thực hành phần sau Quan sát tượng, thay đổi, xem xét đánh giá kết sau thao tác thực hành Lập lại thao tác thực hành nhiều lần, tìm cách giải khác sau thực hành theo yêu cầu cho đề So sánh, nhận xét cách giải khác Sau thực hành: - Đối chiếu mục tiêu thực hành với thực hành Nếu mục tiêu chưa thành thạo phải tìm cách lập lại thực hành để nắm mục tiêu vững Trong trình biên soạn, khơng thể tránh khỏi sơ xuất, chân thành góp ý chỉnh sửa để giáo trình ngày hồn chỉnh ThS Nguyễn Hứa Duy Khang Email: nhdkhang@ctu.edu.vn Bài – Nhập môn hợp ngữ Bài 1: Nhập Môn Hợp Ngữ MỤC TIÊU - Sử dụng công cụ Emu8086 để khảo sát lệnh Intel-8086 Sử dụng chức công cụ RadASM như: Soạn thảo, Hợp dịch (Assemble), Liên kết (Link) Chạy chương trình (Run) Viết cấu trúc chương trình hợp ngữ dạng tái định (EXE) Đọc hiểu sửa lỗi chương trình KIẾN THỨC CẦN CHUẨN BỊ - Các thao tác hệ điều hành Windows Cấu trúc chương trình hợp ngữ dạng EXE Qui trình Soạn thảo – Dịch chương trình Các lệnh đơn giản Intel-8086 thường dùng như: MOV, ADD, SUB, INC, DEC, AND, OR (Xem cú pháp giáo trình) NỘI DUNG THỰC HÀNH 3.1 Khảo sát lệnh Intel-8086: 3.1.1 Nhập vào Emu8086 đoạn lệnh sau dự đoán trước kết quả: MOV AH, 80 MOV AL, 86 MOV BX, AX MOV DH, BL MOV DL, BH MOV SI, CS ; AH ← 80 (AX = ?) ; AL ← 86 (AX = ?) ; BX ← AX (BH = ?, BL = ?) ; DH ← BL (DH = ?, DX = ?) ; DL ← BH (DL = ?, DX = ?) ; SI ← CS (SI = ?) Thực lệnh, sau lệnh ghi lại kết ghi ngoặc để đối chiếu với kết dự đốn giải thích 3.1.2 Thực hành tương tự câu 3.1.1 đoạn lệnh sau: MOV ADD DEC SUB AND AX, 8086 AL, AX AH, 10h AX, 0FF0h ; AX ← 8086 (AH = ?, AL = ?) ; AL ← AL + (AL = ?, AX = ?) ; AX ← AX – (AH = ?, AL = ?, AX = ?) ; AH ← AH – 10h (AH = ?, AL = ?, AX = ?) ; AX ← AX and 0FF0h (AX = ?) 3.1.3 Sinh viên chủ động lập lại lần câu 3.1.1 3.1.2 với giá trị toán hạng khác dịng lệnh 3.2 Cấu trúc chương trình dạng EXE: 3.1.1 [HELLO.ASM] Dùng RadASM để soạn thảo chương trình Hợp ngữ sau đây: Lưu ý: - Chương trình hồn tồn khơng có lỗi Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Nhập môn hợp ngữ - Trong có lệnh mà sinh viên chưa học đến, điều không cần quan tâm, điều cần quan tâm thực hành Cấu trúc chương trình hợp ngữ - Đặt tên file chương trình nguồn HELLO.ASM DSEG SEGMENT ; Tạo đoạn DSEG chuoi DB “Hello World!$” ; Khai báo biến chuỗi DSEG ENDS CSEG SEGMENT ; Tạo đoạn CSEG ASSUME CS: CSEG, DS: DSEG ; CSEG đoạn lệnh, DSEG liệu begin: MOV AX, DSEG ; Khởi động địa đoạn liệu MOV DS, AX MOV AH, 09h ; AH ← 09h LEA DX, chuoi ; DX ← địa offset biến chuoi INT 21h ; gọi ngắt 21h MOV AH, 01h ; AH ← 01h INT 21h ; gọi ngắt 21h MOV AH, 4Ch ; Thốt chương trình INT 21h CSEG ENDS END begin a Hợp dịch chương trình HELLO.ASM kiểm tra xem file HELLO.OBJ tạo chưa b Liên kết chương trình HELLO, kiểm tra xem file HELLO.EXE tạo chưa c Chạy chương trình HELLO.EXE, quan sát hình, chương trình làm gì? d Thay đổi “Hello World!$” thành “Wellcome to Assembly$” Làm lại bước a, b c Chương trình làm gì? 3.2.2 [HELLO2.ASM] Sửa file HELLO.ASM cho giống hệt chương trình sau đặt tên lại HELLO2.ASM (chỉ khác chổ in nghiêng) - Lưu ý: Chương trình có vài lỗi a Dịch chương trình HELLO2.ASM, ghi lại thơng tin lỗi: Số lỗi, lỗi gì, dòng nào? b Kiểm tra xem file HELLO2.OBJ tạo không? Tại sao? c Sửa lỗi từ dòng xuống, lập lại câu a hết lỗi d Liên kết chương trình HELLO2 Kiểm tra xem có file HELLO2.EXE khơng? e Chạy chương trình HELLO2.EXE, so sánh kết với 3.1.1.d Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Nhập môn hợp ngữ DSEG SEGMEMT ; Tạo đoạn DSEG chuoi DW “Wellcome to Assembly$” ; Khai báo biến chuỗi DSEG ENDS CSEG SEGMENT ; Tạo đoạn CSEG ASSUME CS: CSEG, DS: DSEG ; CSEG đoạn lệnh, DSEG liệu begin: MOV BX, SSEG ; Khởi động địa đoạn liệu MOV DS, BX MOV AH, 09h ; AH ← 09h LEA DH, chuoi ; DX ← địa offset biến chuoi INT 21h ; gọi ngắt 21h MOV AH, 01h ; AH ← 01h INT 21h ; gọi ngắt 21h MOV AH, 4Ch ; Thốt chương trình INT 21h CSEG ENDS END Begin 3.3 Viết chương trình đơn giản: 3.3.1 [SUM1.ASM] Viết chương trình dạng EXE để tính kết biểu thức sau, lưu trữ kết AX: 10 + 8086 - 100h + 350 + 0FAh Lưu ý: - Chỉ khai báo đoạn lệnh để viết chương trình a Dịch sửa lỗi (nếu có lỗi) chạy chương trình b Dùng Emu8086 để chạy chương trình kiểm tra kết lưu AX 3.3.2 [SUM2.ASM] Viết chương trình dạng EXE để tính kết biểu thức có dạng tổng quát sau: KQUA = A + B – C + D + E Trong đó: KQUA, A, B, C, D, E biến byte khai báo đoạn liệu Lưu ý: - Chương trình gồm đoạn: Đoạn lệnh Đoạn liệu dùng để chứa Biến a Gán giá trị biến A = 1000, B = 10, C = 1Fh, D = 30h, E = 300Ah Dịch chạy chương trình b Dùng Emu8086 để kiểm tra kết câu a c Áp dụng SUM2.ASM để tính biểu thức cho câu 3.3.1 Dùng Emu8086 để kiểm tra kết BÀI TẬP ĐỀ NGHỊ: 4.1 Dùng Emu8086 để khảo sát lệnh khác tập lệnh Intel-8086 4.2 Tự tìm hiểu thêm chức khác Emu8086 Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Nhập môn hợp ngữ 4.3 Viết chương trình tính biểu thức sau: (Phải viết theo kiểu sử dụng biến để chứa toán hạng kết quả, SV tự đặt tên biến theo ý mình) a 15h * 250 d 1000 ÷ 100 b 16 * 0AF1h e 1000 ÷ 100h c 300 * 400 f 3AB45Eh ÷ 0A1h 4.4 Sử dụng Emu8086 để kiểm chứng kết chương trình viết cho 4.3 Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Xuất nhập ký tự Bài 2: Xuất Nhập Ký Tự MỤC TIÊU - Sử dụng ngắt mềm để viết chương trình: in ký tự - chuỗi ký tự lên hình nhập ký tự - chuỗi ký tự từ bàn phím - Hiểu cách quản lý ký tự ký số Hợp ngữ KIẾN THỨC CẦN CHUẨN BỊ - Kết thực hành - Các hàm 01h, 02h, 06h, 07h, 08h, 09h, 0Ah ngắt 21h - Bảng mã ASCII 3.NỘI DUNG THỰC HÀNH 3.1 In ký tự nàm hình - Chương trình sử dụng hàm 2, ngắt 21h để in ký tự B hình viết sau Hãy soạn thảo lưu lại thành tập tin nguồn có tên BAI_2A.ASM CSEG start: CSEG SEGMENT ASSUME CS: CSEG mov ah, 02h ; Hàm 2, in ký tự hình mov dl, ‘B’ ; DL chứa ký tự cần in int 21h ; gọi ngắt để thực hàm mov ah, 08h ; Hàm 08h, ngắt 21h int 21h mov ah, 4Ch ; Thốt khỏi chương trình int 21h ENDS END start - Dịch sửa lỗi (nếu có) chạy chương trình để xem kết in hình - Các dòng lệnh thực chức in ký tự ‘B’ hình? Các dịng lệnh khác dùng làm gì? - Sửa lại chương trình để in hình ký tự ‘D’ Chạy chương trình kiểm chứng kết - Viết chương trình để in hình số - Viết chương trình để in hình số 89 - Hai dịng lệnh có chức chương trình? Nếu khơng có dịng lệnh chương trình thực nào? (Thử xóa bỏ dịng lệnh chạy chương trình, quan sát kết để phát chức năng) Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Xuất nhập ký tự 3.2 In chuỗi ký tự hình - Muốn in chuỗi ký tự hình sử dụng hàm 9, ngắt 21h chương trình sau đây, soạn thảo đặt tên tập tin nguồn BAI_2B.ASM - Dịch, sửa lỗi (nếu có) chạy chương trình để xem kết hình - Viết lại chương trình để in hình chuỗi “Truong Dai Hoc Can Tho” - Sửa khai báo biến chuoi có dạng sau: chuoi DB ‘Truong Dai Hoc’, 10, 13, ‘Can Tho$’ - Dịch chạy chương trình để xem kết Trong khai báo biến chuoi, giá trị 10, 13 có ý nghĩa việc in chuỗi hình - Sửa lại chương trình để in hình số 2006 DSEG SEGMENT chuoi DB ‘Chao sinh vien nganh Cong Nghe Thong Tin.$’ DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG start: mov ax, DSEG mov ds, ax mov ah, 09h ; Hàm 9, in chuỗi ký tự hình lea dx, chuoi ; dl chứa ký tự cần in int 21h ; gọi ngắt thực mov ah, 08h int 21h mov ah, 4Ch ; khỏi chương trình int 21h CSEG ENDS END start 3.3 Nhận ký tự từ bàn phím - Chương trình sau (trang 3) sử dụng hàm 01, ngắt 21h để nhận ký tự từ bàn phím Soạn thảo đặt tên tập tin nguồn BAI_2C.ASM - Dịch, sửa lỗi (nếu có) chạy chương trình, gõ phím cần nhập Quan sát kết hình - Ký tự nhập lưu trữ đâu CPU quản lý dạng thức gì? (Dùng Emu8086 để khảo sát) - Sửa chương trình để đọc ký tự hàm 7, ngắt 21h - Chạy chương trình so sánh hoạt động hàm hàm Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh Bài – Xử lý tập tin - Tại trường hợp này, dùng hàm 08h int 21h đứng trước hàm 4ch int 21h ? - Tại phải cất thẻ file Nếu khơng cần đóng file có cần cất thẻ file hay không ? - Trong đoạn chương trình mẫu có cần thiết phải đóng tập tin hay khơng ? Có thể bỏ biến thefile đoạn chương trình mẫu khơng ? Khi phải dùng lệnh để thay điều Nếu có thay đổi, biên dịch cho chạy chương trình để kiểm chứng lại kết - Hãy sửa đổi file BAI_5A.ASM lưu với tên BAI_5A1.ASM để thực yêu cầu sau: tạo tập tin mới, tên tập tin nhập từ bàn phím Gợi ý: dùng hàm 0ah int 21h để nhập vào tên file, ý cuối chuỗi chứa tên file phải có zero, dùng hàm 0ah nhập zero vào cuối chuỗi được, ta nhập ký tự ‘0’ vào mã ascii ký tự ‘0’ zero (con số 0) Do đó, để thực điều dùng giải thuật đưa cuối chuỗi sau: xor cx, cx ; dua zero ve cuoi chuoi mov cl, len ;khai bao bien de dung ham 0ah cua int 21h dang lea bx, tenfile; max db 250 ; so ky tu toi da duoc nhap mov dl,0 ; len db ? ; chieu dai chuoi da nhap mov [bx], dl ; tenfile db 250 dup(?); chua noi dung duoc nhap 3.2 Ghi nội dung biến string1 vào tập tin có tên thư mục ổ đĩa với đường dẫn sau: “D:\TT_ASM\DATA.TXT” - - - - - Soạn thảo đoạn chương trình mẫu phía lưu với tên BAI_5B.ASM Biên dịch cho chạy file BAI_5B.ASM để kiểm tra xem kết (vào D:\TT_ASM để xem tập tin DATA.TXT có hay chưa có nội dung hay chưa ?, có OK.) Xem xét đoạn chương trình mẫu, đưa giải thuật ghi nội dung vùng liệu vào tập tin vừa tạo Lệnh len db $ - string1 dùng để làm ? Lệnh XOR CX, CX có ý nghĩa gì? Sau thực hiên xong lệnh này, ghi CX có giá trị bao nhiêu? Có thể thay lệnh khác không ? Tại dùng lệnh MOV CL, LEN mà không dùng MOV CX, LEN hay MOV CH, LEN ? Khi dùng lệnh MOV CX, LEN cần phải thay đổi khai báo biến len ? khơng thay đổi có vấn đề xảy hay không ? Hãy thay đổi, biên dịch chạy chương trình để kiểm chứng lại kết so với chương trình mẫu Hãy sửa đổi file BAI_5B.ASM lưu với tên BAI_5B1.ASM để thực yêu cầu sau: nhập từ chuỗi ký tự bất kỳ, sau lưu vào tập tin có tên “d:\tt_asm\solieu.txt” Gợi ý: dùng hàm 0Ah int 21h để nhập vào chuỗi ký tự, sau áp dụng toàn giải thuật BAI_5B.ASM Hãy sửa đổi file BAI_5B1.ASM lưu với tên BAI_5B2.ASM để thực yêu cầu sau: tạo tên tập tin mới, tên tập tin nhập từ bàn phím ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 22 Bài – Xử lý tập tin Sau nhập vào chuỗi ký tự lưu chuỗi ký tự nhập vào tập tin vừa tạo Gợi ý: xem lại BAI_5A1.ASM để lấy lại giải thuật nhập vào tên file đưa zero (con số 0) cuối chuỗi trường hợp tên file nhập từ bàn phím vấn đề cịn lại xem lại file BAI_5B1.ASM - Hãy sửa đổi file BAI_5B2.ASM lưu với tên BAI_5B3.ASM để thực yêu cầu sau: tạo tên tập tin mới, tên tập tin nhập từ bàn phím Sau nhập vào chuỗi ký tự thường, sau đổi hoa ký tự đầu từ lưu chuỗi ký tự thay đổi vào tập tin vừa tạo Gợi ý: xem lại tập làm xử lý ký tự file BAI_5B2.ASM dseg segment string1 db len db $ tenfile db thefile dw dseg ends "Chao em co gai Lam Hong" string1 "d:\tt_asm\data.txt",0 ? cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah, 3ch ; tao tap tin moi lea dx, tenfile mov cx, ; tap tin co thuoc tinh binh thuong int 21h mov thefile, ax ; cat the file mov ah, 40h ; ghi file mov bx, thefile xor cx, cx mov cl, len lea dx, string1 int 21h mov ah, 3eh ; dong tap tin mov bx, thefile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.3 Đọc nội dung tập tin (đã tồn đĩa có nội dung) Hiển thị nội dung tập tin lên hình Soạn thảo đoạn chương trình mẫu phía lưu với tên BAI_5C.ASM - Biên dịch cho chạy file BAI_5C.ASM để kiểm tra xem kết ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 23 Bài – Xử lý tập tin - Xem lại đoạn chương trình mẫu, đưa giải thuật đọc nội dung tập tin hiển thị nội dung hình Hãy thử thay đổi thuộc tính tập tin lệnh mov al, thành giá trị khác 0, 1, Biện dịch cho chạy chương trình để xem kết Có nhận xét giá trị ? - Thẻ file có vai trị xử lý tập tin - Nếu số byte cần đọc (giá trị chứa ghi cx) lớn kích thước thật tập tin có gây lỗi hay không ? Sau đọc nội dung tập tin vào vùng đệm hàm 3fh INT 21h, ghi ax có giá trị thay đổi hay khơng chứa (giá trị) ? Làm xác định đọc xong nội dung thành tập tin ? Hãy thử đưa hướng giải - Hãy sửa đổi file BAI_5C.ASM lưu với tên BAI_5C1.ASM để thực yêu cầu sau: đọc nội dung tập tin hiển thị nội dung lên hình Tên tập tin nhập từ bàn phím Gợi ý: sử dụng lại giải thuật nhập tên file từ bàn phím đưa zero cuối chuỗi có liên quan - Hãy sửa đổi file BAI_5C1.ASM lưu với tên BAI_5C2.ASM để thực yêu cầu sau: copy nội dung tập tin sau paste sang vị trí khác Gợi ý: giải thuật nhập tên file từ bàn phím có sẵn, giải thuật copy paste sau: trước hết phải mở tập tin có hàm 3dh, định nghĩa sẵn đường dẫn chứa tên file cần mở, đọc nội dung tập tin vào vùng đệm hàm 3fh, nhớ cất thẻ file; tạo tên tập tin hàm 3ch, định nghĩa sẵn đường dẫn chứa tên file cần tạo, nhớ cất thẻ file; ghi nội dung vùng đệm vào tập tin vừa tạo hàm 40h; đóng hai tập tin lại hàm 3eh, tất hàm int 21h - Hãy sửa đổi file BAI_5C2.ASM lưu với tên BAI_5C3.ASM để thực yêu cầu sau: copy nội dung tập tin sau paste sang vị trí khác Tên tập tin copy tập tin sau paste nhập từ bàn phím Gợi ý: hồn toàn tương tự BAI_5C2.ASM, cần tận dụng lại giải thuật nhập tên file từ bàn phím từ BAI_5B3.ASM - Hãy sửa đổi file BAI_5C3.ASM lưu với tên BAI_5C4.ASM để thực yêu cầu sau: save as nội dung tập tin Tên tập tin copy save as nhập từ bàn phím Gợi ý: giống tương tự BAI_5C3.ASM - Hãy sửa đổi file BAI_5C3.ASM lưu với tên BAI_5C4.ASM để thực yêu cầu sau: đọc nội dung tập tin sau nhập chuỗi ký tự ghi sau nội dung tập tin vừa mở Tên tập tin nhập từ bàn phím Gợi ý: xem lại BAI_5C1.ASM, BAI_5B1.ASM, BAI_5B2.ASM hàm 42h int 21h (dời vị trí trỏ tập tin) - Hãy sửa đổi file BAI_5C4.ASM lưu với tên BAI_5C5.ASM để thực yêu cầu sau: mã hóa nội dung tập tin Tên tập tin cần mà hóa nhập từ bàn phím Gợi ý: nhập vào tên file cần mã hóa, mở file có hàm 3dh; đọc nội dung tập tin vào vùng đệm hàm 3fh; mã hóa vùng đệm đọc phép toán cộng, trừ, nhân, chia, and, or, not …, vừa mã hóa vừa lưu nội dung trở lại vùng đệm; dời vị trí trỏ tập tin ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 24 Bài – Xử lý tập tin đầu tập tin hàm 42h; sau ghi nội dung vùng đệm trở lại tập tin ban đầu thơng qua thẻ file Tất hàm sử dụng int 21h - Hãy sửa đổi file BAI_5C5.ASM lưu với tên BAI_5C6.ASM để thực yêu cầu sau: giải mã nội dung tập tin mã hóa Tên tập tin cần giải mã nhập từ bàn phím Gợi ý: giải mã trường hợp ngược lại mã hóa, mã hóa theo phương thức giải mã phải làm ngược lại phương thức mã hoá dseg segment tenfile db "d:\tt_asm\data.txt",0 thefile dw ? buffer db 251 dup ('$') dseg ends cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah, 3dh ; mo tap tin da co lea dx, tenfile mov al, ; thuoc tinh tap tin int 21h mov thefile, ax ; cat the file mov ah, 3fh ; doc noi dung file vao vung dem mov bx, thefile lea dx, buffer mov cx, 250 ; so byte can doc tu file da mo int 21h mov ah, 3eh ; dong tap tin mov bx, thefile int 21h mov ah, 09h ; in noi dung cua file man hinh lea dx, buffer int 21h mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.4 Xóa tập tin Soạn thảo đoạn chương trình mẫu phía lưu với tên BAI_5D.ASM - Biên dịch cho chạy file BAI_5D.ASM để kiểm tra xem kết - Hãy sửa đổi file BAI_5D.ASM lưu với tên BAI_5D1.ASM để thực yêu cầu sau: xóa tên tập tin Tên tập tin cần nhập từ bàn phím Gợi ý: xem lại trước để lấy giải thuật nhập tên file từ bàn phím ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 25 Bài – Xử lý tập tin dseg segment tenfile db "d:\tt_asm\data.txt",0 dseg ends cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah,41h ; xoa tap tin da co lea dx, tenfile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.5 Đổi tên tập tin cũ thành tập tin thư mục Soạn thảo đoạn chương trình mẫu phía lưu với tên BAI_5E.ASM - Biên dịch cho chạy file BAI_5E.ASM để kiểm tra xem kết - Hãy tạo thư mục có tên baitap nằm thư mục tt_asm Sửa đổi lệnh oldfile db “d:\tt_asm\data.txt”,0 newfile db “tt_asm\solieu.txt”,0 lại thành oldfile db “d:\tt_asm\solieu.txt”,0 newfile db “tt_asm\baitap\data.txt”,0 Biên dịch lại cho chạy chương trình để xem xét kết Có nhận xét kết nhận - Hãy sửa đổi file BAI_5E.ASM lưu với tên BAI_5E1.ASM để thực yêu cầu sau: đổi tên tập tin Tên tập tin cũ nhập từ bàn phím Gợi ý: xem lại tập trước để lấy giải thuật nhập tên file từ bàn phím dseg segment oldfile db "d:\tt_asm\data.txt",0 newfile db "d:\tt_asm\solieu.txt",0 dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax mov ah,56h ; rename/remove tên file cu moi lea dx, oldfile lea di, newfile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 26 Bài – Xử lý tập tin Bài tập kiểm tra: 4.1 Viết chương trình sử dụng hàm 41h/ INT 21h để xóa tập tin đĩa Tên tập tin cần xóa nhập từ bàn phím thực chương trình 4.2 Viết chương trình nhập chuỗi từ bàn phím, sau ghép chuỗi nhận vào cuối nội dung tập tin có đĩa Tên tập tin nhập từ bàn phím chạy chương trình 4.3 Viết chương trình nhập chuỗi từ bàn phím, sau chèn chuỗi nhận vào đầu nội dung tập tin có đĩa Tên tập tin nhập từ bàn phím chạy chương trình 4.4 Viết chương trình ghép nội dung tập tin có sẳn đĩa thành tập tin Tên tập tin nhập từ bàn phím chạy chương trình 4.5 Viết chương trình đọc nội dung tập tin đĩa, sau đổi tất ký tự HOA thành ký tự thường lưu lại vào tập tin Tên tập tin phải nhập từ bàn phím ThS Nguyễn Hứa Duy Khang - Ks Trần Hữu Danh 27 Bài – Xử lý chuỗi ký tự Bài 6: Xử Lý Chuỗi Ký Tự Mục Tiêu: - Viết chương trình xử lý chuỗi ký tự lệnh xử lý chuỗi Kiến thức cần chuẩn bị: - Bảng mã ASCII - Kết thí nghiệm trước - Các hàm 01h, 02h, 06h, 08h, 09h, 0Ah INT 21h lệnh xử lý chuỗi MOVSB/W, SCASB/W, STOSB/W, CMPSB/W… Nội dung thực hành: 3.1 So sánh hai chuỗi oldpass newpass Nếu hai chuỗi giống kết luận giống ngược lại Soạn thảo đoạn chương trình lưu với tên BAI_6A.ASM - Biên dịch cho chạy file BAI_6A.ASM để kiểm tra xem kết - Trong macro writeln, lệnh có chức xuống dịng sau in xong chuỗi ký tự - Mục đích việc khai báo LOCAL bien1 macro gì? - Hãy cho biết địa DS ES có giống hay không? Điều thể qua câu lệnh đoạn chương trình mẫu? Tại người ta không khai báo DS ES phân đoạn khác ? - Tiền tố REPE đoạn chương trình mẫu có ý nghĩa nào? - Ta thay đổi lệnh REPE CMPSB thành nhóm lệnh khác khơng? Nếu thay đổi nó, biên dịch chạy chương trình để kiểm chứng - Thử thay đổi nội dung oldpass newpass cho chúng giống Biên dịch chạy chương trình xem kết quả, sau giải thích chế làm việc đoạn lệnh từ lệnh CLD lệnh REPE CMPSB Giả sử, người ta muốn thay lệnh cmpsb thành lệnh cmpsw, bạn có cần sửa đổi lệnh chương trình hay không ? Tại ? Biên dịch chạy chương trình để kiểm chứng - - Lệnh jmp thoat đoạn chương trình có nhiệm vụ ? Thử bỏ lệnh jmp thoat sau biên dịch chạy chương trình xem kết - Hãy sửa đổi file BAI_6A.ASM lưu với tên BAI_6A1.ASM để thực nhiệm vụ sau: nhập vào chuỗi ký tự có tối đa 10 ký tự, lúc nhập thị ký tự “*” Khi nhập đủ 10 ký tự gặp phím ESC in ký tự nhập hình Gợi ý: dùng hàm 08h, 02h 09h int 21h, lệnh loop, cmp, … Cần phải khai báo dùng đệm để lưu ký tự nhập Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 28 Bài – Xử lý chuỗi ký tự writeln macro bien1 LOCAL bien1 mov ah,09 lea dx, bien1 int 21h mov ah,02h mov dl, 0ah int 21h mov dl, 0dh int 21h endm dseg segment tbao db "Chuong tring so sanh oldpass va newpass$" oldpass db "0123456789" newpass db "1234567890" tbao1 db "Haichuoi giong $" tbao2 db "Haichuoi khong giong $" dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax writeln tbao cld ; chonchieu xu ly chuoi mov cx, 10 ; so ky tu/so byte can so sanh lea si, oldpass; (DS:SI) > dia chi cua chuoi nguon lea di, newpass; (ES:DI) > dia chi cua chuoi dich repe cmpsb ; so sanh tung ky tu/byte je intb1 writeln tbao2 jmp thoat intb1: writeln tbao2 thoat: mov ah,08h int 21h mov ah, 4ch int 21h cseg ends end begin - Hãy sửa đổi file BAI_6A1.ASM, kết hợp với file BAI_6A.ASM (chương trình mẫu) lưu với tên BAI_6A2.ASM để thực nhiệm vụ sau: nhập vào chuỗi ký tự có 10 ký tự, lúc nhập thị ký tự “*” Sau so sánh với oldpass có nội dung tùy ý (nhưng có độ dài 10 ký tự mà Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 29 Bài – Xử lý chuỗi ký tự gán trước, ví dụ oldpass db “1234567890”) Nếu 10 ký tự vừa nhập có nội dung giống oldpass in câu thơng báo “Ban da nhap dung roi” thốt, ngược lại in câu thông báo “Ban da nhap sai roi va vui long nhap lai” quay trở lại nhập thoát Gợi ý: dùng hàm 08h, 02h, 09h int 21h lệnh loop, cmpsb,… 3.2 Di chuyển 33 bytes từ nội dung string1 sang string2, sau in nội dung string2 hình Soạn thảo đoạn chương trình mẫu lưu với tên BAI_6B.ASM - Biên dịch cho chạy file BAI_6B.ASM để kiểm tra xem kết dseg segment string1 db "Khong co gi quy hon doc lap tu do" string2 db 34 dup('$') dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax cld ; chon chieu xu ly chuoi mov cx, 33 ; so ky tu/so byte can di chuyen lea si, string1 ; (DS:SI) > dia chi cua chuoi nguon lea di, string2 ; (ES:DI) > dia chi cua chuoi dich rep movsb ; di chuyen tung byte mov ah, 09h lea dx, string2 int 21h mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin - Tại di chuyển 33 ký tự/byte mà lại khai báo biến string2 db 34 dup(‘$”) Thử thay 34 thành 33 tiến hành biên dịch, chạy chương trình để xem kết Có nhận xét vấn đề khơng ? Giải thích ý nghĩa việc khai báo - Thay lệnh CLD đoạn chương trình mẫu thành STD Biên dịch cho chạy chương trình để kiểm chứng kết Cho nhận xét kết nhận - Nếu thay lệnh movsb thành MOVSW có phải thay đổi giá trị đoạn chương trình mẫu khơng ? Nếu có thay đổi, biên dịch chạy chương trình để kiểm chứng lại kết Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 30 Bài – Xử lý chuỗi ký tự - Có thể thay lệnh REP MOVSB số lệnh khác hay khơng? Nếu thay đổi sau biên dịch, cho chạy chương trình để kiểm chứng lại kết - Giả sử ta có nội dung biến string1 có tổng số byte >256 byte lúc phải khai báo lại biến ? Lúc có khó khăn xảy khơng ? Hãy thử sửa lại, sau biên dịch chạy chương trình để xem kết - Có cách xác định chiều dài biến hay không ? Hãy cho biết cú pháp lệnh thực yêu cầu Sau thử áp dụng để xác định chiều dài biến string1 3.3 Tìm ký tự “A” có chuỗi ký tự bất kỳ, có in câu thơng báo có ký tự “A” chuỗi ký tự ngược lại Soạn thảo đoạn chương trình mẫu lưu với tên BAI_6C.ASM write macro bien1 mov ah, 09h lea dx, bien1 int 21h endm dseg segment string1 db "NGAC NHIEN CHUA ?" tb1 db "co ky tu A chuoi string1 $" tb2 db "khong ky tu A chuoi string1 $" dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax cld ; chonchieu xu ly chuoi mov cx, 17 ; so ky tu can tim mov al, 'A' ; tim kien ky tu A string1 lea di, string1 ; (ES:DI) > dia chi cua chuoi dich repne scasb ; lap lai viec tim kiem ky tu cho den jne intb2 ; gap duoc hoac den het chuoi write tb1 jmp thoat intb2: write tb2 thoat: mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin - Biên dịch cho chạy file BAI_6C.ASM để kiểm tra xem kết Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 31 Bài – Xử lý chuỗi ký tự - Thay lệnh MOV AL, ‘A’ thành MOV AL, ‘B’, sau biên dịch chạy chương trình để xem kết - Giải thích nhiệm vụ lệnh từ CLD JNE INTB2 Có thể thay lệnh REPNE SCASB thành lệnh khác không ? Nếu thay chúng, biên dịch chạy chương trình để kiểm chứng lại kết Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 32 Phụ Lục – Môi trường phát triển hợp ngữ RadASM Phụ lục Môi trường phát triển hợp ngữ RadASM RadASM môi trường phát triển Hợp ngữ, xây dựng để kết hợp hợp ngữ khác nhau MASM, TASM, HASM … chạy môi trường Windows Mỗi hợp ngữ khác kếp hợp vào RadASM phải cấu hình khác Vì mục đích cung cấp cơng cụ cho sinh viên sử dụng đơn gian, nên RadASM cấu hình phù hợp với hợp ngữ MASM for DOS Vì trình sử dụng, sinh viên khơng cần phải cấu hình thêm Khởi động RadASM Nhấp đúp biểu tượng desktop hình làm việc RadASM xuất hình Màn hình làm việc RadASM chia thành vùng: • Vùng soạn thảo dùng để soạn thảo chương trình nguồn ASM • Vùng thơng báo kết quả: Khi dịch chương trình, kết hay lỗi xuất vùng Vùng soạn thảo Số thứ tự dòng lệnh Vùng thơng báo kết Dịch chương trình Hình 1: Màn hình làm việc RadASM Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 33 Phụ Lục – Mơi trường phát triển hợp ngữ RadASM Hình 2: Menu FILE Hình 2: Menu MAKE Các menu thường dùng FILE (hình 2) MAKE (hình 3), lệnh thường dùng: • New File (Ctrl+N): Mở file để soạn thảo chương trình • Open File (Ctrl+O): Mở file lưu sẳn đĩa • Save File (Ctrl+S): Lưu file thành tên (nhớ đặt tên file khơng có khoảng trắng, phần mở rộng ASM thêm vào tự động) • Assemble (F5): Hợp dịch file nguồn (ASM) thành file đối tượng (OBJ) • Link (Alt+Ctrl+F5): Liên kết file đối tượng (OBJ) thành file thực thi (EXE) • Run! (Ctrl+Shift+F5): Thực thi chương trình (EXE) Soạn thảo file chương trình nguồn Chọn lệnh New File menu FILE (hay bấm phím nóng tương ứng) để mở vùng soạn thảo mới, vùng soạn thảo, sử dụng chức soạn thảo giống trình soạn thảo khác Sau soạn thảo file nguồn xong phải lưu lại thành tên file có phần mở rộng ASM Và tên file khơng có chứa khoảng trắng Hợp dịch (Assemble) Sau lưu file chương trình nguồn xong, chọn Assemble menu MAKE (Hay bấm phím nóng tương ứng) để tiến hành hợp dịch chương trình nguồn • Nếu chương trình có lỗi cú pháp vùng thơng báo có dạng hình Trong lỗi số thứ tự dòng lệnh mã lối Ví dụ: chuoi2.asm(18) : error A2008: syntax error : mod Lỗi dòng 18, mã lỗi A2008: sai cú pháp mod Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 34 Phụ Lục – Môi trường phát triển hợp ngữ RadASM Hình 4: Thơng báo kết Hợp dịch khơng thành cơng • Khi chương trình xuất lỗi file đối tượng (OBJ) không tạo người lập trình phải sửa lại khơng cịn lỗi • Khi khơng có lỗi chương trình (Hợp dịch thành cơng) vùng thơng báo xuất hình file đối tượng (OBJ) tạo Khi chuyển sang bước LIÊN KẾT Hình 5: Thông báo kết Hợp dịch thành công Liên kết (Link) Chọn lệnh Link menu MAKE (hay bấm phím nóng tương ứng) Sau hồn thành bước hợp dịch, bước liên kết bước cuối để tạo file thực thi (EXE) Trong bước này, không cịn kiểm tra lỗi cú pháp thơng thường liên kết thành công file thực thi EXE tạo Nội dung thông báo liên kết thành cơng hình Hình 6: Liên kết thành cơng Thực thi chương trình EXE Để thực thi chương trình vừa liên kết xong, chọn lệnh RUN menu MAKE (hay bấm phím nóng tương ứng) Nếu chương trình có truy xuất đến bàn phím hay hình cửa sổ (dạng hình hệ điều hành DOS) xuất hình Cửa sổ tạo để hiển thị kết hay để người dùng tương tác với chương trình chạy Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 35 Phụ Lục – Môi trường phát triển hợp ngữ RadASM Nếu chương trình khơng có thao tác để truy xuất bàn phím hay hình không thấy cửa sổ Như vậy, lập trình hợp ngữ, muốn nhìn thấy kết phải có đoạn lệnh tương ứng để xuất giá trị hình Hình 7: Cửa sổ kết chương trình Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 36 ... Thiệu Thực hành Lập trình Hệ Thống giúp cho sinh viên viết chương trình ngơn ngữ Assembly máy tính PC Giáo trình hướng dẫn sinh viên kỹ việc lập trình Assembly như: Sử dụng trình biên dịch hợp... sau: Trước vào thực hành: - Nắm mục tiêu thực hành Xem lại kiến thức cần chuẩn bị nêu cho thực hành Nắm nội dung cần phải làm buổi thực hành Trong thực hành: - Tuyệt đối tuân thủ thực hành theo... khảo sát tập lệnh, ngắt đơn giản Hệ điều hành DOS Để vận dụng nâng cao kỹ lập trình hệ thống Hợp ngữ, đòi hỏi sinh viên phải nổ lực nhiều việc tự học, đọc thêm tài liệu để bổ sung kiến thức định

Ngày đăng: 20/01/2014, 03:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan