РефератыИнформатика, программированиеМоМонітор використання ресурсів комп'ютера

Монітор використання ресурсів комп'ютера

Міністерство освіти і науки України


Кiровоградський Державний Технiчний Унiверситет


Факультет автоматики енергетики та програмування


Кафедра програмного забезпечення


Курсовая работа


з дисципліни


“ASM-86 ”


на тему:


"Монітор використання ресурсів комп'ютера"


Зміст


1. Вступ


2. Постановка задачі


3. Обґрунтування вибору методів розв’язку задачі


4. Алгоритм програми


5. Реалізація програми


6. Системні вимоги


7. Інструкція для користувача


8. Висновки


9. Використана література


Додаток


1. Вступ

Тепер комп’ютери відіграють у житті людини все більшу та більш роль. Раніше, коли ще не було комп’ютерів, чи вони були мало розповсюдженні, все робилося вручну. Коли комп’ютери одержали широке розповсюдження, комп’ютер став допомагати людині, бо він може багато операцій робити набагато швидше, ніж людина.


Але є багато типів комп'ютерів, які розрізняються своїми можливостями. Щоб досконаліше знати можливості свого комп'ютера, призначені програми, які виводять на екран характеристики машини.


2. Постановка задачі

Розробити програму “Монітор використання ресурсів комп’ютера" на мові програмування ASM-86.


3. Обґрунтування вибору методів розв’язку задачі

Отже, необхідно написати програму, яка виводе на екран ресурси комп’ютера. При виборі алгоритму програми у мене виникло багато варіантів, бо ресурси машини можна знаходити різними засобами. Але на мою думку, я вибрав алгоритми, які більш-менш прості та зрозумілі користувачу.


4. Алгоритм програми

Алгоритм головної програми:


Очищення екрану


Виведення рамки


Аналізує і виводить тип комп'ютера


Аналізує і виводить версію MS-DOS


Аналізує і виводить день тижня


Аналізує і виводить поточну дату


Підготовка виводу системного часу


Аналізує і виводить розмір пам'яті


Аналізує і виводить інформацію про диск


Аналізує і виводить інформацію про мікропроцесор


Виклик процедури виводу часу


Читання порту клавіатури


Порівняння з ESC


14Якщо не ESC, продовження виводу часу


15. Закінчити програму.


5. Реалізація програми

Програма написана на мові ASM-86 з використанням команд процесора 86/286. Вона складається з головної програми, яка викликає процедури, та процедур, які виконують необхідні дії по визначенню ресурсів машини.


Для визначення системної дати та дня тижня я використовував функцію 2AH переривання 21H.


Для визначення системного часу я використовував функцію 2СH переривання 21H.


Для визначення розміру пам'яті я використовував пам'ять CMOS, порти 70h та 71h.


Для визначення метки тому, формату FAT я читав BOOT-сектор диску, та аналізував інформацію в ньому. Читання сектору я проводив за допомогою переривання 25H.


Для визначення вільного місця, кількості загальних та вільних кластерів я використовував функцію 36H переривання 21H.


Для визначення версії DOS я використовував функцію 30H переривання 21H.


Для визначення типу комп'ютера я використовував байт пам'яті, який знаходиться по адресу: 0F000H: 0FFFEH.


Програма компілюється Turbo Assembler, зв’язується за допомогою TLINK.


6. Системні вимоги

IBM сумісний комп’ютер із мікропроцесором Intel 80086 або старшим.


Операційна система - ДОС


Пам’ять - 640 К і вище


7. Інструкція для користувача

Для запуску програми-монітору використання ресурсів комп’ютера, потрібно в командному рядку набрати kurs1. exe та натиснути Enter.


Програма аналізує та виводе на екран відомості про тип комп'ютера, поточну дату, день тижня, розмір пам'яті, розмір розширеної пам'яті, версію MS-DOS, метку тому диска, формат FAT диску, вільне місце на диску, кількість вільних кластерів на диску та тип процесора. Також програма виводе на екран поточний час до тих пір, поки користувач не натисне клавішу ESC.


8. Висновки

Отже, на мові ASM-86 створено програму-монітор використання ресурсів комп’ютера.


9. Використана література

1. Р. Джордейн “Справочник программиста персональных компьютеров типа IBM PC” М: Мир, 1991р.


2. П. Абель “Мова асемблера для IBM PC та програмування." М.: Вища школа, 1992.


3. “Основи мови” Асемблер” В.I. Криволап. Москва 1997р. ст.309


