You are on page 1of 24

- 1 -Thc tp Vi x l - m y vi t nh

Thc tp Vi x l - my vi tnh
Tun 1 : Thc tp chng trnh Debug. c trc tht k phn l thuyt v lm 11 bi thc hnh trong gio trnh.
Yu cu : xem trc phn l thuyt v chng trnh Debug trong gio trnh. Mc tiu : s dng thnh tho cc lnh ca Debug.

Tun 2 : Lm quen vi MASM v LINK. c hiu ni dung (chun b trc nh), dch, lin kt v chy th mt s chng trnh ngun c sn : maucom.asm, mauexe.asm, chao.asm, doi10_1.asm, doi10_2.asm, doi16_1.asm, doi16_2.asm, cmdlipar.asm, string1.asm, string2.asm, clockD.asm, clockM.asm, music.asm, bootread.asm.
Yu cu : xem li cch s dng MASM v LINK trong gio trnh. c thm v MASM v MS-LINK trong Advanced MSDOS (tr.45, tr.50). Mc tiu : s dng thnh tho MASM v LINK.

Tun 3 : Chng trnh xut ni dung tp tin ra mn hnh.


Yu cu : xem li phn v d v truy xut tp tin trong gio trnh. Mc tiu : s dng thnh tho mt editor to ra mt chng trnh ngun.

Tun 4 : S dng chng trnh LIB.EXE to mt th vin DOISO.LIB gm cc chng trnh con doi10_1, doi16_1, doi10_2 v doi16_2.
Yu cu : xem li phn l thuyt v LIB.EXE, ch th PUBLIC. Xem thm Advanced MSDOS (tr.58). Mc tiu : s dng thnh tho LIB v cch to ra mt th vin.

Tun 5 : Chng trnh xut ni dung tp tin ra mn hnh theo dng s Hex.
Yu cu : s dng th vin DOISO.LIB to ra trong bi trc. Xem li ch th EXTRN. Xem li cch s dng LINK. Mc tiu : bit cch lin kt vi mt th vin c sn.

Tun 6 : Chng trnh ngt qung tt bo v mn hnh.


Yu cu : xem li phn v d v ci t ngt qung. Xem thm Advanced MSDOS (tr.244). Mc tiu : bit cch ci t v s dng ngt qung.

Tun 7 : Lp trnh cho b m 2 ca 8253 hot ng ch pht xung vung (mode 2), s m 60000. Sau , c li s m v xut ra mn hnh. a ch giao tip ca 8253 trong my l 40h.
Yu cu : xem li phn l thuyt v lp trnh 8253. S dng th vin DOISO.LIB. Mc tiu : bit cch s dng b m 2 ca 8253 trong my tnh.

Thc tp Vi x l - m y vi t nh - 2 -

* Lm thm : A) Ghp chng trnh cmdlipar.asm vo chng trnh xut ni dung tp tin ra mn hnh c th nhn c tn tp tin bng thng s dng lnh.
Yu cu : xem trc ti liu v thng s dng lnh trong sch Advanced MSDOS (tr.24). Xem chng trnh cmdlipar.asm. Mc tiu : bit cch vit mt chng trnh c s dng thng s dng lnh.

B) Hon chnh chng trnh hin gi clockD.asm.


Yu cu : xem li phn l thuyt v ci t ngt qung. Xem thm Advanced MSDOS (tr.244). Mc tiu : bit cch ci t v s dng ngt qung.

C) Hon chnh chng trnh bootread.asm hin th cc thng tin qun l a ca Boot sector a mm 1.44 MB.
Yu cu : Xem trc phn cu trc Boot sector trong sch Advanced MSDOS hoc trang sau. Mc tiu : bit cch s dng d liu cu trc.

