Sử dụng Interrupt trong chương trình assembly (Phần 2)

MỘT SỐ VÍ DỤ


Ví dụ 1: Giả sử hàm X của ngắt Y khi được gọi sẽ trả về trong cặp thanh ghi ES:SI địa chỉ của vùng nhớ chứa tên của nhà sản xuất (nhãn hiệu) của vi xử lý đang sử dụng trên máy tính hiện tại, tên này dài không quá 8 kí tự.
tinhoccoban.net - Mô hình Interrupt trong Assembly
Mô hình Interrupt trong Assembly
Các lệnh sau đây sẽ in tên nhà sản xuất nói trên ra màn hình:

                    Mov        Ah, X                             ; hàm cần gọi được đưa vào thanh ghi ah

                    Int           Y                                  ; gọi ngắt Y với hàm X

                    ;--------------------      

                    Mov        Cx, 8                              ; tên dài không quá 8 kí tự

                    Mov        Ah, 02                            ; dùng hàm 02/21h để in kí tự ra nàm hình

             LapIn:

                    Mov        Dl, Byte PTR ES:[SI]

                    Int           21h

                    INC         SI                                 ; đến kí tự tiếp theo

                    Loop       LapIn

                    ;------------------------------------

Ví dụ 2: Giả sử hàm X của ngắt Y khi được gọi với AL = 1 (được gọi là hàm con) sẽ trả về trong cặp thanh ghi ES:DI địa chỉ của vùng nhớ chứa ngày-tháng-năm sản xuất ROM-BIOS đang sử dụng trên máy tính hiện tại. Đồng thời hàm/ngắt này cũng cho biết số kí tự trong xâu ngày-tháng-năm trong thanh ghi BX.

Các lệnh sau đây sẽ in xâu ngày-tháng-năm nói trên ra màn hình:

                    Mov        Ah, X                            ; hàm cần gọi được đưa vào thanh ghi ah

                    Mov        Al, 1                             ; gọi hàm X với Al = 1

                    Int           Y                                 ; gọi ngắt Y với hàm X

                    ;--------------------

                    Mov        Cx, Bx                          ; đưa số kí tự của xâu ngày-tháng-nămvào Cx

                    Mov        Ah, 02                          ; dùng hàm 02/21h để in kí tự ra nàm hình

             LapIn:

                    Mov        Dl, Byte PTR ES:[DI]

                    Int           21h

                    INC         DI                                ; đến kí tự tiếp theo

                    Loop       LapIn

                    ;-------------------------------------

Ví dụ 3: Hàm 39h của ngắt 21h được sử dụng để tạo thư mục con trên đĩa. Hàm này quy định: DS:DX chứa xâu tên thư mục cần tạo, bao gồm cả đường dẫntìm đến thư mục này, xâu này kết thúc bởi trị 0. Nếu việc tạo không thành công thì Cf = 1, khi đó thanh ghi Ax sẽ chứa mã lỗi.

Các lệnh sau đây sẽ tạo ra thư mục con BTCB trong thư mục ASSEM trên thư mục gốc ổ đĩa D. Chương trình phải khai báo biến TenTM, chứa xâu tên thư mục cần tạo như sau:

            TenTM           DB      ‘D:\ASSEM\BTCB’,0

Các lệnh:

            Mov    Ax, Seg TenTM

            Mov    DS, Ax

            Mov    Dx, Offset TenTM

            Mov    Ah, 39h

            Int       21h

            ;-------------------------

            Jc        TB_Loi                                   ; nếu CF = 1 thì việc tạo bị lỗi

            <In ra thong bao hoan thanh>

            Jmp     KetThuc

       TB_Loi:

            <In ra thong bao khong tao duoc thu muc>

        KetThuc:

            ...

            ;----------------------------------------------------  

Ví dụ 4: Sau đây là chương trình dạng COM: In ra tất cả (256) các kí tự có trong bảng mã ASCII:

.Model       Small

.Code

      ORG       100h

          Start:

                    Jmp         Main

    TB       DB    'Noi dung Bang ma ASCII:',0Ah,0Dh,'$'

      Main           Proc

                    Mov        Ah, 09h

                    Lea          Dx, TB

                    Int           21h

                    ;--------------------------

                    Mov        Cx, 256

                    Mov        Ah, 02

                    Mov        Dl, 0

            LapIn:

                    Int           21h

                    ;-----------------

                    Mov        Bl, Dl

                    Mov        Dl, ' '

                    Int           21h

                    Mov        Dl, Bl

                    ;-----------------

                    INC         Dl

                    Loop       LapIn

                    ;-------------------------

                    Int           20h

    Main        Endp

                    End         Start



Ví dụ 5.1: Sau đây là chương trình dạng COM: Nhập vào một xâu kí tự bất kỳ. Sau đó in ra lại chính xâu kí tự vừa được nhập vào nhập. Sử dụng hàm 09/21h để in ra.

.Model       Small

.Code

                    ORG       100h

    Start:

                        JMP    Main

              TBN                DB    'Nhap vao mot xau ki tu: $'

              TBX                DB    0Ah,0Dh,'Xau vua nhap: $'

              Buff                DB    100,0,100 Dup (' ')

   Main           Proc

                    Mov        Ah,  09h

                    Lea          Dx, TBN

                    Int           21h

                    ;--------------------------

                    Mov        Ah, 0Ah

                    Lea          Dx, Buff

                    Int           21h

                    ;-------------------------

                    Mov        Cx, 0

                    Mov        Cl,  Buff[1]

                    Add         Dx, 2

                    Mov        DI, Dx

                    Add         DI, Cx

                    Mov        Byte PTR [DI], ‘$’

                    ;-------------------------

                    Mov        Ah,  09h

                    Lea          Dx, TBX

                    Int           21h

                    ;-------------------------

                    Mov        Ah,  09h

                    Lea          Dx, Buff

                    Add         Dx, 2

                    Int           21h

                    ;-------------------------

                    Int           20h

     Main           Endp

                    End         Start