4. “Ассемблер для початкiвцiв” М.П. Шукiн. Київ 1980р. ст.155


5. “Турбо Асемблер” Л.В. Захаров. Харків 1995 р ст.178


6. “Макро Асемблер” К.С. Кропiйко, О.Д. Богатирова. Київ - “Наука” 1991р.


7. Електронний довідник BOOK.


Додаток
Лістинг програми

STACKSG SEGMENT PARA STACK 'Stack'; Стек


DW 32 DUP (?)


STACKSG ENDS


; - ---------------------------------------------------


DATASG SEGMENT PARA 'Data'; Данные


saved_cpuid dd?


vendor_id db 12 dup (?)


cpu_type db?


themodel db?


stepping db?


id_flag db 0


intel_proc db 0


id_msg db "Ця система маэ: $"


c8086 db "8086/8088 мiкропроцессор$"


c286 db "Intel 286 мiкропроцнссор$"


c386 db "Intel386 (TM) мiкропроцессор$"


c486 db "Intel486 (TM) DX мiкропроцессор$"


Pentium db "Pentium (TM) мiкропроцессор", 13, 10, '$'


intel db " Genuine Intel Processor", 13, 10, "$"


modelmsg db "Модель: $"


steppingmsg db "Шаг: $"


familymsg db "Процессор сiмейства: $"


period db ". ",13,10,"$"


dataCR db?,13,10,"$"


intel_id db "GenuineIntel"


TYPEC DB 'Тип комп"ютера','$'


MJR DB 'PCjr ','$'


MPC DB 'PC','$'


MXT DB 'XT','$'


MAT DB 'AT','$'


VER DB 'ВЕРСIЯ MS-DOS ','$'


STAR DB 2 DUP (?)


TOCH DB '. '


MLAD DB 2 DUP (?)


TOCH1 DB '. ','$'


SDAT DB 'СИСТЕМНA ДАТА ','$'


GOD1 DB 2 DUP (?)


GOD2 DB 2 DUP (?),'-'


MUNS DB 2 DUP (?),'-'


DAY DB 2 DUP (?)


TOCH2 DB '. ','$'


MEMMS DB 'Розмiр пам"ятi','$'


MEMMS1 DB 'Розмiр розширеноi пам"ятi','$'


MEM1 DB 2 DUP (?)


MEM2 DB 2 DUP (?),'$'


DENTIG DB 'День тиждня','$'


NED DB 'Недiля',13,10,'$'


PON DB 'Понедiлок',13,10,'$'


VIV DB 'Вiвторок',13,10,'$'


SER DB 'Середа',13,10,'$'


CHE DB 'Четверг',13,10,'$'


PYA DB 'П"ятниця',13,10,'$'


SUB DB 'Субота',13,10,'$'


TIME DB 'Системний час','$'


HOUR DB 2 DUP (?),': '


MIN DB 2 DUP (?),': '


SEC DB 2 DUP (?),'$'


COL DB 00


ROW DB 00


chast dw 00


sit db 10 dup ('$'); строка для вывода


Space dw 00h; long


dw 00h


Buffer dw 17000 dup (00);


prompt1 db 13,10,' Кiлькiсть вiльних кластерiв на диску = ','$'


prompt2 db 13,10,' Доступне дискове пространство = ','$'


prompt3 db 13,10,' Кiлькiсть всього кластерiв на диску = ','$'


prompt4 db 13,10,' Загальне дискове пространство = ','$'


MetkaToma db 13,10,' Метка тому = ',11 dup (0),'$'


RFAT db 13,10,' Формат FAT = ',8 dup (0),'$'


Sectors_Per_Cluster dw 00h


free_cluster dw 00


zag_cluster dw 00


fat_format dw 00


crlf db 13,10,'$'


mnoj dd 00h


for_eax dd 00h


for_eax1 dd 00h


ostt dd 00h


memo dd 0ah


DATASG ENDS


; - ---------------------------------------------------


CODESG SEGMENT PARA 'Code'; Код программы


BEGIN PROC FAR


ASSUME CS: CODESG,DS: DATASG,SS: STACKSG,ES: DATASG


PUSH DS


SUB AX,AX; Обнуление AX


PUSH AX


MOV AX,DATASG; Загрузка сегмента данных


MOV DS,AX


MOV ES,AX


MOV AX,0600H


CALL Q10SCR; Очистить экран


CALL Q20CURS; Установить курсор