Cc bc cn lm khi thc tp hp ng
1. Bt my v i my khi ng xong. 2. Chn 1 Boot DOS. 3. To th mc \MASM trn a F v chuyn vo trong lm vic. f: md \masm cd \masm 4. Chp th mc Masm5 t a S sang. Copy s:\masm5 5. Dng Edit , Turbo hay NC vit chng trnh ngun v sau c th dch v chy th (xem MASM v LINK trong gio trnh).
Ghi ch : Cc bc trn cn c lm li u mi bui thc tp v bn nn c a mm lu li cc chng trnh ca bn v cc th mc trn mng c th b xa sau .

- 3 -Thc tp Vi x l - m y vi t nh

Cu trc Boot sector 00H 03H 0BH 0DH 0EH 10H 11H 13H 15H 16H 18H 1AH 1CH 20H 24H 25H 26H 27H 2BH 36H 3EH E9 XX XX or EB XX 90 Tn nh sn xut v phin bn (8 bytes) S byte trn mi sector (2 bytes) S sector trn mi n v cp pht (1 byte) S sector dnh ring, k t 0 (2 bytes) S bn FAT (1 byte) S phn t th mc gc (2 bytes) Tng s sector trn a lun l (2 bytes) Byte nhn dng a (1 byte) S sector trn mi bn FAT (2 bytes) S sector trn mi track (2 bytes) S u t (2 bytes) S sector b du (4 bytes) Tng s sector trn a lun l (khi dung lng a > 32 MB) S ca a vt l Dnh ring Du hiu ca boot m rng (29H) S nh phn 32 bit nhn dng a lun l Nhn a (11 bytes) Dnh ring (8 bytes) Chng trnh np mi

c boot sector a mm dng INT 13h: Input : AH = 2 AL = s sector cn c CH = cylinder CL = sector DH = head DL = drive (00-7F : a mm, 80-FF : a cng ) ES:BX = segment:offset ca m. = 0 : thnh cng Output : CY AH = 0 AL = s sector c c CY = 1 : tht bi AH = trng thi li (xem Advanced MSDOS tr.537)

Thc tp Vi x l - m y vi t nh - 4 -

Cc chng trnh s dng trong thc tp (c trc nh) MAUCOM.ASM


title Chuong_trinh; . . . segment para public 'code' assume cs:code,ds:code,ss:code org 100h start: jmp main ; vung khai bao du lieu bien db 0 ; vung khai bao chuong trinh con ctc1 proc ret ctc1 endp ; . . . ; ; Chuong trinh chinh main proc call ctc1 ; ; ket thuc thi hanh chuong trinh chinh va tro ve DOS mov ax,4c00h int 21h main endp ; ket thuc khai bao doan code code ends ; ket thuc khai bao chuong trinh end start code

MAUEXE.ASM
Title chuong trinh . . . . . ; doan du lieu data segment para public 'data' ; cac chi thi khai bao hang, bien, cau truc, mau tin bien db 0 data ends ; doan chong stack segment stack 'stack' db 100h DUP (0) stack ends ; doan chuong trinh code segment para public 'code' assume cs:code,ds:data,ss:stack ; Khai bao cac chuong trinh con ctc1 proc ret ctc1 endp ; . . . ;

- 5 -Thc tp Vi x l - m y vi t nh

; Chuong trinh chinh main proc mov ax,data mov ds,ax call ctc1 ; ; ket thuc thi hanh chuong trinh va tro ve DOS mov ax,4c00h int 21h main endp ; dong doan code code ends ; ket thuc khai bao chuong trinh end main

CHAO.ASM
include video.asm segment para public 'code' assume cs:code,ds:data,ss:stack comment @ ------------------------------CPUTS : xuat chuoi ASCII$ ra vi tri hien tai cua cursor voi thuoc tinh mau mong muon IN : DS:SI = dia chi dau chuoi BL = thuoc tinh mau @ --------------------------------------cputs proc get_cursor mov txy,dx cputs0: lodsb cmp al,'$' jz cputs_end gotoxy tx,ty writech al,bl,1 inc tx jmp short cputs0 cputs_end: ret cputs endp ; main proc mov ax,data mov ds,ax clrscr cursor_off main1: gotoxy x0,y0 mov si,offset message mov bl,attr call cputs mov ah,8 int 21h cmp al,ESCKEY jz main2 inc attr inc y0 cmp y0,25 code

