Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |