SỬ DỤNG INTERRUPT TRONG CHƯƠNG TRÌNH ASSEMBLY P2

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ự.
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          
---------------------------------------------------

0 Comment:

Đăng nhận xét

Thank you for your comments!