BTHT cong COM

Màu nền
Font chữ
Font size
Chiều cao dòng

Bài 2

Hãy viết chương trình cho biết máy tính bạn đang dùng có cổng COM nào hay không? Nếu có thì bao nhiêu cổng và cho biết địa chỉ các cổng đó (địa chỉ cổng phải là HEXA).

Cách giải : Chú ý byte của có địa chỉ 0:411h của vùng dữ liệu ROM BIOS có chứa các thông tin liên quan đến thông tin về số lượng cổng COM mà máy tính đang dùng có, cụ thể như sau :

x

x

x

0 0 0… không có cổng COM

0 0 1… có 1 cổng COM

0 1 0. .. có 2 cổng COM

0 1 1… có 3 cổng COM

. . .

Chú ý : Địa chỉ COM1 có trong 2 byte có địa chỉ 0:400h và 0:401h

                         Địa chỉ COM2 có trong 2 byte có địa chỉ 0:402h và 0:403h

                         ….

Khi chương trình chạy yêu cầu có dạng :

May tinh dang dung co cong COM khong ? Co

So luong cong COM  la : 2

Dia chi cac cong COM la : 3f8  2f8

INCLUDE lib1.asm

.MODEL small

.STACK 100h

.DATA

 M1      db ’May tinh dang dung co cong COM không ? $’

 co        db ‘Co $’

 khong  db ‘ Khong $’

 M2      db 13,10,’So luong cong COM ma may tinh co la : $’

 M4      db 13,10,’Dia chi cac cong COM la : $’

 space   db ‘   $’

.CODE

 PS:

                        mov  ax,@data

mov  ds,ax

CLRSCR

HienString M1          ; Hiện thông báo ‘May tinh dang dung co cong COM khong ?’

int    11h                     ; Ngắt hệ thống thực hiện việc đưa nội dung ô nhớ 0:411h -> ah

mov  al,ah                  ; Đưa nội dung 0:411h -> al

and   al,00001110b  ; Tách 3 bit chứa số lượng cổng COM

shr    al,1                    ; al = số lượng cổng COM

jnz    L1                      ; Nếu al # 0 (có cổng COM thì nhảy)

HienString khong     ; còn không thì hiện thông báo ‘Khong’

jmp  Exit                    ; Nhảy đến nhãn Exit

    L1:

      HienString co            ; Hiện thông báo ‘Co’

      mov   cl,al                 

      xor    ch,ch                 ; cx = số lượng cổng COM (chỉ số vòng lặp hiện địa chỉ)

      HienString M2          ; Hiện thông báo ‘So luong cong COM ma may tinh co la : ‘

      add    al,30h               ; al là mã ASCII số lượng cổng COM

      mov  ah,0eh               ; Chức năng hiện 1 ký tự ASCII lên màn hình

      int     10h

      HienString M3          ; Hiện thông báo ‘Dia chi cac cong COM la : ‘

      xor    ax,ax

      mov  es,ax

      lea    bx,400h                        ; es:bx = 0:400h (nơi chứa địa chỉ cổng COM1)

L2:

         mov  ax,es:[bx]         ; ax = địa chỉ COM

         call   HIEN_HEXA   ; Hiện địa chỉ dạng HEXA lên màn hình

         HienString space      ; Hiên một số dấu cách

         add   bx,2                   ; bx trỏ đến các byte chứa địa chỉ cổng COM tiếp theo

         loop  L2

  Exit:

                                    mov  ah,4ch               ; Về DOS

                                    int     21h

INCLUDE lib3.asm              ; lib3.asm chứa chương trình con HIEN_HEXA

                                    END  PS

Bạn đang đọc truyện trên: Truyen2U.Pro

#dương