Giáo trình cơ sở thiết kế máy và chi tiết máy: Cấu trúc rẽ nhánh trong lập trình

MỤC LỤC

Nhận 1 chuỗi ký tự từ bàn phím

- Chương trình sử dụng hàm 0Ah, ngắt 21h để nhập 1 chuỗi ký tự từ bàn phím viết như sau.

Cấu trúc rẽ nhánh – Vòng lặp

MỤC TIÊU

    Khi thực hiện, thanh ghi PC sẽ được gán bằng giá trị lưu tại địa chỉ này. Các lệnh nhảy có điều kiện bắt đầu bằng chữ J sau đó là các chữ cái biểu thị điều kiện (ví dụ JGE: Jump if Greater than or Equal, nhảy nếu lớn hơn hay bằng), tiếp sau là một tên nhãn. Điều kiện để lệnh nhảy xem xét khi thi hành là giá trị các cờ được tạo ra từ lệnh.

    Nhảy nếu nhỏ hơn hoặc bằng (Jump if Below or Equal) Nhảy nếu không lớn hơn. Tuy nhiên, để viết chương trình tiện lợi và ngắn gọn, có thể dùng thêm các lệnh lặp như LOOP, LOOPZ,….

    NỘI DUNG THỰC HÀNH 1. Cấu trúc Rẽ nhánh

    - Khi ký tự nhập vào không phải là chữ cái thì kết quả in ra màn hình là gì?. - Xem chương trình in ra màn hình lần lượt các ký tự từ A đến Z được viết như sau. - Dùng lệnh LOOP để viết lại chương trình BAI_3B.ASM theo cấu trúc vòng lặp for.

    BÀI TẬP KIỂM TRA

    Sau đó in ra màn hình lần lượt các ký tự từ ký tự nhận được đến 'z' sao cho giữa các ký tự có 1 khoảng trống. - Đổi tất cả ký tự thường thành ký tự hoa và in ra màn hình. - Đổi tất cả ký tự hoa thành ký tự thường và in ra màn hình.

    Nhập xuất số dạng BIN – HEX - DEC

    Nội dung thực hành

    - Soạn thảo, Biên dịch và cho chạy file BAI_6A.ASM để kiểm tra kết quả. - Sửa chương trình trên thành BAI_6A1.ASM sao cho có thể nhập và xuất số nhị phân 16 bit. - Viết lại chương trình trên để nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của ký tự nhận được ở dạng nhị phân.

    Chương trình sau đây cho phép nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của ký tự nhận được ở dạng thập lục phân. - Soạn thảo, Biên dịch và cho chạy file BAI_6B.ASM để kiểm tra kết quả. Chương trình sau đây cho phép nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của ký tự nhận được ở dạng thập phân.

    - Soạn thảo, Biên dịch và cho chạy file BAI_6C.ASM để kiểm tra kết quả. - Đọc thủ tục DEC_OUT để tìm hiểu giải thuật xuất giá trị trong AX ra màn hình ở dạng thập phân. Viết chương trình nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của ký tự nhận được ở dạng thập lục phân, thập phân và nhị phân.

    Viết lại chương trình bài 4.1 nhưng 2 số A và B được nhập theo dạng thập lục phân.

    Xử L ý Tập Tin

    Kiến thức cần chuẩn bị

      - Hãy sửa đổi file BAI_5A.ASM và lưu với tên BAI_5A1.ASM để có thể thực hiện được yêu cầu sau: tạo một tập tin mới, tên tập tin được nhập từ bàn phím. Gợi ý: dùng hàm 0ah của int 21h để nhập vào tên file, chú ý cuối chuỗi chứa tên file phải có zero, nhưng khi dùng hàm 0ah thì chúng ta không thể nào nhập zero vào cuối chuỗi được, nếu ta nhập ký tự ‘0’ vào thì đó là mã ascii của ký tự ‘0’. - Hãy sửa đổi file BAI_5B.ASM và lưu với tên BAI_5B1.ASM để có thể thực hiện được yêu cầu sau: nhập từ một chuỗi ký tự bất kỳ, sau đó lưu vào tập tin có tên là “d:\tt_asm\solieu.txt”.

      - Hãy sửa đổi file BAI_5B1.ASM và lưu với tên BAI_5B2.ASM để có thể thực hiện được yêu cầu sau: tạo tên tập tin mới, tên tập tin được nhập từ bàn phím. Gợi ý: xem lại BAI_5A1.ASM để lấy lại giải thuật nhập vào tên file và đưa zero (con số 0) về cuối chuỗi đối với trường hợp tên file được nhập từ bàn phím và các vấn đề còn lại thì xem lại file BAI_5B1.ASM. - Hãy sửa đổi file BAI_5B2.ASM và lưu với tên BAI_5B3.ASM để có thể thực hiện được yêu cầu sau: tạo tên tập tin mới, tên tập tin được nhập từ bàn phím.

      Sau khi đọc nội dung của tập tin vào vùng đệm bằng hàm 3fh của INT 21h, thanh ghi ax sẽ có giá trị thay đổi hay không và nó chứa (giá trị) gì ?. - Hãy sửa đổi file BAI_5C.ASM và lưu với tên BAI_5C1.ASM để có thể thực hiện được yêu cầu sau: đọc nội dung của một tập tin và hiển thị nội dung đó lên màn hình. - Hãy sửa đổi file BAI_5C1.ASM và lưu với tên BAI_5C2.ASM để có thể thực hiện được yêu cầu sau: copy nội dung của một tập tin bất kỳ sau đó paste sang một vị trí khác.

      Gợi ý: các giải thuật nhập tên file từ bàn phím thì có sẵn, giải thuật copy và paste như sau: trước hết phải mở tập tin đã có bằng hàm 3dh, chúng ta định nghĩa sẵn đường dẫn chứa tên file cần mở, đọc nội dung của tập tin vào vùng đệm bằng hàm 3fh, nhớ cất thẻ file; tạo tên tập tin mới bằng hàm 3ch, chúng ta định nghĩa sẵn đường dẫn chứa tên file cần tạo, nhớ cất thẻ file;. - Hãy sửa đổi file BAI_5C2.ASM và lưu với tên BAI_5C3.ASM để có thể thực hiện được yêu cầu sau: copy nội dung của một tập tin bất kỳ sau đó paste sang một vị trí khác. - Hãy sửa đổi file BAI_5C3.ASM và lưu với tên BAI_5C4.ASM để có thể thực hiện được yêu cầu sau: save as nội dung của một tập tin.

      - Hãy sửa đổi file BAI_5C3.ASM và lưu với tên BAI_5C4.ASM để có thể thực hiện được yêu cầu sau: đọc nội dung của tập tin và sau đó nhập một chuỗi ký tự bất kỳ và ghi tiếp theo sau nội dung của tập tin vừa mở. Gợi ý: nhập vào tên file cần mã hóa, mở một file đã có bằng hàm 3dh; đọc nội dung của tập tin vào vùng đệm bằng hàm 3fh; mã hóa vùng đệm đọc được bằng một trong cá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í con trỏ tập tin. - Hãy sửa đổi file BAI_5C5.ASM và lưu với tên BAI_5C6.ASM để có thể thực hiện được yêu cầu sau: giải mã nội dung của tập tin đã mã hóa.

      Xử Lý Chuỗi Ký Tự

      So sánh hai chuỗi oldpass và newpass. Nếu hai chuỗi này giống nhau thì kết luận giống nhau và ngược lại

      Sau đó so sánh với một oldpass có nội dung tùy ý (nhưng chỉ có độ dài là 10 ký tự mà do writeln macro bien1. Di chuyển 33 bytes từ nội dung của string1 sang string2, sau đó in nội dung của.

      Di chuyển 33 bytes từ nội dung của string1 sang string2, sau đó in nội dung của string2 ra màn hình

      Nếu được thì hãy thay đổi và sau đó biên dịch, cho chạy chương trình để kiểm chứng lại kết quả. - Giả sử ta có nội dung của một biến string1 có tổng số byte >256 byte thì lúc đó chúng ta phải khai báo lại các biến này như thế nào ?. Hãy thử sửa lại, sau đó biên dịch và chạy chương trình để xem kết quả.

      Hãy cho biết các cú pháp của lệnh có thể thực hiện được yêu cầu này. Tìm ký tự “A” có trong một chuỗi ký tự bất kỳ, nếu có thì in ra câu thông báo là.