Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные среды АСОИУ / L05
.TXT я22.3. ЏаЁ¬Ґал ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ў п§лЄҐ ‘Ё Ё
я2ў § йЁйҐ®¬ ०Ё¬Ґ Їа®жҐбб®а 80•86
я12.3.1. ЏаЁ¬Ґа ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ў ‘Ё
‚ п§лЄҐ ‘Ё бгйҐбвўгҐв ЇаҐ¤®ЇаҐ¤Ґ«Ґ п бвагЄвга , Ё¬Ґой п
б«Ґ¤го饥 ®ЇЁб ЁҐ.
€¬п вЁЇ jmp_buf. ќв® Ї® бгвЁ ¤Ґ« § ЇЁбм, ўЄ«оз ой п 10 Ї®-
«Ґ© вЁЇ word. €¬Ґ Ї®«Ґ© Ё¬Ґов б«Ґ¤гойЁ© ўЁ¤:
j_sp, j_cs, j_bp, j_si,
j_ss, j_ip, j_di, j_ds.
j_flag, j_es,
—в®Ўл ба §г Їа®ўҐбвЁ Ї а ««Ґ«м б б®Їа®Ја ¬¬ ¬Ё, § ¬ҐвЁ¬, зв®
бвагЄвга Ї®¤®Ў®Ј® вЁЇ ¬®¦Ґв ўлбвгЇЁвм ў Є зҐб⢥ ¤ҐбЄаЁЇв®а
б®Їа®Ја ¬¬л, ЇаЁзҐ¬ ¤ ¦Ґ Ў®«ҐҐ Ёд®а¬ вЁў®Ј®, 祬 в®в, Є®в®ал©
¬л а бᬮв५Ё а ҐҐ.
„«п а Ў®вл б® бвагЄвга®© jmp_buf бгйҐбвўгҐв Ї а дгЄжЁ©,
Ё¬Ґой п б«Ґ¤го饥 ®ЇЁб ЁҐ:
- int setjmp(jmp_buf jmpb) - ЇЁиҐв б®бв®пЁҐ ⥪г饩 § ¤ зЁ
ў ЎгдҐа jmpb Ё ў®§ўа й Ґв 0;
- void longjmp(jmp_buf jmpb, int retval) - ў®ббв ў«Ёў Ґв
б®бв®пЁҐ § ¤ зЁ Ё§ jmpb в Є, зв® § ¤ з Їа®¤®«¦ Ґв бў®Ґ ўлЇ®«Ґ-
ЁҐ б в®© в®зЄЁ, ў Є®в®аго Ўл ® ЇаЁи« , Ґб«Ё Ўл дгЄжЁп setjmp
ўҐаг« Ґ 0, § 票Ґ, а ў®Ґ retval.
ђ бᬮваЁ¬ бвагЄвгаг б®Їа®Ја ¬¬ Ё дгЄжЁЁ Transfer ¤«п ¤ -
®Ј® б«гз п.
void cor1(void) void cor2(void)
{ {
while (1) while (1)
{ {
... ...
swt(jmpc1,jmpc2); swt(jmpc2,jmpc1);
} }
} }
void swt(from, to)
jmp_buf from,to;
{
if (0 == setjmp(from)) //setjmp ЇЁиҐв в Є®Ґ б®бв®пЁҐ ў ЎгдҐа
longjmp(to,1); from, зв® Є®Ј¤ Ўг¤Ґв ўл§®ў longjmp
***** б нвЁ¬ ЎгдҐа®¬, гЇа ў«ҐЁҐ ЇҐаҐ¤ бвбп
} ў в®зЄг *****
я1€ЁжЁ «Ё§ жЁп ЎгдҐа я0 я1( ЇаЁ¬ҐаҐ cor1)
jmp_buf jmpc1;
unsigned stack1[1000];
struct SREGS segs;
segread(&segs);
jmpc1[0].j_sp = FP_OFF(stack1) + 1982;
jmpc1[0].j_ss = FP_SEG(stack1);
jmpc1[0].j_flag = 0x200; {ЇаҐалў Ёп а §аҐиҐл}
jmpc1[0].j_cs = FP_SEG(cor1);
jmpc1[0].j_ip = FP_OFF(cor1);
jmpc1[0].j_bp = jmpc1[0].j_sp;
jmpc1[0].j_di = 0;
jmpc1[0].j_es = segs.es;
jmpc1[0].j_si = 0;
jmpc1[0].j_ds = segs.ds;
”гЄжЁЁ setjmp Ё longjmp ў¬Ґб⥠ᮠбвагЄвга®© jmp_buf пў«п-
овбп з१ўлз ©® 㤮Ўл¬ б।бвў®¬ ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬. ‚®-ЇҐа-
ўле, ¬л Ґ бЇгбЄ Ґ¬бп га®ўҐм бᥬЎ«Ґа , ў®-ўв®але, ўЁ¤Ё¬®,
§ ЇЁбм б®бв®пЁп ॣЁбва®ў ў ЎгдҐа Ё ў®ббв ®ў«ҐЁҐ Ёе Ё§ ЎгдҐа
Їа®Ёб室Ёв ў ०Ё¬Ґ § ЇаҐв ЇаҐалў Ё©, зв® ®ЎҐбЇҐзЁў Ґв ўлб®Єго
¤Ґ¦®бвм ЇҐаҐЄ«озҐЁп § ¤ з.
я12.3.2. ЏаЁ¬Ґа ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ў § йЁйҐ®¬ ०Ё¬Ґ
‡ йЁйҐл© ०Ё¬ Їа®жҐбб®а аеЁвҐЄвг஠ᮧ¤ ¤«п ®аЈ Ё-
§ жЁЁ ¬®Ј®§ ¤ з®бвЁ. “ § йЁйҐ®Ј® ०Ё¬ ¬®Ј® бЇҐЄв®ў, §¤Ґбм
¬л а бᬮваЁ¬ Ё¬Ґ® ў®Їа®бл ᮧ¤ Ёп Ё ЇҐаҐЄ«озҐЁп § ¤ з, Є®в®-
алҐ Ї® бгвЁ ¤Ґ« нЄўЁў «Ґвл 襬㠯®пвЁо б®Їа®Ја ¬¬.
ЏаЁ¬Ґа, Є®в®ал© аҐ «Ё§гҐв ЇҐаҐЄ«о票Ґ § ¤ з ў § йЁйҐ®¬
०Ё¬Ґ, Ї®«®бвмо ЇЁб бᥬЎ«ҐаҐ. џ Ўг¤г ЇаЁў®¤Ёвм §¤Ґбм
в®«мЄ® да Ј¬Ґвл ЇаЁ¬Ґа . …б«Ё Є®¬г-⮠㦥 Ї®«л© ⥪бв ЇаЁ¬Ґ-
а , в® б Ё¬ ¬®¦® в Є¦Ґ ®§ Є®¬Ёвмбп.
„®бвгЇ Є Ї ¬пвЁ ў § йЁйҐ®¬ ०Ё¬Ґ ®бгйҐбвў«пҐвбп Ґ ҐЇ®б-
।б⢥® Ї® ¤аҐбг, зҐаҐ§ бЇҐжЁ «млҐ в Ў«Ёжл - в Ў«Ёжл ¤ҐбЄ-
аЁЇв®а®ў. ‚ в Ў«ЁжҐ ¤ҐбЄаЁЇв®а®ў еа пвбп бва®ЄЁ, ®ЇЁблў ойЁҐ ®в-
¤Ґ«млҐ гз бвЄЁ Ї ¬пвЁ - бва Ёжл, Ґб«Ё а §¬Ґа гз бвЄ Ї®бв®пҐ
Ё Ё§ўҐбвҐ, Ё«Ё ᥣ¬Ґвл, а §¬Ґа Є®в®але ¬®¦Ґв ¬Ґпвмбп.
„«п ®ЇЁб Ёп § ¤ з бгйҐбвўгҐв бвагЄвга , Є®в®а п §лў Ґвбп
"ᥣ¬Ґв б®бв®пЁп § ¤ зЁ" TSS. Ћ Ё¬ҐҐв б«Ґ¤гойЁ© ўЁ¤:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і ‘Ґ«ҐЄв®а LDT і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а DS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а SS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а CS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а ES і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ђҐЈЁбвал AX, BX, CX, DX, SP, BP, SI, DIі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ђҐЈЁбва д« Ј®ў і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і IP і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 2 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 1 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 0 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і “Є § ⥫м б«Ґ¤гойЁ© TSS і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Љ Є ўЁ¤®, нв® ®Їпвм и ¤ҐбЄаЁЇв®а, в®«мЄ® ҐйҐ Ў®«ҐҐ Ёд®а-
¬ вЁўл©, ¤ ¦Ґ Ї® ба ўҐЁо б® бвагЄвга®© jmp_buf Ё§ ‘Ё.
„«п ўлЇ®«ҐЁп Їа®Ја ¬¬л ў § йЁйҐ®¬ ०Ё¬Ґ ᮧ¤ Ґвбп Ј«®-
Ў «м п в Ў«Ёж ¤ҐбЄаЁЇв®а®ў GDT, бва®ЄЁ Є®в®а®© ўЄ«оз ов ¤ҐбЄ-
аЁЇв®ал TSS:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Ґ ЁбЇ®«м§гҐвбп і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ®ЇЁб ЁҐ б ¬®© в Ў«Ёжл ¤ҐбЄаЁЇв®а®ўі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а ᥣ¬Ґв ¤ ле і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а ᥣ¬Ґв б⥪ і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а Є®¤®ў®Ј® ᥣ¬Ґв і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ - main і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ 1 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ 2 і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
‘ва®Є в Ў«Ёжл ¤ҐбЄаЁЇв®а®ў ᮤҐа¦Ёв б«Ґ¤гойЁҐ ¤ лҐ:
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДї
іђ §¬Ґа ᥣ¬Ґв і Ђ¤аҐб ᥣ¬Ґв і ЏаЁ§ Є ᥣ¬Ґв і
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДЩ
‚ Їа®Ја ¬¬г, ॠ«Ё§гойго ЇҐаҐЄ«о票Ґ § ¤ з ў § йЁйҐ®¬ аҐ-
¦Ё¬Ґ, ўў®¤пвбп:
- ᥫҐЄв®ал § ¤ з TASK1_SEL, TASK2_SEL, MAIN_TSK - ᬥ饨п
ᮮ⢥вбвўгойЁе ¤ҐбЄаЁЇв®а®ў ў в Ў«ЁжҐ GDT;
- ўл¤Ґ«пҐвбп Ї ¬пвм Ї®¤ б⥪Ё, ЇаЁ¬Ґа в Є,
tsk1_stack db 1024d (0);
- ЁЁжЁ «Ё§ЁагҐвбп в Ў«Ёж ¤ҐбЄаЁЇв®а®ў GDT - в.Ґ. Є®а४в®
§ Ї®«повбп ўбҐ ҐҐ бва®ЄЁ;
- ЁЁжЁ «Ё§Ёаговбп ᥣ¬Ґвл б®бв®пЁп § ¤ з, ЇаЁ¬Ґа,
ў Ї®«Ґ ip ЇЁиҐвбп OFFSET €¬п Їа®жҐ¤гал-§ ¤ зЁ;
ў Ї®«Ґ sp ЇЁиҐвбп OFFSET tsk1_stack + Size_Of_Stack;
- ў ॣЁбва GDTR Јаг§Ёвбп ¤аҐб в Ў«Ёжл ¤ҐбЄаЁЇв®а®ў GDT;
- ў ॣЁбва § ¤ з TR Јаг§Ёвбп ᥫҐЄв®а § ¤ зЁ - MAIN_TSK.
’ ЄЁ¬ ®Ўа §®¬ Їа®Ёб室Ёв ўлЇ®«ҐЁҐ § ¤ зЁ Main.
ЏҐаҐЄ«о票Ґ ¤агЈго § ¤ зг Їа®Ё§ў®¤Ёвбп ЁбвагЄжЁҐ© jmp,
ЇаЁ¬Ґа, jmp TASK1_SEL.
Џ® нв®© ЁбвагЄжЁЁ ¬ иЁ ўЁ¤Ёв Ї® ЇаЁ§ Єг ᥣ¬Ґв , зв®
ᥫҐЄв®а гЄ §лў Ґв ¤ҐбЄаЁЇв®а § ¤ зЁ.
Џ® ᥫҐЄв®аг MAIN_TSK, 室п饬гбп ў ॣЁбвॠ§ ¤ з TR, зҐ-
१ ¤ҐбЄаЁЇв®а § ¤ зЁ main, 室Ёвбп ᥣ¬Ґв б®бв®пЁп § ¤ зЁ
main Ё ў ҐЈ® бЇЁблў Ґвбп б®бв®пЁҐ ¬ иЁл ў ᮮ⢥вбвўЁҐ б®
бвагЄвга®© ᥣ¬Ґв .
‘Ґ«ҐЄв®а ®ў®© § ¤ зЁ TASK1_SEL Јаг§Ёвбп ў ॣЁбва § ¤ з TR,
Ї® ᥫҐЄв®аг в Є¦Ґ зҐаҐ§ ¤ҐбЄаЁЇв®а 室Ёвбп ᥣ¬Ґв б®бв®пЁп
§ ¤ зЁ 1, Ё Ё§ нв®Ј® ᥣ¬Ґв гбв ў«Ёў Ґвбп ®ў®Ґ б®бв®пЁҐ ¬ -
иЁл.
‚ § Є«о票Ё ЇаҐ¤бв ўЁ¬ б奬㠯ҐаҐЄ«озҐЁп § ¤ з ў § йЁйҐ-
®¬ ०Ё¬Ґ, Ё§ беҐ¬л ўЁ¤ «®ЈЁп б а ҐҐ а бᬮваҐл¬Ё б®Ї-
а®Ја ¬¬ ¬Ё. …б«Ё ў ‘Ё ¤«п ЇҐаҐЄ«озҐЁп § ¤ з Ї®вॡ®ў «®бм ЇЁ-
б вм дгЄжЁо, в® ў § йЁйҐ®¬ ०Ё¬Ґ ЇҐаҐЄ«о票Ґ § ¤ з ®бгйҐбв-
ў«пҐвбп ®¤®© ЁбвагЄжЁҐ© бᥬЎ«Ґа .
ЪДДДДї ЪДДДДї Ъ>ВДДДДДДДї ЪДДД>ЪДДДДДДДї
іGDTRі і TR і і і TSS 1 і і і TSS 2 і
АДДВДЩ АДДВДЩ і і і і і і
ЪДЕДДДДДДДДДДДДДДДДДДДЩ і і і і і і
і АДДДДДДДДД>ВДДДДДДДДДДДДДДї і АДДДДДДДЩ і АДДДДДДДЩ
і ГДДДДДДДДДДДДДДґ і і
ГДTASK1_SELД>ґ „ҐбЄаЁЇв®а T1ГДЩ і Ъ>ВДДДДДДДї
і ГДДДДДДДДДДДДДДґ і і і TSS і
ГДTASK2_SELД>ґ „ҐбЄаЁЇв®а T2ГДДДДДДДДДДДДДДЩ і і main і
і ГДДДДДДДДДДДДДДґ і і і
АДMAIN_TSKДД>ґ „ҐбЄа. main ГДДДДДДДДДДДДДДДДДЩ АДДДДДДДЩ
ГДДДДДДДДДДДДДДґ
АДДДДДДДДДДДДДДЩ
ЪДДДДДДДДДДДДДї ЪД>ВДДДДДДДДДДДДДї ЪДДД>ВДДДДДДДДДДДДДї
і Task main і і і TASK 1 і і і TASK 2 і
і і і і ... і і і ... і
і ... і і іjmp TASK2_SELГДДДЩ ЪДДґjmp TASK1_SELі
іjmp TASK1_SELГДДДЩ і ... і<ДДДДЩЪ>ґ ... і
і ... Г<ДДї і і і і і
і exit і і іjmp TASK2_SELГДДДДДДЩ іjmp MAIN_TSK Гї
АДДДДДДДДДДДДДЩ і АДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДЩі
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ќв Їл ᮧ¤ Ёп § ¤ з-б®Їа®Ја ¬¬ ў® ўбҐе ваҐе ЇаЁ¬Ґа е ®¤Ё Ё
⥠¦Ґ. ќв®:
- ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ б⥪Ё (б⥪ ¤«п main ўл¤Ґ«пвм Ґ -
¤®);
- ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ ¤ҐбЄаЁЇв®ал (ў ⮬ зЁб«Ґ Ё ¤«п main);
- Ґ®Ўе®¤Ё¬л¬ ®Ўа §®¬ ўлЇ®«Ґ п ЁЁжЁ «Ё§ жЁп б⥪®ў;
- Ґ®Ўе®¤Ё¬л¬ ®Ўа §®¬ ўлЇ®«ҐЁҐ ЁЁжЁ «Ё§ жЁЁ ¤ҐбЄаЁЇв®а®ў;
- ЇҐаҐе®¤ Ё§ § ¤ зЁ main ў ®¤г Ё§ б®Їа®Ја ¬¬;
- ЇҐаҐЄ«о票Ґ б®Їа®Ја ¬¬ Ї® вॡ㥬®¬г «Ј®аЁв¬г;
- ў®§ўа 饨Ґ ў § ¤ зг main.
я2ў § йЁйҐ®¬ ०Ё¬Ґ Їа®жҐбб®а 80•86
я12.3.1. ЏаЁ¬Ґа ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ў ‘Ё
‚ п§лЄҐ ‘Ё бгйҐбвўгҐв ЇаҐ¤®ЇаҐ¤Ґ«Ґ п бвагЄвга , Ё¬Ґой п
б«Ґ¤го饥 ®ЇЁб ЁҐ.
€¬п вЁЇ jmp_buf. ќв® Ї® бгвЁ ¤Ґ« § ЇЁбм, ўЄ«оз ой п 10 Ї®-
«Ґ© вЁЇ word. €¬Ґ Ї®«Ґ© Ё¬Ґов б«Ґ¤гойЁ© ўЁ¤:
j_sp, j_cs, j_bp, j_si,
j_ss, j_ip, j_di, j_ds.
j_flag, j_es,
—в®Ўл ба §г Їа®ўҐбвЁ Ї а ««Ґ«м б б®Їа®Ја ¬¬ ¬Ё, § ¬ҐвЁ¬, зв®
бвагЄвга Ї®¤®Ў®Ј® вЁЇ ¬®¦Ґв ўлбвгЇЁвм ў Є зҐб⢥ ¤ҐбЄаЁЇв®а
б®Їа®Ја ¬¬л, ЇаЁзҐ¬ ¤ ¦Ґ Ў®«ҐҐ Ёд®а¬ вЁў®Ј®, 祬 в®в, Є®в®ал©
¬л а бᬮв५Ё а ҐҐ.
„«п а Ў®вл б® бвагЄвга®© jmp_buf бгйҐбвўгҐв Ї а дгЄжЁ©,
Ё¬Ґой п б«Ґ¤го饥 ®ЇЁб ЁҐ:
- int setjmp(jmp_buf jmpb) - ЇЁиҐв б®бв®пЁҐ ⥪г饩 § ¤ зЁ
ў ЎгдҐа jmpb Ё ў®§ўа й Ґв 0;
- void longjmp(jmp_buf jmpb, int retval) - ў®ббв ў«Ёў Ґв
б®бв®пЁҐ § ¤ зЁ Ё§ jmpb в Є, зв® § ¤ з Їа®¤®«¦ Ґв бў®Ґ ўлЇ®«Ґ-
ЁҐ б в®© в®зЄЁ, ў Є®в®аго Ўл ® ЇаЁи« , Ґб«Ё Ўл дгЄжЁп setjmp
ўҐаг« Ґ 0, § 票Ґ, а ў®Ґ retval.
ђ бᬮваЁ¬ бвагЄвгаг б®Їа®Ја ¬¬ Ё дгЄжЁЁ Transfer ¤«п ¤ -
®Ј® б«гз п.
void cor1(void) void cor2(void)
{ {
while (1) while (1)
{ {
... ...
swt(jmpc1,jmpc2); swt(jmpc2,jmpc1);
} }
} }
void swt(from, to)
jmp_buf from,to;
{
if (0 == setjmp(from)) //setjmp ЇЁиҐв в Є®Ґ б®бв®пЁҐ ў ЎгдҐа
longjmp(to,1); from, зв® Є®Ј¤ Ўг¤Ґв ўл§®ў longjmp
***** б нвЁ¬ ЎгдҐа®¬, гЇа ў«ҐЁҐ ЇҐаҐ¤ бвбп
} ў в®зЄг *****
я1€ЁжЁ «Ё§ жЁп ЎгдҐа я0 я1( ЇаЁ¬ҐаҐ cor1)
jmp_buf jmpc1;
unsigned stack1[1000];
struct SREGS segs;
segread(&segs);
jmpc1[0].j_sp = FP_OFF(stack1) + 1982;
jmpc1[0].j_ss = FP_SEG(stack1);
jmpc1[0].j_flag = 0x200; {ЇаҐалў Ёп а §аҐиҐл}
jmpc1[0].j_cs = FP_SEG(cor1);
jmpc1[0].j_ip = FP_OFF(cor1);
jmpc1[0].j_bp = jmpc1[0].j_sp;
jmpc1[0].j_di = 0;
jmpc1[0].j_es = segs.es;
jmpc1[0].j_si = 0;
jmpc1[0].j_ds = segs.ds;
”гЄжЁЁ setjmp Ё longjmp ў¬Ґб⥠ᮠбвагЄвга®© jmp_buf пў«п-
овбп з१ўлз ©® 㤮Ўл¬ б।бвў®¬ ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬. ‚®-ЇҐа-
ўле, ¬л Ґ бЇгбЄ Ґ¬бп га®ўҐм бᥬЎ«Ґа , ў®-ўв®але, ўЁ¤Ё¬®,
§ ЇЁбм б®бв®пЁп ॣЁбва®ў ў ЎгдҐа Ё ў®ббв ®ў«ҐЁҐ Ёе Ё§ ЎгдҐа
Їа®Ёб室Ёв ў ०Ё¬Ґ § ЇаҐв ЇаҐалў Ё©, зв® ®ЎҐбЇҐзЁў Ґв ўлб®Єго
¤Ґ¦®бвм ЇҐаҐЄ«озҐЁп § ¤ з.
я12.3.2. ЏаЁ¬Ґа ॠ«Ё§ жЁЁ б®Їа®Ја ¬¬ ў § йЁйҐ®¬ ०Ё¬Ґ
‡ йЁйҐл© ०Ё¬ Їа®жҐбб®а аеЁвҐЄвг஠ᮧ¤ ¤«п ®аЈ Ё-
§ жЁЁ ¬®Ј®§ ¤ з®бвЁ. “ § йЁйҐ®Ј® ०Ё¬ ¬®Ј® бЇҐЄв®ў, §¤Ґбм
¬л а бᬮваЁ¬ Ё¬Ґ® ў®Їа®бл ᮧ¤ Ёп Ё ЇҐаҐЄ«озҐЁп § ¤ з, Є®в®-
алҐ Ї® бгвЁ ¤Ґ« нЄўЁў «Ґвл 襬㠯®пвЁо б®Їа®Ја ¬¬.
ЏаЁ¬Ґа, Є®в®ал© аҐ «Ё§гҐв ЇҐаҐЄ«о票Ґ § ¤ з ў § йЁйҐ®¬
०Ё¬Ґ, Ї®«®бвмо ЇЁб бᥬЎ«ҐаҐ. џ Ўг¤г ЇаЁў®¤Ёвм §¤Ґбм
в®«мЄ® да Ј¬Ґвл ЇаЁ¬Ґа . …б«Ё Є®¬г-⮠㦥 Ї®«л© ⥪бв ЇаЁ¬Ґ-
а , в® б Ё¬ ¬®¦® в Є¦Ґ ®§ Є®¬Ёвмбп.
„®бвгЇ Є Ї ¬пвЁ ў § йЁйҐ®¬ ०Ё¬Ґ ®бгйҐбвў«пҐвбп Ґ ҐЇ®б-
।б⢥® Ї® ¤аҐбг, зҐаҐ§ бЇҐжЁ «млҐ в Ў«Ёжл - в Ў«Ёжл ¤ҐбЄ-
аЁЇв®а®ў. ‚ в Ў«ЁжҐ ¤ҐбЄаЁЇв®а®ў еа пвбп бва®ЄЁ, ®ЇЁблў ойЁҐ ®в-
¤Ґ«млҐ гз бвЄЁ Ї ¬пвЁ - бва Ёжл, Ґб«Ё а §¬Ґа гз бвЄ Ї®бв®пҐ
Ё Ё§ўҐбвҐ, Ё«Ё ᥣ¬Ґвл, а §¬Ґа Є®в®але ¬®¦Ґв ¬Ґпвмбп.
„«п ®ЇЁб Ёп § ¤ з бгйҐбвўгҐв бвагЄвга , Є®в®а п §лў Ґвбп
"ᥣ¬Ґв б®бв®пЁп § ¤ зЁ" TSS. Ћ Ё¬ҐҐв б«Ґ¤гойЁ© ўЁ¤:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і ‘Ґ«ҐЄв®а LDT і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а DS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а SS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а CS і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ‘Ґ«ҐЄв®а ES і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ђҐЈЁбвал AX, BX, CX, DX, SP, BP, SI, DIі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ђҐЈЁбва д« Ј®ў і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і IP і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 2 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 1 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SS, SP ¤«п га®ўп ЇаЁўЁ«ҐЈЁ© 0 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і “Є § ⥫м б«Ґ¤гойЁ© TSS і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Љ Є ўЁ¤®, нв® ®Їпвм и ¤ҐбЄаЁЇв®а, в®«мЄ® ҐйҐ Ў®«ҐҐ Ёд®а-
¬ вЁўл©, ¤ ¦Ґ Ї® ба ўҐЁо б® бвагЄвга®© jmp_buf Ё§ ‘Ё.
„«п ўлЇ®«ҐЁп Їа®Ја ¬¬л ў § йЁйҐ®¬ ०Ё¬Ґ ᮧ¤ Ґвбп Ј«®-
Ў «м п в Ў«Ёж ¤ҐбЄаЁЇв®а®ў GDT, бва®ЄЁ Є®в®а®© ўЄ«оз ов ¤ҐбЄ-
аЁЇв®ал TSS:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Ґ ЁбЇ®«м§гҐвбп і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ®ЇЁб ЁҐ б ¬®© в Ў«Ёжл ¤ҐбЄаЁЇв®а®ўі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а ᥣ¬Ґв ¤ ле і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а ᥣ¬Ґв б⥪ і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а Є®¤®ў®Ј® ᥣ¬Ґв і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ - main і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ 1 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ¤ҐбЄаЁЇв®а § ¤ зЁ 2 і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
‘ва®Є в Ў«Ёжл ¤ҐбЄаЁЇв®а®ў ᮤҐа¦Ёв б«Ґ¤гойЁҐ ¤ лҐ:
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДї
іђ §¬Ґа ᥣ¬Ґв і Ђ¤аҐб ᥣ¬Ґв і ЏаЁ§ Є ᥣ¬Ґв і
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДЩ
‚ Їа®Ја ¬¬г, ॠ«Ё§гойго ЇҐаҐЄ«о票Ґ § ¤ з ў § йЁйҐ®¬ аҐ-
¦Ё¬Ґ, ўў®¤пвбп:
- ᥫҐЄв®ал § ¤ з TASK1_SEL, TASK2_SEL, MAIN_TSK - ᬥ饨п
ᮮ⢥вбвўгойЁе ¤ҐбЄаЁЇв®а®ў ў в Ў«ЁжҐ GDT;
- ўл¤Ґ«пҐвбп Ї ¬пвм Ї®¤ б⥪Ё, ЇаЁ¬Ґа в Є,
tsk1_stack db 1024d (0);
- ЁЁжЁ «Ё§ЁагҐвбп в Ў«Ёж ¤ҐбЄаЁЇв®а®ў GDT - в.Ґ. Є®а४в®
§ Ї®«повбп ўбҐ ҐҐ бва®ЄЁ;
- ЁЁжЁ «Ё§Ёаговбп ᥣ¬Ґвл б®бв®пЁп § ¤ з, ЇаЁ¬Ґа,
ў Ї®«Ґ ip ЇЁиҐвбп OFFSET €¬п Їа®жҐ¤гал-§ ¤ зЁ;
ў Ї®«Ґ sp ЇЁиҐвбп OFFSET tsk1_stack + Size_Of_Stack;
- ў ॣЁбва GDTR Јаг§Ёвбп ¤аҐб в Ў«Ёжл ¤ҐбЄаЁЇв®а®ў GDT;
- ў ॣЁбва § ¤ з TR Јаг§Ёвбп ᥫҐЄв®а § ¤ зЁ - MAIN_TSK.
’ ЄЁ¬ ®Ўа §®¬ Їа®Ёб室Ёв ўлЇ®«ҐЁҐ § ¤ зЁ Main.
ЏҐаҐЄ«о票Ґ ¤агЈго § ¤ зг Їа®Ё§ў®¤Ёвбп ЁбвагЄжЁҐ© jmp,
ЇаЁ¬Ґа, jmp TASK1_SEL.
Џ® нв®© ЁбвагЄжЁЁ ¬ иЁ ўЁ¤Ёв Ї® ЇаЁ§ Єг ᥣ¬Ґв , зв®
ᥫҐЄв®а гЄ §лў Ґв ¤ҐбЄаЁЇв®а § ¤ зЁ.
Џ® ᥫҐЄв®аг MAIN_TSK, 室п饬гбп ў ॣЁбвॠ§ ¤ з TR, зҐ-
१ ¤ҐбЄаЁЇв®а § ¤ зЁ main, 室Ёвбп ᥣ¬Ґв б®бв®пЁп § ¤ зЁ
main Ё ў ҐЈ® бЇЁблў Ґвбп б®бв®пЁҐ ¬ иЁл ў ᮮ⢥вбвўЁҐ б®
бвагЄвга®© ᥣ¬Ґв .
‘Ґ«ҐЄв®а ®ў®© § ¤ зЁ TASK1_SEL Јаг§Ёвбп ў ॣЁбва § ¤ з TR,
Ї® ᥫҐЄв®аг в Є¦Ґ зҐаҐ§ ¤ҐбЄаЁЇв®а 室Ёвбп ᥣ¬Ґв б®бв®пЁп
§ ¤ зЁ 1, Ё Ё§ нв®Ј® ᥣ¬Ґв гбв ў«Ёў Ґвбп ®ў®Ґ б®бв®пЁҐ ¬ -
иЁл.
‚ § Є«о票Ё ЇаҐ¤бв ўЁ¬ б奬㠯ҐаҐЄ«озҐЁп § ¤ з ў § йЁйҐ-
®¬ ०Ё¬Ґ, Ё§ беҐ¬л ўЁ¤ «®ЈЁп б а ҐҐ а бᬮваҐл¬Ё б®Ї-
а®Ја ¬¬ ¬Ё. …б«Ё ў ‘Ё ¤«п ЇҐаҐЄ«озҐЁп § ¤ з Ї®вॡ®ў «®бм ЇЁ-
б вм дгЄжЁо, в® ў § йЁйҐ®¬ ०Ё¬Ґ ЇҐаҐЄ«о票Ґ § ¤ з ®бгйҐбв-
ў«пҐвбп ®¤®© ЁбвагЄжЁҐ© бᥬЎ«Ґа .
ЪДДДДї ЪДДДДї Ъ>ВДДДДДДДї ЪДДД>ЪДДДДДДДї
іGDTRі і TR і і і TSS 1 і і і TSS 2 і
АДДВДЩ АДДВДЩ і і і і і і
ЪДЕДДДДДДДДДДДДДДДДДДДЩ і і і і і і
і АДДДДДДДДД>ВДДДДДДДДДДДДДДї і АДДДДДДДЩ і АДДДДДДДЩ
і ГДДДДДДДДДДДДДДґ і і
ГДTASK1_SELД>ґ „ҐбЄаЁЇв®а T1ГДЩ і Ъ>ВДДДДДДДї
і ГДДДДДДДДДДДДДДґ і і і TSS і
ГДTASK2_SELД>ґ „ҐбЄаЁЇв®а T2ГДДДДДДДДДДДДДДЩ і і main і
і ГДДДДДДДДДДДДДДґ і і і
АДMAIN_TSKДД>ґ „ҐбЄа. main ГДДДДДДДДДДДДДДДДДЩ АДДДДДДДЩ
ГДДДДДДДДДДДДДДґ
АДДДДДДДДДДДДДДЩ
ЪДДДДДДДДДДДДДї ЪД>ВДДДДДДДДДДДДДї ЪДДД>ВДДДДДДДДДДДДДї
і Task main і і і TASK 1 і і і TASK 2 і
і і і і ... і і і ... і
і ... і і іjmp TASK2_SELГДДДЩ ЪДДґjmp TASK1_SELі
іjmp TASK1_SELГДДДЩ і ... і<ДДДДЩЪ>ґ ... і
і ... Г<ДДї і і і і і
і exit і і іjmp TASK2_SELГДДДДДДЩ іjmp MAIN_TSK Гї
АДДДДДДДДДДДДДЩ і АДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДЩі
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ќв Їл ᮧ¤ Ёп § ¤ з-б®Їа®Ја ¬¬ ў® ўбҐе ваҐе ЇаЁ¬Ґа е ®¤Ё Ё
⥠¦Ґ. ќв®:
- ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ б⥪Ё (б⥪ ¤«п main ўл¤Ґ«пвм Ґ -
¤®);
- ўл¤Ґ«ҐЁҐ Ї ¬пвЁ Ї®¤ ¤ҐбЄаЁЇв®ал (ў ⮬ зЁб«Ґ Ё ¤«п main);
- Ґ®Ўе®¤Ё¬л¬ ®Ўа §®¬ ўлЇ®«Ґ п ЁЁжЁ «Ё§ жЁп б⥪®ў;
- Ґ®Ўе®¤Ё¬л¬ ®Ўа §®¬ ўлЇ®«ҐЁҐ ЁЁжЁ «Ё§ жЁЁ ¤ҐбЄаЁЇв®а®ў;
- ЇҐаҐе®¤ Ё§ § ¤ зЁ main ў ®¤г Ё§ б®Їа®Ја ¬¬;
- ЇҐаҐЄ«о票Ґ б®Їа®Ја ¬¬ Ї® вॡ㥬®¬г «Ј®аЁв¬г;
- ў®§ўа 饨Ґ ў § ¤ зг main.
Соседние файлы в папке Операционные среды АСОИУ