Pokial mozem, pomozem. Ibaze:
- davate tu svoje zadania (to by az tak nevadilo... kazdy to robi), ale az vtedy, ked na dokoncenie mate tak cca 24-48 hodin; to sa ozaj neda stihnut
- nebavi ma pisat UPLNE HOTOVE programy, trochu skuste pouvazovat aj vy, alebo si aspon daco dorobit, alebo aspon zacat niecim.
- zbytocne Vam budem pisat program, ked si ho ani neprezriete; treba tam dat aj daco vlastne, nie len cakat na vysledok od druheho;
..... toto ale neplati vseobecne CEST VYNIMKAM, a ospravedlnujem sa aj laurylovi, ze som to napisal do jeho temy...
Kód:
.MODEL SMALL
.STACK 50H
.data
txt_info DB 13,10,'Disk Info <C>: $'
txt_spc DB 13,10,'sectors per cluster: $'
txt_noac DB 13,10,'number of available clusters: $'
txt_nobps DB 13,10,'number of bytes per sector: $'
txt_nocpd DB 13,10,'number of clusters per drive: $'
txt_bpc DB 13,10,13,10,'bytes per cluster: $'
spc DW 0 ; AX = sectors per cluster
noac DW 0 ; BX = number of available clusters
nobps DW 0 ; CX = number of bytes per sector
nocpd DW 0 ; DX = number of clusters per drive
txt_cislo DB "..."
c_10000 DB '0' ;;; cislica desattisice
c_1000 DB '0' ;;; cislica tisice
c_100 DB '0' ;;; cislica stovky
c_10 DB '0' ;;; cislica desiatky
c_1 DB '0' ;;; cislica jednotky
DB '$'
.CODE
org 100h
START:
mov ax,@data
MOV DS,AX
mov ah,09h
lea dx,txt_info
int 21h ; zobrazi sa text: "Disk..."
MOV AH,36H ; Zisti info
MOV DL,3 ; Disk c:
INT 21H ; Volanie Int21
; AX = sectors per cluster
; BX = number of available clusters
; CX = number of bytes per sector
; DX = number of clusters per drive
mov spc, AX
mov noac, BX
mov nobps, CX
mov nocpd, DX
;;; teraz vypisy:
mov ah,09h
lea dx,txt_spc
int 21h ; zobrazi sa text: "sectors per..."
mov AX,spc ;;; mame cislo, 4567 a chceme ho vypisat na obrazovku
;;; takze treba z neho urobit znaky '0' '4' '5' '6' '7'
;;; a vypisat ich
call vypis_cisla ;do AX sme vlozili cislo, co chceme vypisat
mov ah,09h
lea dx,txt_noac
int 21h ; zobrazi sa text: ...
mov AX, noac
call vypis_cisla ; vypis cisla
mov ah,09h
lea dx,txt_nobps
int 21h ; zobrazi sa text: ...
mov AX, nobps
call vypis_cisla ; vypis cisla
mov ah,09h
lea dx,txt_nocpd
int 21h ; zobrazi sa text: ...
mov AX, nocpd
call vypis_cisla ; vypis cisla
; bytes per cluster = nobps * spc
mov ah,09h
lea dx,txt_bpc
int 21h ; zobrazi sa text: ...
XOR DX,DX ; DX <--- 0
MOV AX, nobps
mov BX, spc
MUL BX ; AX * BX ---> (DX:AX)
call vypis_cisla ; vypis cisla (pozor, ale iba AX,
; cize vacsie cisla nez 65536 to nevypise!!!)
;;;
jmp koniec
;;; podprogram pre vypisovanie cisla: 123 ako retazca ...00123
vypis_cisla:
mov BL, '0'
mov c_1, BL
mov c_10, BL
mov c_100, BL
mov c_1000, BL
mov c_10000, BL
pocitame:
cmp AX, 0
je vypiseme_pocet
dec AX
jednotky:
inc c_1
cmp c_1,'9'
jle pocitame
mov c_1,'0'
desiatky:
inc c_10
cmp c_10,'9'
jle pocitame
mov c_10,'0'
stovky:
inc c_100
cmp c_100,'9'
jle pocitame
mov c_100,'0'
tisicky:
inc c_1000
cmp c_1000,'9'
jle pocitame
mov c_1000,'0'
desattisicky:
inc c_10000
jmp pocitame
vypiseme_pocet:
lea dx,txt_cislo
mov ah,09h
int 21h ;vypisanie cisla ako retazca '...04567'
ret
koniec:
MOV AX,4C00H
INT 21H ; koniec
END START