Mov ah,4ch ; Về DOS

Một phần của tài liệu Các bài tập mẫu ngôn ngữ assembly (Trang 34 - 36)

int 21h END PS 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:41 1h 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 000... không có cổng COM 001... có 1 công COM 010... có 2 công COM 0 1 1... có 3 công COM

Chú ý : Địa chỉ COMI 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ó đạng :

May tinh dang dung co cong COM khong 2 Co So luong cong COM la : 2

Dia chỉ cac cong COM la : 3f8 2f8 INCLUDE Iibl.asm .MODEL small .STACK 100h .DATA

MI db "May tính dang dung co cong COM không ? $” co đb “Co $°

khong db “ Khong $°

M2 db 13,10,°So luong cong COM ma may tỉnh co la : $°

M4 db 13,10,°Dia chỉ cac cong COM la : $° space db“ $°

.CODE PS:

mov ax,@data

CLRSCR

HienString MI ; Hiện thông báo “May tỉnh dang dung co cong COM khong ?”

in 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:41 1h -> al

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

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

jnz LI ; 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

LI:

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 tính co la : ° add al30h ; al là mã ASCII số lượng công COM

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

in 10h

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

XOFr aX,aX mOV €S,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

in 21h

INCLUDE lib3.asm : lib3.asm chứa chương trình con HIEN_HEXA END PS

Iib3.asm

; Chương trình con hiện nội dung có trong | ; thanh ghi AX lên màn hình dạng HEXA_ | HIEN HEXA PROC

push ax bx cx dx

mov bx,l6 ;bx= 16 là số chia

XOT CX,CX ; cx = số lương lần cất phần dư (sau khi chia vào stack)

div bx ; dx:ax chia cho bx (16)

cmp dx,I0 ; So sánh phần dư với 10

jb — HXI ; Nếu phần dư < 10 thì nháy đến HXI

add dx,7 ; Cộng phần dư với 7

HXI:

add dx,30h ; Chuyển sang dạng ASCII

push dx ; Cất vào stack

Ínc cx ; Đếm số lần cất vào stạck (chí số vòng lặp sau này) and ax,ax ; Dựng cờ Z (Liệu thương bằng/khác 0)

jnz HXI ; Nếu thương chưa bằng 0 thì nháy đến tiếp tục chia

HX2: ; Còn thương bằng 0 thì thiết lập vòng lặp lôi các sô (đạng ASCII

pOp ax ; vào AL đề hiện)

mov ah,0eh ¡ Chức năng hiện I1 ký tự ASCI nằm ở AL lên màn hình

In 10h loop HX2 pop dx cx bx ax

ret

HIEN HEXA ENDP

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:41 1h 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... không có công LPT 1... có 1 công LPT 0... có 2 công LPT 1... có 3 cổng LPT

Chú ý : Địa chỉ LPTIT 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ó đạng :

May tinh dang dung co cong LPT khong 2? Co So luong cong LPT la : 4

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

Một phần của tài liệu Các bài tập mẫu ngôn ngữ assembly (Trang 34 - 36)

Tải bản đầy đủ (PDF)

(38 trang)