CALL TABL; Выводит рамку


CALL COMP1; Анализирует и выводит тип компютера


CALL MSDOSVER; Анализирует и выводит версию MS-DOS


CALL SYSTDAT; Анализирует и выводит день недели


CALL SMM1; Анализирует и выводит текущую дату


CALL TIME1; Подготовка вывода системного времени


CALL MEMORY2; Анализирует и выводит размер памяти


CALL DISC; Анализирует и выводит информацию о диске


CALL CPUID; Анализирует и выводит информацию о микропроцессоре


AS:


CALL TIME2; Вызов процедуры вывода времени


in al,60h; Чтение порта клавиатуры


cmp al,1; Сравнение с ESC


jne as; Если не ESC, продолжение вывода времени


mov ah,004ch; Выход из программы


int 21h


RET


BEGIN ENDP


CPUID PROC


.8086; This part of the program must run on an 8086


call get_cpuid


call print


RET


CPUID ENDP


get_cpuid proc


; 8086 CPU check


; Bits 12-15 are always set on the 8086 processor


check_8086:


pushf; save FLAGS


pop bx; store FLAGS in BX


mov ax, 0fffh; clear bits 12-15


and ax, bx; in FLAGS


push ax; store new FLAGS calue on stack


popf; replace current FLAGS value


pushf; set new flags


pop ax; store new flags in AX


and ax, 0f000h; if bits 12-15 are set, then CPU


cmp ax, 0f000h; is an 8086/8088


mov cpu_type, 0; save the CPU type


je END1


JMP FF1


END1: RET


FF1:


; Intel 286 CPU check


; Bits 12-15 are always clear on the Intel processor.


check_80286:


.286


or bx, 0f000h; try to set bits 12-15


push bx


popf


pushf


pop ax


and ax, 0f000h; if bits 12-15 are cleared,


; CPU=Intel 286


mov cpu_type, 2; turn on Intel 286 Cpu flag


jz END2; if CPU is intel 286, check


JMP FF2; for Intel 287 math coprocessor


END2: RET


FF2:


; Intel386 CPU check


; The AC bit (bit 18), is a new bit introduced in the EFLAGS


; register on the Intel486 DX CPU to generate alignment faults.


; This bit can not be set on the Intel386 CPU.


;


check_intel386:


.386


pushfd


pop eax; get original EFLAGS


mov ecx,eax; save original EFLAGS


xor eax,40000h; flip AC bit in EFLAGS


push eax; save for EFLAGS


popfd; copy to EFLAGS


pushfd; push EFLAGS


pop eax; get new EFLAGS value


xor eax,ecx; can't toggle AC bit, CPU=Intel386


mov cpu_type, 3; turn on Intel386 CPU flag


je end_get_cpuid; if CPU is Intel386, now check


; for an Intel 287 or Intel387 MCP


; Intel486 DX CPU, Intel 487 SX MCP, and Intel486 SX CPU checking


;


; Checking for the ability to set/clear the ID flag (bit 21) in EFLAGS


; which diferentiates between Pentium (or greater) and the Intel486.


; If the ID flag is set then the CPUID instruction can be used to


; determine the final version of the chip, else it's a 486


;


;


check_Intel486:


.486


mov cpu_type, 4; turn on Intel486 CPU flag


pushfd; push original EFLAGS


pop eax; get original EFLAGS in eax


mov ecx,eax; save original EFLAGS in ecx


or eax, 200000h; flip ID bit in EFLAGS


push eax; save for EFLAGS


popfd; copy to EFLAGS


pushfd; push EFLAGS


pop eax; get new EFLAGS value


xor eax,ecx


je end_get_cpuid; if ID bit cannot be changed,


; CPU=Intel486 without CPUID


; instruction functionality


; Otherwise, execute CPUID instruction to determine vendor,


; family, model and stepping.


check_vendor:


.586


mov id_flag, 1; set flag for indicating use of


; CPUID inst


mov eax, 0; set up for CPUID instruction


cpuid


mov dword ptr vendor_id, ebx; Test for "GenuineIntel" vendor id.


mov dword ptr vendor_id [+4], edx


mov dword ptr vendor_id [+8], ecx


mov si, offset vendor_id


mov di, offset intel_id


mov cx, length intel_id


compare:


repe cmpsb


cmp cx, 0; must be a GenuineIntel if ecx =0


jne cpuid_data


intel_processor:


mov intel_proc, 1


