Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 25

Висновки: В данiй роботi ознайомилися з засобами написання резидентних програм, зокрема була написана резидентна програма управлiння клавiатурою, зокрема при першому натиску " гарячої " комбiнацiї клавiш з вхідного потоку даних iз клавiатури  блокувалася клавiша 1, а при другому натиску " гарячої " комбiнацiї вона

розблоковувалася .


Лабораторна робота № 10

«Заголовки файлів.Таблиця переходів»

Індивідуальне завдання: Написати прогрму котра б виконувала прегляд таблиці заголовка програми, і програмц\у якаб виконівала преглід тиблиці преходів.

Програма, що виконує перегляд таблиці заголовка.

Опис пограми: Програма виконує перегляд власної таблиці завантаження. Адрес розміщення файлу програми програма дістає з командної строчки , потім відкриває його і виконує читання завантажуючи данних в структуру, котра описує таблицю завантаження програми, і виконує форматований вивід на екран монітору.

Текст програми.

#include <dos.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#define byte unsigned char

#define word unsigned int

struct EXEH {

  byte ExeFlag[2]; /* 0x4D5a признак EXE-файла ('MZ') */

  word LastPag;    /* длина неполной последней страницы */

  word PageCnt;    /* длина образа в 512-байтовых стр. */

  word ReloCnt;    /* число элементов в табл.перемещения */

  word HdrSize;    /* длина заголовка в параграфах */

  word MinMem;     /* мин. памяти за концом прогр.*/

  word MaxMem;     /* макс.требуемой памяти */

  word ReloSS;     /* смещение сегмента стека */

  word ExeSP;      /* значение регистра SP при запуске */

  word ChkSum;     /* контрольная сумма */

  word ExeIP;      /* значение регистра IP при запуске */

  word ReloCS;     /* смещение кодового сегмента */

  word TabOff;     /* смещение 1-го эл-та перемещения */

  word Overlay;    /* номер оверлея */

  } exeh;

FILE *file;

#pragma argsused

int main(int argc,char *argv[])

{

  clrscr();

  if ( (!(file = fopen(argv[0],"r"))) )

  {

       printf ("Cann't Open File");

       return -1;

  }

  fread (&exeh,1,sizeof(struct EXEH),file);

  printf("======= Заголовок файла %s =======\n",argv[0]);

  printf("Подпись файла .EXE             = %02X%02X (%c%c)\n",

    exeh.ExeFlag[0],exeh.ExeFlag[1],

    exeh.ExeFlag[0],exeh.ExeFlag[1]);

  printf("Длина последней страницы       = %d\n",

    exeh.LastPag);

  printf("Длина модуля в страницах       = %d\n",

    exeh.PageCnt);

  printf("Число эл-тов в табл.перемещ.   = %d\n",

    exeh.ReloCnt);

  printf("Длина заголовка                = %d\n",

    exeh.HdrSize);

  printf("Минимум памяти                 = %04Xh\n",

    exeh.MinMem);

  printf("Максимум памяти                = %04Xh\n",

    exeh.MaxMem);

  printf("Смещение сегмента стека        = %04Xh\n",

    exeh.ReloSS);

  printf("Значение регистра SP           = %04Xh\n",

    exeh.ExeSP);

  printf("Контрольная сумма              = %d\n",

    exeh.ChkSum);

  printf("Значение регистра IP           = %04Xh\n",

    exeh.ExeIP);

  printf("Смещение кодового сегмента     = %04Xh\n",

    exeh.ReloCS);

  printf("Смещение 1-го элемента таблицы = %04Xh\n",

    exeh.TabOff);

  printf("Номер оверлея                  = %d\n",

    exeh.Overlay);

  getch();

  return 0;

}

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

======= Заголовок файла D:\TEMP\PRM1.EXE =======

Подпись файла .EXE             = 4D5A (MZ)

Длина последней страницы       = 64

Длина модуля в страницах       = 35

Число эл-тов в табл.перемещ.   = 239

Длина заголовка                = 96

Минимум памяти                 = 0000h

Максимум памяти                = FFFFh

Смещение сегмента стека        = 03DCh

Значение регистра SP           = 0080h

Контрольная сумма              = 0

Значение регистра IP           = 0000h

Смещение кодового сегмента     = 0000h

Смещение 1-го элемента таблицы = 003Eh

Номер оверлея                  = 0

Програма, котра читає таблицю переміщень.