Thc tp Vi x l - m y vi t nh - 6 -

main2:

main code ; data ESCKEY attr xy0 x0 y0 txy tx ty message data ; stack stack

jc main1 dec y0 scro_up 0,0,79,24,1,7 jmp main1 clrscr cursor_on mov ax,4c00h int 21h endp ends segment equ db label db db label db db db ends para public 'data' 27 1 word 10 5 word ? ? 'Chao ban ! Ban da xuat mau ra man hinh.$'

segment stack 'stack' db 256 dup (?) ends end main

DOI10_1.ASM Title DOI10_1.ASM include macro.asm code segment para public 'code' assume cs:code,ds:data,ss:stack ; Comment @ Chuong trinh con doi so 1 byte ra chuoi ASCII he 10 In: AL = so can doi ES:DI = dem chua chuoi (>= 5 byte) Out: khong @ bi2asc proc push dx push cx push bx mov ah,0 add di,2 mov cx,3 mov bx,10 bi2a1: xor dx,dx div bx add dl,'0' mov [di],dl dec di

- 7 -Thc tp Vi x l - m y vi t nh

bi2asc ; Comment @ Chuong trinh con in so nguyen 1 byte In: AL = gia tri Out: khong @ putbint proc mov di,offset decstr call bi2asc puts decstr ret putbint endp ; main proc mov ax,data mov ds,ax puts T_mess mov al,0F0h call putbint getch char exit 0 main endp code ends ; data segment para public 'data' char db ? T_mess db 'Chuong trinh doi so 1 byte ra chuoi ASCII he 10.',13,10,36 decstr db '000' crlf db 13,10,36 buffer db 80 dup (?) data ends ; stack segment stack 'stack' db 256 dup (?) stack ends end main DOI10_2.ASM Title DOI10_2.ASM include macro.asm code segment para public 'code' assume cs:code,ds:data,ss:stack ; Comment @ Chuong trinh con doi so 2 byte ra chuoi ASCII he 10

loop pop pop pop ret endp

bi2a1 bx cx dx

Thc tp Vi x l - m y vi t nh - 8 -

In: Out: @ i2asc

AX = so can doi ES:DI = dem chua chuoi (>= 5 byte) khong proc push push push add mov mov xor div add mov dec loop pop pop pop ret endp

i2a1:

dx cx bx di,4 cx,5 bx,10 dx,dx bx dl,'0' [di],dl di i2a1 bx cx dx

i2asc ; Comment @ Chuong trinh con in so nguyen 2 byte In: AX = gia tri Out: khong @ putint proc mov di,offset decstr call i2asc puts decstr ret putint endp ; main proc mov ax,data mov ds,ax puts T_mess mov ax,1000h call putint getch char exit 0 main endp code ends ; data segment para public 'data' char db ? T_mess db 'Chuong trinh doi so 2 byte ra chuoi ASCII he 10.',13,10,36 decstr db '00000'

- 9 -Thc tp Vi x l - m y vi t nh

crlf buffer data ; stack stack

db db ends

13,10,36 80 dup (?)

segment stack 'stack' db 256 dup (?) ends end main

DOI16_1.ASM Title DOI16_1.ASM include macro.asm code segment para public 'code' assume cs:code,ds:data,ss:stack ; Comment @ Chuong trinh con doi so 1 byte ra chuoi ASCII he 16 In: AL = so can doi ES:DI = dem chua chuoi (>= 4 byte) Out: khong @ bx2asc proc push cx mov ch,al mov cl,4 shr al,cl cmp al,10 jb bx2a10 add al,'A'-'0'-10 bx2a10: add al,'0' mov [di],al and ch,00Fh cmp ch,10 jb bx2a11 add ch,'A'-'0'-10 bx2a11: add ch,'0' mov [di+1],ch pop cx ret bx2asc endp ; Comment @ Chuong trinh con in so hex 1 byte In: AL = gia tri Out: khong @ putbyte proc mov di,offset hexstr call bx2asc puts hexstr ret

