BTHT LPT

Bài 3

Hãy viết chương trình cho biết máy tính bạn đang dùng có cổng LPT 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 LPT mà máy tính đang dùng có, cụ thể như sau :

x

x

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

0  1… có 1 cổng LPT

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

1  1… có 3 cổng LPT

. . .

Chú ý : Địa chỉ LPT1 có trong 2 byte có địa chỉ 0:408h và 0:409h

                         Địa chỉ LPT2 có trong 2 byte có địa chỉ 0:40ah và 0:40bh

                         ….

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

May tinh dang dung co cong LPT khong ? Co

So luong cong LPT  la : 4

Dia chi cac cong LPT la : 3BC  378  278  9F0

Chú ý : Giống bài 2

INCLUDE lib1.asm

.MODEL small

.STACK 100h

.DATA

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

 co        db ‘Co $’

 khong  db ‘ Khong $’

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

 M4      db 13,10,’Dia chi cac cong LPT 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 LPT 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

mov  cl,6

shr    al,cl                   ; al = số lượng cổng LPT

jnz    L1                      ; Nếu al # 0 (có cổng LPT 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 LPT (chỉ số vòng lặp hiện địa chỉ)

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

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

      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 LPT la : ‘

      xor     ax,ax

      mov   es,ax

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

L2:

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

         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: AzTruyen.Top

Tags: #dương