не работает выход из задачи

Тема в разделе "WASM.ASSEMBLER", создана пользователем 0136, 9 сен 2009.

  1. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Всем привет! Кто разбирается в переключении задач, помогите плз, не работает выход из задачи. Если кто сможет прогнать код в боше и скажет в чем проблема - буду очень благодарен за помощь. В вмаре друг прогонял код - работает. Пробую из доса запускать - ребут. Креплю файл.
     
  2. reversecode

    reversecode Guest

    Публикаций:
    0
    дебагером отладь

    до PM можно дойти и узнать валиться ли он ДО
    а в PM можно прыгнуть тем же дебагером и узнать допрыгивает ли ОН
     
  3. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Входит в РМ, все ок, загружаю в TR селектор сегмента TSS, переключаюсь на другую задача с помощью команды CALL SEL_TSS и из этой задачи по команде IRET не происходит возврата. Не понимаю почему. Вроде теоретически все сделано правильно. Не могу понять ошибку.
     
  4. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Выбивает исключение - ошибочный TSS. Кто скажет чем он ошибочный?
     
  5. reversecode

    reversecode Guest

    Публикаций:
    0
    исключение по чему происходит? по iret ?
    так может стоит полистать справочник интелла?
    или другой какой гука например
    по полям TSS и работе iret как он срабатывает и что проверят при срабатывании
    поля TSS типа беклинк
    стек
    и прочее
     
  6. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    0136

    Я как-то испытал возможно схожую проблему: так же при переключении на исходную задачу валилось с исключением неверного TSS. Оказалось (кто-то подсказал) что при переключении на вторую задачу из первой проц сохраняет все селектора в полях задачи (те текущие селектора) - которые могут иметь абстрактные значения сразу после перехода в PM. Новая задача выполняется до возврата - далее проц пытается грузить из контекста старые селектора - и если они неверные - выбрасывает такую хрень. У меня так:

    Код (Text):
    1.     mov  ax,SEL_DATA
    2.     mov  ds,ax
    3.     mov  ax,SEL_STACK
    4.     mov  ss,ax
    5.     mov  ax,SEL_SCREEN
    6.     mov  es,ax
    7.     mov  ax,SEL_HIMEM ; massive selector
    8.     mov  gs,ax
    9.     mov  ax,0
    10.     mov  fs,ax
    Не помню какой именно селектор был проблемным - FS/GS.
     
  7. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Большое спасибо за подсказку! загрузил GS, FS и все заработало!
     
  8. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Заработало, а когда подключил задачам страничное тождественное преобразование, то снова ошибка происходит :) копец!
     
  9. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    "страничное тождественное преобразование" - а что это? :)

    Ты же установил обработчики ВСЕХ исключений и в случае такового - какое исключение и какой код ошибки? На какой инструкции?
     
  10. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Ребут идет, установил борщ, разбираюсь с ним. А перезагрузки идет может еще из за того что у меня обработчики исключений сделаны как шлюзы прерываний, они наверное тоже не "выдерживают". Странич тождеств преобразование - это когда пейджинг включен но преобразования "нет". Таблицы построены таким образом, что они отображают физ память. Ну равные - тождественные :) равенство, идентичность, в таком плане.
     
  11. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    0136

    Ну все таки я бы порекомендовал добить - какое именно исключение возникает и в каком месте.