Thc tp Vi x l - m y vi t nh - 10 -

putbyte endp ; main proc mov mov puts mov call getch exit main endp code ends ; data segment char db T_mess db 16.',13,10,36 hexstr db crlf db data ends ; stack segment db stack ends end

ax,data ds,ax T_mess al,035h putbyte char 0

para public 'data' ? 'Chuong trinh doi so 1 byte ra chuoi ASCII he '00' 13,10,36

stack 'stack' 256 dup (?) main

DOI16_2.ASM Title DOI16_2.ASM include macro.asm code segment para public 'code' assume cs:code,ds:data,ss:stack ; Comment @ Chuong trinh con doi so 2 byte ra chuoi ASCII he 16 In: AX = so can doi ES:DI = dem chua chuoi (>= 4 byte) Out: khong @ x2asc proc push dx push cx push bx add di,3 mov cx,4 mov bx,16 x2a1: xor dx,dx div bx cmp dl,10 jb x2a2 add dl,'A'-'0'-10 x2a2: add dl,'0'

- 11 -Thc tp Vi x l - m y vi t nh

x2asc ; Comment @ Chuong trinh con in so hex 2 byte In: AX = gia tri Out: khong @ puthex proc mov di,offset hexstr call x2asc puts hexstr ret puthex endp ; main proc mov ax,data mov ds,ax puts T_mess mov ax,0E05Bh call puthex getch char exit 0 main endp code ends ; data segment para public 'data' char db ? T_mess db 'Chuong trinh doi so 2 byte ra chuoi ASCII he 16.',13,10,36 hexstr db '0000' crlf db 13,10,36 data ends ; stack segment stack 'stack' db 256 dup (?) stack ends end main CMDLIPAR.ASM TITLE include code segment assume data segment

mov dec loop pop pop pop ret endp

[di],dl di x2a1 bx cx dx

Command line parameters macro.asm public 'code' cs:code,ds:data,es:data,ss:stack public 'data'

Thc tp Vi x l - m y vi t nh - 12 -

; BLANK BLKCHR buffer parlen hexstr nomess crlf data stack

stack ; Comment @ Chuong trinh con doi so 1 byte ra chuoi ASCII he 16 In: AL = so can doi ES:DI = dem chua chuoi (>= 2 byte) Out: DI = dia chi dau chuoi @ ------------------------------------------------hex2asc proc push ax push cx push di mov ah,al mov cl,4 shr ah,cl and al,0Fh mov cx,2 cld h2a1: xchg ah,al cmp al,10 jb h2a2 add al,'A'-'0'-10 h2a2: add al,'0' stosb loop h2a1 pop di pop cx pop ax ret hex2asc endp ; COMMENT @ Chuong trinh con in 1 byte so hex In: AL = gia tri Out: khong @ ------------------------------------------------putbyte proc mov di,offset hexstr call hex2asc puts hexstr

equ equ db dw db db db ends segment db ends

32 178 64 dup (?) 0 '00 $' 'There is no command line parameter.',13,10,36 13,10,36 stack 'stack' 256 dup (?)

- 13 -Thc tp Vi x l - m y vi t nh

ret putbyte endp ; main

main3:

main0:

main1:

main2:

main code

proc ; ; Lam gi day ? ; mov ax,data mov es,ax cld mov si,80h mov di,offset buffer lodsb or al,al jnz main3 mov ax,data mov ds,ax puts nomess exit 0 mov cl,al xor ch,ch mov es:parlen,cx rep movsb mov al,'$' stosb ; mov ax,data mov ds,ax mov si,offset buffer mov cx,parlen lodsb call putbyte loop main0 puts crlf mov si,offset buffer mov cx,parlen lodsb cmp al,BLANK mov dh,al jne main2 mov dh,BLKCHR putch BLANK putch dh putch BLANK loop main1 mov ax,4c00h int 21h endp ends end main

Thc tp Vi x l - m y vi t nh - 14 -