mov [intel-1], '¦'; add a space so the Genuine Intel


; message prints out.


cpuid_data:


mov eax, 1


cpuid


mov saved_cpuid,eax; save for future use


and eax, 0F00H; mask everything but family


shr eax, 8


mov cpu_type, al; set cpu_type with family


mov eax,saved_cpuid; restore data


mov stepping, al


and stepping, 0FH; isolate stepping info


mov eax, saved_cpuid


mov themodel, al


and themodel, 0F0H; isolate model info


shr themodel, 4


end_get_cpuid:


.8086


ret


get_cpuid endp


;


; This procedure prints the appropriate cpuid string


; If the CPUID instruction was supported, it prints out


; the cpuid info.


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; Вызов процедуры анализирования и вывода количества


; свободных кластеров


RET


DISC ENDP


Q10SCR PROC NEAR; Процедура прокрутки экрана


; AX установлен при вызове


MOV BH,31; Цвет (07 для ч/б)


SUB CX,CX


MOV DX,184FH


INT 10H; прокрутка экрана


RET


Q10SCR ENDP


Q20CURS PROC NEAR; Процедура установки курсора


MOV AH,02


SUB BH,BH


MOV DH,ROW


MOV DL,COL


INT 10H; Установка курсора


RET


Q20CURS ENDP


MEMORY2 PROC; Процедура анализирования и вывода размера памяти


MOV COL,2


MOV ROW,6


CALL Q20CURS; Установка курсора


LEA DX,MEMMS; Вывод сообщения о памяти


MOV AH,09H


INT 21H


MOV COL,30


MOV ROW,6


CALL Q20CURS; Установка курсора


mov al,15h; Установка для чтения из CMOS


out 70h,al; младшего байта размера памяти


nop


xor ax,ax


in al,71h; Чтение из CMOS размера памяти


mov bx,ax


mov al,16h; Установка для чтения из CMOS


out 70h,al; старшего байта размера памяти


nop


xor ax,ax


in al,71h; Чтение из CMOS размера памяти


shl ax,8


add bx,ax


mov dx,bx


call dec16out; Перевод размера памяти в строку и его вывод


MOV COL,2


MOV ROW,7


CALL Q20CURS; Установка курсора


LEA DX,MEMMS1; Вывод сообщения о расширенной памяти


MOV AH,09H


INT 21H


MOV COL,30


MOV ROW,7


CALL Q20CURS; Установка курсора


mov al,17h; Установка для чтения из CMOS


out 70h,al; младшего байта размера расширенной памяти


nop


xor ax,ax


in al,71h; Чтение из CMOS размера расширенной памяти


mov bx,ax


mov al,18h; Установка для чтения из CMOS


out 70h,al; старшего байта размера расширенной памяти


nop


xor ax,ax


in al,71h; Чтение из CMOS размера расширенной памяти


shl ax,8


add bx,ax


mov dx,bx


call dec16out; Перевод расширенного размера памяти в строку


; и его вывод


RET


MEMORY2 ENDP


dec16out proc near; Процедура перевода 16-битного кода в строку


; DX-число для перевода


dec16out0:


push ds; сохраняем используемые регистры в стеке


push di


push dx


push cx


push ax


; помещение символьных цифр во временный буфер


mov cx,0


mov di, offset cs: tbuff; адрес временного буфера


dec16out1:


push cx; сохранить cx


mov ax,dx


mov dx,0


mov cx,10


div cx; деление на 10


xchg ax,dx; получение остатка


add al,30h; перевод цифры в символ


mov cs: [di],al; поместить символ в буфер


inc di; переход к следующему символу


pop cx; восстановить cx


inc cx; увеличить количество цифр


cmp dx,0; проверка частного на 0


jnz dec16out1; если не равно, продолжать выделение цифр


dec16out2:


dec di; вывод символов буфера в обратном порядке


mov al,cs: [di]


call stdout; Вызов процедуры вывода символа на экран


loop dec16out2


pop ax; восстанавливаем сохраненные регистры из стека


pop cx


pop dx


pop di


pop ds


ret


dec16out endp


stdout proc near; Процедура вывода символа на экран


push dx


mov dl,al;


mov ah,2; функция вывода символа на экран


int 21h; вывод символа


pop dx


ret


tbuff db 255 dup ('$')


stdout endp


CODESG ENDS


END BEGIN

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Монітор використання ресурсів комп'ютера

Слов:3964
Символов:37649
Размер:73.53 Кб.