Исследование памяти ПВЭМ

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«Комсомольский-на-Амуре государственный

технический университет»

Факультет компьютерных технологий

Кафедра «МОП ЭВМ»

ЛАБОРАТОРНАЯ РАБОТА 2

по курсу «ОСРР»

Студент группы 4ВС-1                                                                                       Неделько Н.И                                     

Преподаватель:                                                                                                     Трещев И.А.

Комсомольск-на-Амуре

2006


Тема:                      «Исследование памяти ПВЭМ»

Цель работы:        Изучить структуру памяти ПВЭМ

      Задание:                1. Изучить структуру и порядок программирования CMOS памяти персональной ПЭВМ и написать модуль, читающий и расшифровывающий все данные CMOS памяти ПЭВМ;

2. Изучить структуру ОЗУ ПЭВМ (в ОС реального режима), разобрать понятия CMA, UMA, HMA, EMA, XMA, EMS, XMS, UMB. Исследовать оперативную память компьютера в ОС реального режима с помощью системных утилит MEM, MSD, программ CHECIT, SI и составить сравнительную таблицу показаний этих программ по всем видам памяти ПЭВМ;

3. Изучить  технологию выделения блоков памяти  ОС реального режима при загрузке и выполнении программ и исследовать ( с помощью отладчика или написанного собственноручно модуля)  цепочку MCB в памяти ПЭВМ.


Алгоритм работы программы

Для просмотра распределения памяти необходимо открыть отладчик TD.EXE и напечатать команду mov ah,52h

int   21 h

После этого переходим в окно данных и переходим в ES:BX, поднимаемся на 2 байта назад. Там храниться информация о первом адресе. Следующий адрес  вычисляется сложением первого адреса, 1 параграфа и размера.


Чтение блоков памяти MCB

Запускаем Turbo Debugger и выполняем следующие команды:

mov     ah, 52h

int       21h

и переходим в окне дампа по адресу ES:BX (см. рис. 1.).

Рис. 1.

Отнимем 2 байта и получим адрес  0C 02 - адрес 1-го блока памяти (см. рис. 2.).

Рис. 2.

Перейдем по адресу 020Ch:0000h (см. рис. 3.).

Рис. 3.

Чтобы перейти на следующий блок, необходимо к смещению 1-го блока прибавить 1 и размер (4 и 5 байты): 020С + 1 + 0529 = 0736. 0736 – адрес 2-го блока (см. рис. 4.).

Рис. 4.

Адрес 3-го блока равен: 0736 + 1 + 00B5 = 07EC (см. рис. 5.).  

Рис. 5.

Адрес 4-го блока равен: 07EC + 1 + 0007 = 07F4 (см. рис. 6.). 

Рис. 6.

Адрес 5-го блока равен: 07F4 + 1 + 0042 = 0837 (см. рис. 7.). 

Рис. 7.

Адрес 6-го блока равен: 0837 + 1 + 0034 = 086C (см. рис. 8.). 

Рис. 8.

Адрес 7-го блока равен: 086C + 1 + 001D = 088A (см. рис. 9.). 

Рис. 9.

Адрес 8-го блока равен: 088A + 1 + 00A7 = 0932 (см. рис. 10.). 

Рис. 10.

Адрес 9-го блока равен: 0932 + 1 + 087A = 11AD (см. рис. 11.). 

Рис. 11.

Адрес 10-го блока равен: 11AD + 1 + 0008 = 11B6 (см. рис. 12.). 

Рис. 12.

Адрес 11-го блока равен: 11B6 + 1 + 0035 = 11EC (см. рис. 13.). 

Рис. 13.

Адрес 12-го блока равен: 11EC + 1 + 017D = 0136A (см. рис. 14.). 

Рис. 14.

Адрес 13-го блока равен: 136A + 1 + 4700 = 5A6B (см. рис. 15.). 

Рис. 15.

Адрес 14-го блока равен: 5A6B + 1 + 1000 = 6A6C (см. рис. 16.). 

Рис. 16.

Последний блок.


Структура ОЗУ памяти ПЭВМ

Утилита mem.exe(см. рис. 17.).

Рис. 17.

Sysinfo.exe(см. рис. 18.).

Рис .18.

Chekit(см. рис. 19.).

Рис .19.

Размер памяти в Кб

Программа

CMA

UMA

HMA

XMA

EMS

XMS

MEM

638К

0

64К

30656

30976К

30656К

MSD

638К

0

64К

31744К

30976К

5552К

SI

638К

0

64К

31744К

30976К

31744К

CHECIT

640К

0

64К

31744К

30976К

31744К

Программа, читающая CMOS память

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define byte unsigned char

char *d[7] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг",

"Пятница", "Суббота"};

char *m[12] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня",

"Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"};

char *yn[2] = {"Да", "Нет"};

int fb(int x)

{ return (int)(x%16+x/16*10); }

int cb(int b, int bit, int kol)

{ int i, sbit = 0;

int m[8]={1, 2, 4, 8, 16, 32, 64, 128};

for (i = bit; i<(bit+kol); i++)

sbit += m[i];

return (b&sbit)>>bit;

}

void main()

{byte cs[64];

int i, j;

for (i = 0; i<64; i++)

{ outp(0x70, i);

cs[i] = inp(0x71);

}

//---------clrscr();

cout<<"Лабораторная работа №2: Сведения CMOS"<<endl;

cout<<"Часы реального времени (00h-0Dh):"<<endl;

printf("Время: %d:%d:%d\n", fb(cs[4]), fb(cs[2]), fb(cs[0]));

printf("Дата: %s %d %s %d года\n", d[fb(cs[6])-1], fb(cs[7]), m[fb(cs[8])-1],         fb(cs[0x32])*100+fb(cs[9]));

printf("Жесткий диск есть: %s\n", yn[1-cb(cs[0x0E], 3, 1)]);

printf("Бартарея CMOS исправна: %s\n", yn[cb(cs[0x0E], 7, 1)]);

getch();


Результаты работы программы

Список использованных источников

1.  Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 1. Часть 1, 2, 3. Операционная система MS-DOS. М: ДИАЛОГ-МИФИ, 1991, 1993

2.   Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 2. Аппаратное обеспечение IBM PC. Часть 1, 2. М: ДИАЛОГ-МИФИ, 1992

3.  Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 6. Защищенный режим процессоров Intel 80286/80386/80486. М: ДИАЛОГ-МИФИ, 1993

Похожие материалы

Информация о работе