STRING1.ASM Title include include code segment assume ; delay proc push mov dela1: push mov dela2: loop pop loop pop ret delay endp ; main proc mov mov mov puts puts mov mov call mov call mov puts Main0: mov mov cld main1: lodsb putch call loop mov main2: putch putch putch call loop mov int jz getch exit

STRING1.ASM macro.asm string.h para public 'code' cs:code,ds:data,ss:stack

cx cx,20 cx cx,0 dela2 cx dela1 cx

ax,data ds,ax es,ax T_mess mess1 dx,offset buffer cx,80 readstring di,offset buffer strlen Slen,ax mess2 si,offset buffer cx,Slen

al delay main1 cx,Slen BSCHR BLKCHR BSCHR delay main2 ah,1 16h main0 char 0

- 15 -Thc tp Vi x l - m y vi t nh

main code ; data BSCHR BLKCHR ESCCHR char Slen T_mess crlf mess1 mess2 buffer data ; stack stack

endp ends segment equ equ equ db dw db db db db db ends para public 'data' 8 32 27 ? ? 'Chuong trinh xu ly chuoi.',13,10,36 13,10,36 'Hay nhap vao mot chuoi.',13,10,36 'Dao chuoi va xuat ra tu tu.',13,10,36 80 dup (?)

segment stack 'stack' db 256 dup (?) ends end main

STRING2.ASM Title STRING2.ASM include macro.asm include string.h code segment para public 'code' assume cs:code,ds:data,ss:stack ; delay proc push cx mov cx,20 dela1: push cx mov cx,0 dela2: loop dela2 pop cx loop dela1 pop cx ret delay endp ; Comment @ Chuong trinh con doi so 2 byte ra chuoi ASCII he 10 In: AX = so can doi ES:DI = dem chua chuoi (>= 5 byte) Out: khong @ ------------------------------------------------int2asc proc push dx push cx push bx add di,4

Thc tp Vi x l - m y vi t nh - 16 -

mov mov i2a1: xor div add mov dec loop pop pop pop ret int2asc endp ; main proc mov mov mov puts puts mov mov call mov call mov puts mov mov call mov call mov puts getche puts mov mov call jb sub mov mov inc mov call puts jmp main1: puts main3: mov mov

cx,5 bx,10 dx,dx bx dl,'0' [di],dl di i2a1 bx cx dx

ax,data ds,ax es,ax T_mess mess1 dx,offset buf1 cx,80 readstring di,offset buf1 strlen len1,ax mess3 dx,offset buf2 cx,80 readstring di,offset buf2 strlen len2,ax mess4 char crlf di,offset buf1 al,char strchr main1 di,offset buf1 vitri,di ax,vitri ax di,offset vtmes1 int2asc mess5 short main3 mess6 si,offset buf2 dx,len2

- 17 -Thc tp Vi x l - m y vi t nh

main2: main code ; data BSCHR BLKCHR ESCCHR char T_mess crlf mess1 mess3 mess4 mess5 vtmes1 mess7 vtmes2 vitri mess6 mess8 buf1 len1 buf2 len2 data ; stack stack

mov mov call jb sub mov mov inc mov call puts exit puts exit endp ends segment equ equ equ db db db db db db db db db db dw db db db dw db dw ends

di,offset buf1 bx,len1 strstr main2 di,offset buf1 vitri,di ax,vitri ax di,offset vtmes2 int2asc mess7 0 mess8 0

para public 'data' 8 32 27 ? 'Chuong trinh xu ly chuoi.',13,10,36 13,10,36 'Hay nhap vao chuoi 1 : ',36 'Hay nhap vao chuoi 2 : ',36 'Hay nhap vao 1 ky tu : ',36 'Tim thay ky tu tai vi tri ' '00000.',13,10,36 'Tim thay chuoi 2 trong chuoi 1 tai vi tri ' '00000.',13,10,36 ? 'Khong tim thay ky tu.',36 'Khong tim thay chuoi 2 trong chuoi 1.',36 80 dup (?) ? 80 dup (?) ?

