OSDev http://osdev.su/ |
|
возврат из программы (iretd) http://osdev.su/viewtopic.php?f=6&t=788 |
Страница 1 из 2 |
Автор: | scuter [ 30 авг 2013, 07:24 ] |
Заголовок сообщения: | возврат из программы (iretd) |
у меня началаглючить многозадачность, как таковые процессы запускаются но когда происходит команда iretd всё останавливается, для теста даже проверил отдельно Код: lgdt [GDTR] lidt [IDTR] jmp far 08h:this_kernel_code this_kernel_code: mov ax, 0x10 mov es, ax mov ds, ax mov fs, ax mov gs, ax mov ax, sel_kernel ltr ax call far sel_TSS1:0 пробовал всё это дело вразных комбинациях и в разном порядке, но так и не могу понять почему эта штука не возвращается обратно. |
Автор: | sh2ezo [ 30 авг 2013, 08:18 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
Какой эмулятор и какое исключение? А ещё весь код нужен, думаю |
Автор: | scuter [ 30 авг 2013, 08:58 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
sh2ezo писал(а): Какой эмулятор и какое исключение? эмулято vbox sh2ezo писал(а): А ещё весь код нужен, думаю весь код не нужен, там idt gdt и tss-ы генерируются. |
Автор: | phantom-84 [ 30 авг 2013, 11:54 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
Где код выхода из вложенной задачи? |
Автор: | scuter [ 30 авг 2013, 13:56 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
phantom-84 писал(а): Где код выхода из вложенной задачи? там просто iret стоит. Код: T_init:
mov eax, 0FF00FFh mov ecx, 0AA00DDh iretd T_enter: iretd jmp T_enter |
Автор: | phantom-84 [ 30 авг 2013, 15:29 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
Ты уверен, что у тебя установлен флаг NT? Надеюсь, прерывания во вложенной задаче запрещены. |
Автор: | scuter [ 31 авг 2013, 06:58 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
phantom-84 писал(а): Ты уверен, что у тебя установлен флаг NT? я его не устанавливал, у основной задачи все флаги сброшены phantom-84 писал(а): Надеюсь, прерывания во вложенной задаче запрещены. нет там прерывания разрешены, пробовал запрещять и это не помогает, пославил исключения и попробовал вызвать какое нибудь из них ( int 10h) после этого отключилось GDT, поставил на таймерный IRQ многозадачность и оно тоже не работает. |
Автор: | Himik [ 31 авг 2013, 11:40 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
Причину ошибки быстро найдёшь с помощью отладчика Bochs. Там мы много обсуждали способы отладки viewtopic.php?f=6&t=785 |
Автор: | maisvendoo [ 31 авг 2013, 13:08 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
Himik писал(а): Причину ошибки быстро найдёшь с помощью отладчика Bochs. Там мы много обсуждали способы отладки viewtopic.php?f=6&t=785 В плане отладки, если работаешь под *nix запросто можно запилить такое - вполне себе полноценную IDE для разработки ОС, с дамами и преферансом. Вместо VMware использовать тот же Bochs или QEMU, у них же есть gdb stub на порту 1234 (только вот работали они у меня под x86, а на x86_64 в упор не хотят). P.S.: Это можно сделать из под винды - gdb есть реализация и под win. |
Автор: | phantom-84 [ 31 авг 2013, 18:25 ] |
Заголовок сообщения: | Re: возврат из программы (iretd) |
scuter писал(а): phantom-84 писал(а): Ты уверен, что у тебя установлен флаг NT? я его не устанавливал, у основной задачи все флаги сброшены Цитата: phantom-84 писал(а): Надеюсь, прерывания во вложенной задаче запрещены. нет там прерывания разрешены, пробовал запрещять и это не помогает, пославил исключения и попробовал вызвать какое нибудь из них ( int 10h) после этого отключилось GDT, поставил на таймерный IRQ многозадачность и оно тоже не работает. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |