Một số ch−ơng trình cụ thể

Một phần của tài liệu Chương 4 - Lập trình bằng hợp ngữ với 8088 potx (Trang 29 - 31)

Trong phần nμy ta sẽ xét một số ch−ơng trình cho các ứng dụng cụ thể, thông qua các ví dụ nμy ta có thể học đ−ợc các thuật toán thông dụng, cách sử dụng các lệnh, cách lập trình cùng với cách tổ chức dữ liệu để giải quyết các bμi toán cụ thể. Một số ch−ơng trình ví dụ liên quan đến các vấn đề khác ch−a đ−ợc đề cập đến từ tr−ớc đến nay có thể đ−ợc nêu ra ở những ch−ơng t−ơng ứng sau ch−ơng nμy.

Tr−ớc khi giới thiệu các ví dụ ta hệ thống lại một vμi hμm của các loại ngắt có trong máy IBM PC với hệ điều hμnh MS DOS hay đ−ợc dùng trong các ví dụ đã nêu tr−ớc đây vμ sau nμy.

Ngắt INT 20H dμnh riêng để kết thúc ch−ơng trình loại .COM

Hμm 1 của ngắt INT 21H: đọc 1 ký tự từ bμn phím Vμo: AH = 1

Ra: AL = mã ASCII của ký tự

AL = 0 khi ký tự gõ vμo lμ từ các phím chức năng

Hμm 2 của ngắt INT 21H: hiện 1 ký tự lên mμn hình Vμo: AH = 2

DL = mã ASCII của ký tự cần hiện thị.

Hμm 9 của ngắt INT 21H: hiện chuỗi ký tự với $ ở cuối lên mμn hình Vμo: AH = 9

DX = địa chỉ lệch của chuỗi ký tự cần hiện thị.

Hμm 4CH của ngắt INT 21H: kết thúc ch−ơng trình loại .EXE Vμo: AH = 4CH

Một điều cần nhắc lại lần nữa để ta l−u ý khi đọc các ví dụ:

Dấu (nếu có) đặt tr−ớc một ví dụ lμ để cảnh báo rằng ví dụ liên quan chỉ dùng để mô tả thuật giải cho vấn đề nμo đó mμ không chạy đ−ợc trên các máy IBM PC hoặc t−ơng thích.

Các ví dụ

Ví dụ 1

Trong phần đầu của ch−ơng nμy, khi nói đến khung của ch−ơng trình hợp ngữ ta có giới thiệu một ch−ơng trình hiện lời chμo bằng tiếng Anh "Hello!". Bây giờ ta phải thêm một lời chμo bằng tiếng Việt không dấu "Chao ban!" nằm cách lời chμo "Hello!" tr−ớc đây một số dòng nhất định nμo đó.

Giải

Ta cũng vẫn sử dụng ph−ơng pháp đã đ−ợc dùng ở ch−ơng trình mẫu tr−ớc đây để hiện thị lời chμo 'tây', hiện các dòng giãn cách vμ hiện lời chμo 'ta'.

Trong ví dụ nμy ta cũng bỏ bớt đi các dòng cách ở đầu vμ ở cuối để ch−ơng trình đỡ r−ờm rμ. .Model Small .Stack 100 .Data CRLF DB 13,10,'$' ChaoTay DB 'Hello!$' ChaoTa DB 'Chao ban!$' .Code

MAIN Proc

; khởi đầu thanh ghi DS MOV AX,@Data

MOV DS,AX

; hiện thị lời chμo dùng hμm 9 của INT 21H MOV AH,9 LEA DX,ChaoTay INT 21H ; cách 5 dòng dùng hμm 9 của INT 21H LEA DX,CFLF MOV CX,6 ; CX chứa số dòng cách+1 LAP:INT 21H LOOP LAP

; hiện thị lời chμo dùng hμm 9 của INT 21H LEA DX,ChaoTa

INT 21H

MOV AH,4CH

INT 21H

MAIN Endp

END MAIN

Trong ch−ơng trình trên ta đã dùng thanh ghi CX để chứa số dòng phải giãn cách. Với cách lμm nμy mỗi khi muốn thay đổi số dòng giãn cách giữa 2 lời chμo ta vμ lời chμo tây, ta phải gán giá trị khác cho thanh ghi CX. Điều nμy chắc chắn không phải lμ thuận tiện đối với ng−ời sử dụng ch−ơng trình.

Ví dụ 2

Trên cơ sở ví dụ tr−ớc, ta phải viết ch−ơng trình sao cho số dòng phải giãn cách có thể thay đổi đ−ợc ngay trong khi chạy ch−ơng trình.

Giải

Muốn có số dòng cách thay đổi đ−ợc theo ý muốn giữa 2 lời chμo ta vμ tây khi chạy ch−ơng trình mμ không phải thay giá trị mới gán cho thanh ghi CX ngay trong ch−ơng trình nh− ở ví dụ tr−ớc, ta cần dùng thêm 1 biến mới để chứa số dòng cách vμ viết ch−ơng trình sao cho mỗi khi cho chạy thì ch−ơng trình có thêm phần đối thoại để ng−ời sử dụng có thể tuỳ ý thay đổi giá trị của số dòng giãn cách đó.

Sau đây lμ văn bản của ch−ơng trình thực hiện công việc trên: .Model Small .Stack 100 .Data CRLF DB 13,10,'$' ChaoTay DB 'Hello!$'

ChaoTa DB 'Chao ban!$'

Thongbao DB 'Go vao so dong cach:$'

Một phần của tài liệu Chương 4 - Lập trình bằng hợp ngữ với 8088 potx (Trang 29 - 31)