С для профессиональных программистов



         

Раздел инициализации - часть 2


printf("video must be in 80 column text mode");

exit (1);

/* установить соответствующий адрес видеопамяти */

if(vmode==7) vid_mem = (char far *) 0xB0000000;

else vid_mem = (char far *) 0xB8000000;

Наконец, выход из функции main() ocyществляется путем обращения к функции tsr(), приведенной ниже.

/* завершить выполнение, но оставить резидентной */

tsr(size)

unsigned size;

union REGS r;

r.h.ah = 49; /* завершить и оставить резидентной */

r.h.al = 0;  /* код возврата */

r.x.dx = size;

int86(0x21, &r, &r);

Параметр size, определяемый в регистре DX, используется для того, чтобы сообщить DOS, сколько памяти требуется для размещения ТSR-программы. Размер памяти определяется в 16-байтных параграфах. Иногда бывает трудно определить, сколько памяти необходимо для размещения программы. И если в этом случае вы разделите размер загрузочного модуля вашей программы (файла с расширением .EXE) на 16, а полученную величину умножите на 2, то будете застрахованы от ошибки. Точно определить размер необходимой памяти трудно, поскольку загрузочные модули частично накладываются друг на друга при загрузке и необязательно размещаются в непрерывной области. (Если вы намереватесь продавать свои программы, то наверняка хотели бы знать точно, сколько потребуется памяти, чтобы не оказаться слишком расточительным. Наиболее просто это можно определить экспериментальным путем). Код возврата, устанавливаемый в регистре AL, передается системе.

После завершения выполнения функции маin() программа остается в памяти, и никакая другая программа не может быть загружена на ее место. Это значит, что прикладная часть программы в любой момент времени готова быть запущенной нажатием клавиши PT SCR.




Содержание  Назад  Вперед