set_TSS:
push eax
push bx
push di
push es
push eax
push ecx
push di
mov ax,TSS_area
;mov es,ax
xor eax,eax
mov cx,26h
cld
;rep stosd
pop di
pop ecx
pop eax
mov [es:di+28],eax
mov [es:di+32],ebx
mov [es:di+36],ecx
mov [es:di+56],edx
mov al,8
mov [es:di+76],al
add al,8
mov [es:di+80],al
add al,8
mov [es:di+84],al
pop es
pop di
pop bx
pop eax
ret
Ошибка при установке TSS.
Подскажите, что не так.
Код:
В коде закомментированы 2 команды. Если раскомментить хоть одну из них, то VMware выдает ошибку "... kernel stack fault..." =( Я в защищенном режиме, страничная адресация включена, сегмент стека не создан (т.к. ошибка вроде не из-за него).
Помогите плз.
P.S. Если у кого есть examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку.
если оставить закоментаренной первую команду, то невозможна работа строк
mov [es:di+28],eax
mov [es:di+32],ebx
........
вторую команду можно раскоментарить только в том случае когда раскоментарена первая, потому что ты будешь обнулять не то что надо? (как я понял, она обнуляет первую часть TSS)
если сегмент стека не создан, тогда как ты собираешься использовать команды push/pop
Непонятно, почему эти команды вызывают ошибку. Пока ошибка есть, даже не очень волнует смысл функции, главное, понять, что не так. Этот код взят из sasm.narod.ru-мультизадачность-реализация мультизадачности (кстати, для лучшего понимания темы я и ищу от туда пример, который куда-то от туда делся...). Как ни странно, push & pop видимо работают, раз не вызывают ошибки, правда, непонятно как. Кстати, если сделать сегмент стека, то push & pop должны его определять и использовать автоматически?
Цитата: erzik
Здраствуйте.
Подскажите, что не так.
В коде закомментированы 2 команды. Если раскомментить хоть одну из них, то VMware выдает ошибку "... kernel stack fault..." =( Я в защищенном режиме, страничная адресация включена, сегмент стека не создан (т.к. ошибка вроде не из-за него).
Помогите плз.
P.S. Если у кого есть examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку.
Подскажите, что не так.
В коде закомментированы 2 команды. Если раскомментить хоть одну из них, то VMware выдает ошибку "... kernel stack fault..." =( Я в защищенном режиме, страничная адресация включена, сегмент стека не создан (т.к. ошибка вроде не из-за него).
Помогите плз.
P.S. Если у кого есть examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку.
как определена TSS_area ?
Код:
...весь код...
...всякие строки для вывода на экран
TSS_area:
дальше ничего нету
...всякие строки для вывода на экран
TSS_area:
дальше ничего нету
Цитата: erzik
т.к. в статье об этом особо ничего не писалось, то определил так:
Код:
...весь код...
...всякие строки для вывода на экран
TSS_area:
дальше ничего нету
...всякие строки для вывода на экран
TSS_area:
дальше ничего нету
в том то и дело :)
"TSS_area:" - это вообще определение метки .
хм... а как тогда её определить? я подумал, что раз после нее никакой нужной информации (кода, данных) нету, то и портиться нечему.
Почему ничего не кладётся в DI перед STOSB?
Код:
mov ax,TSS_area
;mov es,ax
;mov es,ax
в корне неверный код!
в сегментный регистр, надо поместить селектор а не смещение!
а общем всю процедуру set_TSS можно выкинуть :)
вместо mov es,ax написал mov di,ax и ошибка пропала, пасиб.
to ahilles
Я пытаюсь многозадачность включить и нашел куски кода в выше данной мною сылке. Там была такая функция set_TSS, ну ctrl+C & ctrl+V... только вот приходится додумывать, что где не так и почему не работает.
!!! Если у кого-нибудь есть пример examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку пожалуйста !!!
Цитата: erzik
to Vov4ick
вместо mov es,ax написал mov di,ax и ошибка пропала, пасиб.
to ahilles
Я пытаюсь многозадачность включить и нашел куски кода в выше данной мною сылке. Там была такая функция set_TSS, ну ctrl+C & ctrl+V... только вот приходится додумывать, что где не так и почему не работает.
!!! Если у кого-нибудь есть пример examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку пожалуйста !!!
вместо mov es,ax написал mov di,ax и ошибка пропала, пасиб.
to ahilles
Я пытаюсь многозадачность включить и нашел куски кода в выше данной мною сылке. Там была такая функция set_TSS, ну ctrl+C & ctrl+V... только вот приходится додумывать, что где не так и почему не работает.
!!! Если у кого-нибудь есть пример examp_9.zip из sasm.narod.ru-мультизадачность-реализация мультизадачности, выложите ссылочку пожалуйста !!!
ТСС - структура данных описывающих некоторый процесс .
прежде чем писать что нить , стоило бы почитать книжки и понять что к чему . а копируя куски чужого кода нифига не поймёш .
Теорию я читал, но еще не дошел до того уровня, чтобы по теории сразу писать код, тяжело пока без примеров...
Цитата: koderAlex
ТСС - структура данных описывающих некоторый процесс .
небольшая поправка:
ТСС - структура данных описывающих некоторый ПОТОК!
необязательно .
PS: Сие в контексте и терминологии аппаратного преключения задач процов IA-32