Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Текст программы. /*-----Лабораторная работа N10-----------------*/





/*-----Лабораторная работа N10-----------------*/

/*------"Управление программами"----------------*/

/* Подключение стандартных заголовков */

#include <dos.h>

#include <conio.h>

/* Типы данных */

#define byte unsigned char

#define word unsigned int

 

/* Описание функций */

void get_DOS_version_h(void); /* Определение версии DOS */

void addr_PSP (void); /* Получение адреса PSP */

 

struct psp

{ /* ФОРМАТ PSP */

byte ret_op[2]; /* команда INT 20h */

word end_of_mem; /* вершина доступной памяти */

byte reserved1;

byte old_call_dos[5]; /* старый вызов DOS */

void *term_ptr; /* адрес завершения */

void *ctrlbrk_ptr; /* адрес обработчика Ctrl+Break */

void *criterr_ptr; /* адрес обработчика крит.ошибок */

word father_psp; /* PID родителя */

byte JFT[20]; /* таблица файлов программы */

word env_seg; /* адрес окружения */

void *stack_ptr; /* адрес стека */

word JFT_size; /* размер таблицы файлов */

byte *JFT_ptr; /* адрес таблицы файлов */

byte reserved2[24];

byte new_call_dos[3]; /* новый вызов DOS */

} *p_psp;

 

word pid; /* сегм.адрес PSP */

int dos_ver, /* версия DOS */

i, l, j;

char *s;

union REGS rr;

 

main()

{

textbackground(0);

clrscr();

textattr(0x0a);

cprintf("---------------");

cprintf(" Лабораторная работа N10 ");

cprintf("---------------");

cprintf("---------------");

cprintf(" Управление программами ");

cprintf("---------------");

textcolor(11);

get_DOS_version_h();

addr_PSP();

/* распечатка PSP */

cprintf("\n\n Адрес PID = %04X\n\n\r",pid);

p_psp=(struct psp *)MK_FP(pid,0);

textcolor(10);

cprintf("Команды:\n\r");

cprintf("--------\n\r");

textcolor(14);

cprintf(" Завершение — int 20h:");

textcolor(12);

cprintf(" %02X %02X\n\r",p_psp->ret_op[0],p_psp->ret_op[1]);

textcolor(14);

cprintf(" Старый вызов DOS: ");

textcolor(12);

for (i=0;i<5;cprintf("%02X ",p_psp->old_call_dos[i++]));

textcolor(14);

cprintf("\n\r Новый вызов DOS: ");

textcolor(12);

for(i=0;i<3;cprintf("%02X ",p_psp->new_call_dos[i++]));

textcolor(10);

cprintf("\n\n\rАдреса:\n\r");

cprintf("-------\n\r");

textcolor(14);

cprintf(" Конец памяти: ");

textcolor(12);

cprintf("%04X:0000\n\r",p_psp->end_of_mem);

textcolor(14);

cprintf(" Обработчик завершения: ");

textcolor(12);

cprintf("%Fp\n\r",p_psp->term_ptr);

textcolor(14);

cprintf(" Обработчик Ctrl+Break: ");

textcolor(12);

cprintf("%Fp\n\r",p_psp->ctrlbrk_ptr);

textcolor(14);

cprintf(" Обработчик критич.ошибки: ");

textcolor(12);

cprintf("%Fp\n\r",p_psp->criterr_ptr);

textcolor(14);

cprintf(" Стек: ");

textcolor(12);

cprintf("%Fp\n\n\r",p_psp->stack_ptr);

textcolor(14);

cprintf("\n\rРодитель: ");

textcolor(12);

cprintf("%04X ",p_psp->father_psp);

textcolor(0x8b);

cprintf("\n\n\rНажмите любую клавишу...\n\r\7");

getch();

clrscr();

textattr(0x0a);

cprintf("---------------");

cprintf(" Лабораторная работа N10 ");

cprintf("---------------");

cprintf("---------------");

cprintf(" Управление программами ");

cprintf("---------------");

/* Распечатка таблицы файлов */

s=p_psp->JFT_ptr;

textcolor(10);

cprintf("\n\n\rТаблица файлов: ");

textcolor(12);

cprintf("%Fp (%d) ",s,p_psp->JFT_size);

textcolor(11);

if (s==(byte *)p_psp+0x18)

cprintf(" — в этом же PSP");

cprintf("\n\r");

for (i=0; ++i<=p_psp->JFT_size; cprintf("%d ",*(s++)));

textcolor(10);

cprintf("\n\n\rОкружение DOS: ");

textcolor(12);

cprintf("%04X\n\r",p_psp->env_seg);

s=(char *)MK_FP(p_psp->env_seg,0);

textcolor(11);

while(l=strlen(s))

{

cprintf(" %s\n\r",s);

s+=l+1;

 

}

if (dos_ver>2)

{

/* для DOS 3.0 и дальше можно получить строку вызова */

s++;

l=*((int *)s);

textcolor(10);

cprintf("\n\rЧисло строк вызова: ");

textcolor(12);

cprintf("%d\n\r",l);


s+=2;

textcolor(11);

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

{

cprintf("%s\n\r",s);

s+=strlen(s)+1;

}

}

textattr(0x8b);

cprintf("\n\n\n\n\rНажмите любую клавишу...\7");

textattr(0x07);

cprintf("\n\r");

getch();

clrscr();

}

 

/* Определение версии DOS */

void get_DOS_version_h(void)

{

rr.h.ah=0x30;

intdos(&rr,&rr);

dos_ver=rr.h.al;

}

 

/* Получение адреса PSP */

void addr_PSP (void)

{

rr.h.ah=0x62;

intdos(&rr,&rr);

pid=rr.x.bx;

}

 

 







Date: 2015-05-22; view: 521; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.011 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию