Mickey_from_nsk
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору wInuX Цитата: Но. у меня есть нехорошее предчувствие что SSreg и SPreg это реальные регисты SS и SP. | Похоже на то, тогда становится ясным смещение +2 Вощем, если я правильно понял, то конструкция Код: with proc^ do begin SSreg := seg(ar^); SPreg := off(ar^)+ 2000-16; memW(SSreg:SPreg+2):=off(body^); memW(SSreg:SPreg+4):=seg(body^); end | соответствует С-шной конструкции Код: proc->SSreg = FP_SEG(ar) proc->SPreg = FP_OFF(ar) memcpy(MK_FP(proc->SSreg, proc->SPreg)+2, FP_OFF(body), sizeof(body)); memcpy(MK_FP(proc->SSreg, proc->SPreg)+4, FP_SEG(body), sizeof(body)); | Хотя, без знания, что за тип dect все это - предположения. DragonII Переключение между процессами, по хорошему, должно программироваться на ассемблере. Или на худой конец, нужно сделать структуру, соответствующую TSB (если я не ошибаюсь) и ее при каждом переключении подсовывать процессору (если хочешь сохранить существующий стек задачи). Если хочется явно руками менять стек, это можно делать и по другому - объявляешь лок. переменную и отсчитываешь от нее 4 байта. Там - лежать сегмент и смещение. Правишь их с использованием адресной арифметики и - вуаля. Хорошо бы не напороться на access violation. Что ты понимаешь под созданием процесса? Стандартно в UNIX процесс создается путем клонирования сегментов данных и стека для текущего процесса и записью нового элемента в таблицу процессов ядра. В Виндах процесс создается путем загрузки нового исполняемого файла и записью элемента в таблицу процессов. Что именно надо? Повторяю вопрос, какой диалект С - - Борланд, Mircosoft, какой-то-там-еще (знаю еще пару тройку компиляторов для дос). Везде свои заморочки по работе со встраиваемым ассемблером, регистрами и сегментами. Уточни, пожалуйста. |