Ví dụ 5.2: Sau đây là chương trình dạng EXE: Nhập vào một xâu kí tự bất kỳ. Sau đó in ra lại chính xâu kí tự vừa được nhập vào nhập. Sử dụng hàm 02/21h để in ra.

.Model       Small

.Stack        100h

.Data

              TBN                DB    'Nhap vao mot xau ki tu: $'

              TBX                DB    0Ah,0Dh,'Xau vua nhap: $'

              Buff                DB    100,0,100 Dup (' ')

.Code

          Main           Proc

                    Mov        Ax,@Data

                    Mov        DS, Ax

                    ;-------------------------

                    Mov        Ah,  09h

                    Lea          Dx, TBN

                    Int           21h

                    ;--------------------------

                    Mov        Ah, 0Ah

                    Lea          Dx, Buff

                    Int           21h

                    ;-------------------------

                    Mov        Cx, 0

                    Mov        Cl,  Buff[1]

                    Add         Dx, 2

                    Mov        DI, Dx

                    ;--------------------------

                    Mov        Ah,  09h

                    Lea          Dx, TBX

                    Int           21h

                    ;-------------------------

                    Mov        Ah, 2

       Lap_In:                        

                    Mov        Dl, [DI]

                    Int           21h

                    INC         DI

                    Loop       Lap_In

                    ;-------------------------

                    Mov        Ah, 4Ch

                    Int           21h

   Main           Endp

            End  

Ví dụ 6: Sau đây là chương trình dạng COM: Nhập vào một kí tự thường, chương trình sẽ in ra kí tự in hoa tương ứng.



.Model       Small

.Code

            ORG   100h

Start:

            Jmp     Main

              TB1                 DB    'Nhap vao mot ki tu thuong: $'    

              TB2                 DB    0Ah,0Dh,'Ki tu hoa tuong ung: $'



 Main           Proc

                    Mov        Ah, 09h

                    Lea          Dx, TB1

                    Int           21h

                    ;----------------------

                    Mov        Ah, 01

                    Int           21h

                    Mov        Bl, Al

                    ;-----------------------

                    Mov        Ah, 09h

                    Lea          Dx, TB2

                    Int           21h

                    ;----------------------

                    Mov        Ah, 02

                    Mov        Dl, Bl

                    Sub         Dl, 20h

                    Int           21h

                    ;-------------------------

                    Int           20h

 Main           Endp

         End        Start

Ví dụ 7: Sau đây là chương trình dạng COM: Nhập vào một xâu kí tự sau đó in ra lại xâu đã nhập theo thứ tự đảo ngược.

.Model       Small

.Code

            ORG   100h

Start:

            JMP    Main

              TBN                DB    'Nhap vao mot xau ki tu: $'

              TBX                DB    0Ah,0Dh,'Xau vua nhap: $'

              Buff                DB    100,0,100 Dup (' ')

 Main           Proc

                    Mov        Ah,  09h

                    Lea          Dx, TBN

                    Int           21h

                    ;--------------------------

                    Mov        Ah, 0Ah

                    Lea          Dx, Buff

                    Int           21h

                    ;-------------------------

                    Mov        Cx, 0

                    Mov        Cl,  Buff[1]

                    ;---------------------------

                    Mov        Ah,  09h

                    Lea          Dx, TBX

                    Int           21h

                    ;-------------------------

                    Lea          Dx, Buff

                    Add         Dx, 2

                    Mov        DI, Dx

                    Add         DI, Cx

                    Dec         DI

                    Mov        Ah, 02

        Lap_In_Nguoc:

                    Mov        Dl, [DI]

                    Int           21h

                    DEC        DI

                    Loop       Lap_In_Nguoc

                    ;--------------------------------

                    Int           20h

 Main           Endp

            End     Start



Ví dụ 8:,Sau đây là chương trình dạng COM: Nhập vào hai số (số thứ nhất: nhỏ hơn 5; số thứ hai: nhỏ hơn hoặc bằng 5), sau đó in ra tổng của hai số vừa nhập.

.Model       Small

.Code

        ORG       100h

Start:

        Jmp         Main

              TBN1              DB        'Nhap so hang thu nhat (nho hon 5): $'

              TBN2              DB        0Ah,0Dh,'Nhap so hang thu hai (nho hon bang 5): $'

              TBX                DB        0Ah,0Dh,'Tong cua hai so la: $'

 Main           Proc

        Mov        Ah, 09h

                    Lea          Dx, TBN1

        Int           21h

        Mov        Ah, 01

        Int           21h

        Mov        Bl, Al

        Sub         Bl, 30h

        ;-------------------------

        Mov        Ah, 09h

        Lea          Dx, TBN2

        Int           21h

        Mov        Ah, 01

        Int           21h

        Sub         Al, 30h

        Add         Bl, Al

        ;-------------------------

        Mov        Ah, 09h

        Lea          Dx, TBX

        Int           21h                          

        Mov        Ah, 02

        Mov        Dl, Bl

        Add         Dl, 30h

        Int           21h

        ;------------------------

        Int           20

Main           Endp

         End              Start        
Mới hơn Cũ hơn

Biểu mẫu liên hệ