segment stack 'stack' db 256 dup (?) ends end main

CLOCKD.ASM title include scrseg segment org scrvar label

CLOCKD.ASM macro.asm at 0b800h 144 word

Thc tp Vi x l - m y vi t nh - 18 -

scrseg ; code

ends segment assume org jmp equ label dw dw dw db db db db para public 'code' cs:code,ds:code,ss:code 100h main 18 dword ? ? C_NUM 0 0 0 0

start: C_NUM oldi1c oldo1c olds1c keycou scroff seco minu hour ; Comment @ Chuong trinh phuc vu ngat quang thoi gian 1Ch @ ------------------------------------------------int1ch proc far push ds push cs pop ds ; ; co the chinh lai cho chinh xac hon moi 5s ; dec keycou jnz int1c1 mov keycou,C_NUM inc seco ; tang giay cmp seco,60 jb int1c2 mov seco,0 ; ; them tang phut va tang gio ; int1c2: call putscr int1c1: pop ds jmp cs:oldi1c int1ch endp ; C_ATTR equ 8Eh ; thuoc tinh mau vang nhap nhay strmes db '00:00:00' STRLEN equ $-strmes ; Comment @ Chuong trinh con doi so 1 byte ra chuoi ASCII he 10 In: AL = so can doi ES:DI = dem chua chuoi (2 byte) Out: khong @ -------------------------------------------------

- 19 -Thc tp Vi x l - m y vi t nh

byt2asc proc push cx push bx inc di mov cx,2 mov bl,10 b2a1: xor ah,ah div bl add ah,'0' mov [di],ah dec di loop b2a1 pop bx pop cx ret byt2asc endp ; Comment @ Chuong trinh con xuat gio, phut, giay ra RAM man hinh Out: khong @ ------------------------------------------------SEC_IDX equ 6 putscr proc push es push ax push cx push si push di mov ax,ds mov es,ax mov di,offset strmes+SEC_IDX ; doi giay ra ASCII mov al,seco call byt2asc ; ; them doi phut va doi gio ; mov ax,scrseg ; xuat n byte mov es,ax ; truc tiep ra RAM man hinh mov di,offset scrvar mov si,offset cs:strmes mov cx,STRLEN cld putsc2: lodsb stosb mov al,C_ATTR stosb loop putsc2 pop di pop si pop cx pop ax

Thc tp Vi x l - m y vi t nh - 20 -

putscr ; stay_res: mess1 db 'Get system time ...',13,10,36 mess2 db 'Install interrupt vector number 1ch ...',13,10,36 ; Comment @ Chuong trinh chinh xu ly cai ngat quang thoi gian, thuong tru bo nho @ ------------------------------------------------main proc puts mess1 mov ah,2ch ; lay gio he thong int 21h mov hour,ch mov minu,cl mov seco,dh puts mess2 mov ax,351ch ; doc vector ngat 1Ch int 21h mov oldo1c,bx mov olds1c,es mov dx,offset int1ch ; cai dat ngat 1Ch mov ax,251ch int 21h getch mess1 ; ; Thay bang doan chuong trinh thuong tru ; push ds ; tra lai ngat 1Ch cu mov dx,oldo1c ; neu khong thuong tru mov ds,olds1c mov ax,251ch int 21h pop ds exit 0 main endp code ends end start BOOTREAD.ASM Title BOOTREAD.ASM include macro.asm code segment para public 'code' assume cs:code,ds:data,es:data,ss:stack ; Comment @ Chuong trinh con doi so 1 byte ra chuoi ASCII he 16

pop ret endp

es

- 21 -Thc tp Vi x l - m y vi t nh

In:

