print proc
push ax
push bx
push cx
push dx
MOV COL,2
MOV ROW,15
CALL Q20CURS
mov dx, offset id_msg
mov ah, 9h
int 21h; print initial message
cmp id_flag, 1; if set to 1, cpu supported CPUID
; instruction
; print detailed CPUID information
je print1
print_86:
cmp cpu_type, 0
jne print_286
MOV COL,30
MOV ROW,16
CALL Q20CURS
mov dx, offset c8086
mov ah, 9h
int 21h
jmp end_print
print1: jmp print_cpuid_data
print_286:
cmp cpu_type, 2
jne print_386
MOV COL,30
MOV ROW,16
CALL Q20CURS
mov dx, offset c286
mov ah, 9h
int 21h
jmp end_print
print_386:
cmp cpu_type, 3
jne print_486
MOV COL,30
MOV ROW,16
CALL Q20CURS
mov dx, offset c386
mov ah, 9h
int 21h
jmp end_print
print_486:
MOV COL,30
MOV ROW,16
CALL Q20CURS
mov dx, offset c486
mov ah, 9h
int 21h
jmp end_print
print_cpuid_data:
cmp cpu_type, 5
jne print_cpuid_cont
MOV COL,30
MOV ROW,16
CALL Q20CURS
mov dx, offset Pentium
mov ah, 9
int 21h
print_cpuid_cont:
MOV COL,2
MOV ROW,16
CALL Q20CURS
mov dx, offset familymsg; print family msg
mov ah, 9h
int 21h
mov al, cpu_type
mov byte ptr dataCR, al
add byte ptr dataCR, 30H; convert to ASCII
MOV COL,30
MOV ROW,17
CALL Q20CURS
mov dx, offset dataCR; print family info
mov ah, 9h
int 21h
MOV COL,2
MOV ROW,18
CALL Q20CURS
mov dx, offset steppingmsg; print stepping msg
mov ah, 9h
int 21h
mov al, stepping
mov byte ptr dataCR, al
add byte ptr dataCR, 30H; convert to ASCII
MOV COL,30
MOV ROW,18
CALL Q20CURS
mov dx, offset dataCR; print stepping info
mov ah, 9h
int 21h
MOV COL,2
MOV ROW, 19
CALL Q20CURS
mov dx, offset modelmsg; print model msg
mov ah, 9h
int 21h
mov al, themodel
mov byte ptr dataCR, al
add byte ptr dataCR, 30H; convert to ASCII
MOV COL,30
MOV ROW, 19
CALL Q20CURS
mov dx, offset dataCR; print stepping info
mov ah, 9h
int 21h
end_print:
pop dx
pop cx
pop bx
pop ax
RET
print endp
TABL PROC; Процедура вывода рамки
MOV CX,78; Количество симв. для верт. линии рамки
MOV COL,1
MOV ROW,0
CALL Q20CURS
LINE: MOV AH,02H
MOV DL, 205; Вывод верт. верхней линии рамки
INT 21H
LOOP LINE
MOV CX,22; Количество симв. для гориз. линии рамки
MOV DH,1
LINE2: MOV COL,0
MOV ROW,DH
CALL Q20CURS; Установка курсора
MOV AH,02H
MOV DL,186; Вывод гориз. левой линии рамки
INT 21H
INC DH
LOOP LINE2
MOV CX,22
MOV DH,1
LINE3: MOV COL,79
MOV ROW,DH
CALL Q20CURS
MOV AH,02H
MOV DL,186; Вывод гориз. правой линии рамки
INT 21H
INC DH
LOOP LINE3
MOV CX,78
MOV COL,1
MOV ROW,23
CALL Q20CURS
LINE1: MOV AH,02H
MOV DL, 205; Вывод вертик. нижней линии рамки
INT 21H
LOOP LINE1
MOV COL,79; Вывод углов рамки
MOV ROW,0
CALL Q20CURS
MOV AH,02H
MOV DL,187
INT 21H
MOV COL,0
MOV ROW,0
CALL Q20CURS
MOV AH,02H
MOV DL, 201
INT 21H
MOV COL,0
MOV ROW,23
CALL Q20CURS
MOV AH,02H
MOV DL, 200
INT 21H
MOV COL,79
MOV ROW,23
CALL Q20CURS
MOV AH,02H
MOV DL,188
INT 21H
RET
TABL ENDP
COMP1 PROC; Процедура анализирования и вывода
; информации про тип компютера
MOV COL,1
MOV ROW,1
CALL Q20CURS; Установка курсора
LEA DX,TYPEC; Вывод сообщения о типе
MOV AH,09H
INT 21H
MOV AX,0F000H; Чтение типа комп. по адресу 0F000H: 0FFFEH
MOV ES,AX
MOV AL,ES: [0FFFEH]
CMP AL,0FDH; Проверка на JR
JE JR
CMP AL,0FFH; Проверка на PC
JE PC
CMP AL,0FEH; Проверка на XT
JE XT
CMP AL,0FCH; Проверка на AT
JE AT; Переход на вывод AT
JR: MOV COL,30
MOV ROW,1
CALL Q20CURS; Установка курсора
LEA DX,MJR; Вывод JR
MOV AH,09H
INT 21H
RET
PC: MOV COL,30
MOV ROW,1
CALL Q20CURS; Установка курсора
LEA DX,MPC; Вывод PC
MOV AH,09H
INT 21H
RET
XT: MOV COL,30
MOV ROW,1
CALL Q20CURS; Установка курсора
LEA DX,MXT; Вывод XT
MOV AH,09H
INT 21H
RET
AT: MOV COL,30
MOV ROW,1
CALL Q20CURS; Установка курсора
LEA DX,MAT; Вывод AT
MOV AH,09H
INT 21H
RET
COMP1 ENDP
MSDOSVER PROC; Процедура анализирования и вывода версии MS-DOS
MOV AH,30H
INT 21H; читаем номер версии DOS
MOV STAR,AL; переводим старшую часть версии в символ
OR STAR,30H
MOV AX,0000; переводим младшую часть версии в символы
MOV AL,AH
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV MLAD,AL
MOV [MLAD+1],AH
MOV COL,1; Столбец 1
MOV ROW,2; Строка 2
CALL Q20CURS; Установка курсора
LEA DX,VER; вывод младшей части версии
MOV AH,09H
INT 21H
MOV COL,30
MOV ROW,2
CALL Q20CURS; Установка курсора
LEA DX,STAR; вывод старшей части версии
MOV AH,09H
INT 21H
RET
MSDOSVER ENDP
SYSTDAT PROC; Процедура анализирования и вывода дня недели
MOV COL,1
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,DENTIG; Вывод сообщения
MOV AH,09H
INT 21H
MOV AH,2AH
INT 21H; Чтение даты и дня недели
CMP AL,0; Проверка на воскресене
JE VOS; Переход на вывод воскр.
CMP AL,1
JE PO
CMP AL,2
JE VT
CMP AL,3
JE SR
CMP AL,4
JE CHT
CMP AL,5; Проверка на пятницу
JNE mq
jmp PT
mq: CMP AL,6; Проверка на суботу
MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,SUB
MOV AH,09H
INT 21H
RET
VOS: MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,NED
MOV AH,09H
INT 21H; Вывод воскр.
RET
PO: MOV COL,30
MOV ROW,3
CALL Q20CURS
LEA DX,PON
MOV AH,09H
INT 21H; Вывод пон.
RET
VT: MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,DENTIG
MOV AH,09H
INT 21H
LEA DX,VIV
MOV AH,09H
INT 21H; Вывод вт.
RET
SR: MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,SER
MOV AH,09H
INT 21H; Вывод ср.
RET
CHT: MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,CHE
MOV AH,09H
INT 21H; Вывод четверг
RET
PT: MOV COL,30
MOV ROW,3
CALL Q20CURS; Установка курсора
LEA DX,PYA
MOV AH,09H
INT 21H; Вывод пятницы
RET
SYSTDAT ENDP
SMM1 PROC; Процедура анализирования и вывода текущей даты
MOV AH,2AH
INT 21H; Чтение даты
MOV AX,0000; Перевод числа в символьный вид
MOV AL,DL
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV DAY,AL
MOV [DAY+1],AH
MOV AH,2AH; Чтение даты
INT 21H
MOV AX,0000; Перевод месяца в символьный вид
MOV AL,DH
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV MUNS,AL
MOV [MUNS+1],AH
MOV AH,2AH
INT 21H; Чтение даты
MOV COL,1
MOV ROW,4
CALL Q20CURS; Установка курсора
LEA DX,SDAT; Вывод сообщения о дате
MOV AH,09H
INT 21H
MOV COL,30
MOV ROW,4
CALL Q20CURS; Установка курсора
mov dx,cx
call dec16out; Перевод года в символьный вид и его вывод
LEA DX,MUNS-1; Вывод месяца и числа
MOV AH,09H
INT 21H
RET
SMM1 ENDP
TIME1 PROC
MOV COL,1
MOV ROW,5
CALL Q20CURS; Установка курсора
LEA DX,TIME; Вывод сообщения о времени
MOV AH,09H
INT 21H
RET
TIME1 ENDP
TIME2 PROC; Процедура анализирования и вывода текущего времени
mov ah,1
mov ch,10h
mov cl,0
int 10h; Скрытие курсора
MOV AH,2CH; Чтение текущего времени
INT 21H
MOV AX,0000; Перевод часов в символьный вид
MOV AL,CH
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV HOUR,AL
MOV [HOUR+1],AH
MOV AH,2CH
INT 21H; Чтение текущего времени
MOV AX,0000; Перевод минут в символьный вид
MOV AL,CL
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV MIN,AL
MOV [MIN+1],AH
MOV AH,2CH
INT 21H; Чтение текущего времени
MOV AX,0000; Перевод секунд в символьный вид
MOV AL,DH
MOV BH,0ah
DIV BH
OR AL,30H
OR AH,30H
MOV SEC,AL
MOV [SEC+1],AH
MOV COL,30
MOV ROW,5
CALL Q20CURS; Установка курсора
LEA DX,HOUR; Вывод текущего времени
MOV AH,09H
INT 21H
RET
TIME2 ENDP
space_count proc; Процедура анализирования
; свободного места на диске
; Free_Space=ax*cx*bx;
mov ah,36h
mov dl,0
int 21h; читаем размер свободного пространства
.386
mov Sectors_Per_Cluster,ax; сохранение значения секторов на кластер
mov free_cluster,bx; сохранение значения свободных кластеров
mov zag_cluster,dx; сохранение значения всего кластеров
mul bx; результат - в DX: AX
mov word ptr for_eax,dx
mov word ptr for_eax1,ax
xor eax,eax
mov eax,dword ptr for_eax
shl eax,16
or eax,dword ptr for_eax1
mov word ptr mnoj,cx; EDX: EAX
mul mnoj
call perevod; перевод числа в строку
ret
space_count endp
perevod proc; Процедура перевода числа в строку
.386
lea si,sit
xor cx,cx; counter
jmp oop1
onz: mov edx,dword ptr space
mov eax,ebx
oop1:
xor ebx,ebx; part of result
oop: cmp edx,00
jne dely
cmp eax,memo
jl yes
dely:
sub eax,memo
sbb edx,00
add ebx,1
adc space,0
jmp oop
yes: mov dword ptr ostt,eax
mov dx,word ptr ostt
or dl,30h; перевести в символьный вид
mov [si],dl; сохранить символьный вид 10-ой цифры в строке
inc si; перейти к следующей позиции
inc cx
cmp dword ptr space,00h; проверка на наличие 10-ых знаков для вывода
jne onz; продолжение выделения отдельных цифр
cmp ebx,00h
jne onz
dec si
ret
perevod endp
disp_c proc; Процедура вывода свободного места на диске
mov ah,9; вывести сообщение о свободном месте
lea dx,prompt2
int 21h
okp:
mov ah,2h; функция вывода символов
mov dl, [si] ;
int 21h; Вывод свободного места
dec si
loop okp
ret
disp_c endp
vyv_dec1 proc; Процедура анализирования и вывода количества
; свободных кластеров
lea si,sit
xor cx,cx
mov al,0ah
cbw
mov bx,ax
mov ax,free_cluster
mov chast,ax
mmm:
xor dx,dx
mov ax,chast
div bx
mov chast,ax; octatok - in dx
or dl,30h
mov [si],dl
inc si
inc cx
cmp chast,00h
jne mmm
dec si
m1:
mov dl, [si]
mov ah,2h
int 21h
dec si
loop m1
ret
vyv_dec1 endp
vyv_dec2 proc; Процедура анализирования и вывода количества
; свободных кластеров
lea si,sit
xor cx,cx
mov al,0ah
cbw
mov bx,ax
mov ax,zag_cluster
mov chast,ax
mmmqw:
xor dx,dx
mov ax,chast
div bx
mov chast,ax; octatok - in dx
or dl,30h
mov [si],dl
inc si
inc cx
cmp chast,00h
jne mmmqw
dec si
m1qw:
mov dl, [si]
mov ah,2h
int 21h
dec si
loop m1qw
ret
vyv_dec2 endp
clust_count proc; Процедура анализирования и вывода количества
; свободных кластеров
mov ah,9h; функция вывода
lea dx,prompt1; сообщения о своб. кластерах
int 21h; вызов DOS
call vyv_dec1; Вызов процедуры вывода свободных кластеров
mov ah,9h; функция вывода
lea dx,prompt3; сообщения о своб. кластерах
int 21h; вызов DOS
call vyv_dec2; Вызов процедуры вывода свободных кластеров
ret
clust_count endp
get_logic_boot proc; Процедура анализирования BOOT-сектора
mov dx,0
mov cx,0ffffh
lea bx,Buffer
mov dword ptr Buffer,0; с какого сектора начинать чтение
mov word ptr Buffer+4,1; количество секторов для чтения
mov word ptr Buffer+6,bx; Адрес буфера (смещение)
mov ax,ds
mov word ptr Buffer+8,ax; Адрес буфера (сегмент)
mov al,3; функция чтения
int 25h; Чтение BOOT-сектора
pop dx; восстановление стека после int 25h
cld; установка направления вперед для movsb
push ds; установка es на сегмент данных
pop es
mov si,offset Buffer [43] ; регистр si - смещение Buffer [43] -метка тома
mov di,offset MetkaToma [16] ; регистр di - смещение MetkaToma [16] -метка тома
mov cx,11; колич. символов в метке тома
rep movsb; копирование метки тома в переменную
mov dx,offset MetkaToma; Вывод метки тома
mov ah,9
int 21h
mov si,offset Buffer [54] ; регистр si - смещение Buffer [54] -тип FAT
mov di,offset RFAT [16] ; регистр di - смещение RFAT [16] -тип FAT
mov cx,8; колич. символов в типе FAT
rep movsb; копирование типа FAT в переменную
mov dx,offset RFAT; Вывод типа FAT
mov ah,9
int 21h
ret
get_logic_boot endp
DISC PROC; Процедура анализирования и вывода информации о диске
call get_logic_boot; Вызов процедуры анализирования BOOT-сектора
call space_count; Вызов процедуры анализирования свободного места
call disp_c; Вызов процедуры вывода свободного места
call clust_count; Вызов процедуры анализирования и вывода количества