AL = so can doi ES:DI = dem chua chuoi (>= 2 byte) Out: DI = dia chi dau chuoi @ ------------------------------------------------hex2asc proc push ax push cx push di mov ah,al mov cl,4 shr ah,cl and al,0Fh mov cx,2 cld h2a1: xchg ah,al cmp al,10 jb h2a2 add al,'A'-'0'-10 h2a2: add al,'0' stosb loop h2a1 pop di pop cx pop ax ret hex2asc endp ; COMMENT @ Chuong trinh con in 1 byte so hex In: AL = gia tri Out: khong @ ------------------------------------------------putbyte proc mov di,offset decstr[3] call hex2asc puts decstr[3] ret putbyte endp ; COMMENT @ Chuong trinh con doi so 2 byte ra chuoi ASCII he 10 In: AX = so can doi ES:DI = dem chua chuoi (>= 5 byte) Out: DI = dia chi chuoi @ ------------------------------------------------int2asc proc push dx push cx push bx push ax mov al,' '

Thc tp Vi x l - m y vi t nh - 22 -

mov cx,5 rep stosb dec di pop ax mov bx,10 i2a1: xor dx,dx div bx add dl,'0' mov [di],dl dec di or ax,ax jnz i2a1 inc di pop bx pop cx pop dx ret int2asc endp ; COMMENT @ Chuong trinh con in so nguyen 2 byte In: AX = gia tri Out: khong @ ------------------------------------------------putint proc mov di,offset decstr call int2asc mov dx,di mov ah,9 int 21h ret putint endp ; COMMENT @ Chuong trinh xuat n ky tu In: DS:SI = dia chi chuoi CX = so ky tu Out: khong @ ------------------------------------------------putsn proc cld putsn1: lodsb putch al loop putsn1 ret putsn endp ; COMMENT @ Chuong trinh con doc boot sector dia mem In: khong Out: khong

- 23 -Thc tp Vi x l - m y vi t nh

@ ------------------------------------------------b_get proc mov ax,201h mov bx,offset boot mov cx,1 mov dx,0 int 13h jnb b_get1 puts loi1 stc b_get1: ret b_get endp ; COMMENT @ CHUONG TRINH CHINH @ ------------------------------------------------main proc mov ax,data mov ds,ax mov es,ax puts mess1 call b_get jb kthuc2 ; ; them vao viec hien thi cac thong so con lai cho day du ; ; hien thi nha san xuat va phien ban puts oem_mes mov si,offset boot.oemver mov cx,OEM_SIZ call putsn puts crlf ; hien thi nhan dia puts vol_mes mov si,offset boot.vollab mov cx,LAB_SIZ call putsn puts crlf ; hien thi so byte tren moi sector puts bps_mes mov ax,boot.bps call putint ; hien thi byte nhan dang dia puts med_mes mov al,boot.media call putbyte kthuc1: exit 0 kthuc2: exit 1 main endp code ends ;

Thc tp Vi x l - m y vi t nh - 24 -

COMMENT @ PHAN KHAI BAO DU LIEU @ ------------------------------------------------; ; dat ten cho cac vung con chua trong theo dung thu tu ; trong boot sector ; b_struc struc j_ins db 0E9h,?,? oemver db 8 dup (?) bps dw ? db (15h-0Dh) dup (?) media db ? db (2Bh-16h) dup (?) vollab db 11 dup (?) db (200h-36h) dup (?) b_struc ends ; data segment para public 'data' TAB equ 9 char db ? T_mess db 'Chuong trinh hien thi cau truc BOOT SECTOR.',13,10,36 mess1 db 'Doc boot sector ...',13,10,36 loi1 db 'Khong the doc Boot sector !',13,10,36 boot b_struc <> ; ; them cac cau thong bao ten vung ; OEM_SIZ equ 8 OEM_mes db 'OEM name & version :',TAB,TAB,36 LAB_SIZ equ 11 vol_mes db 'Volume label :',TAB,TAB,TAB,36 BPS_SIZ equ 2 bps_mes db 'Bytes per sector :',TAB,TAB,36 MED_SIZ equ 1 med_mes db 'Media descriptor byte :',TAB,TAB,36 decstr db '00000' crlf db 13,10,36 data ends ; COMMENT @ STACK CHUONG TRINH @ ------------------------------------------------stack segment stack 'stack' db 256 dup (?) stack ends end main

You might also like