Таблица векторов прерываний

Тема в разделе "WASM.BEGINNERS", создана пользователем Asm75, 4 янв 2009.

  1. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Линк под правил.

    0x00000000 - в С так обазночаются шестнадцатеричные цифры. Некоторые ассемблеры также понимают это обозначение.

    Можно в дебугере debug.exe
    набираешь d 0:0
     
  2. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    под XP.
    Кстати вопрос, в инете встречал совет прописывать в Мой компьютер-Свойства-Переменные среды в переменной Path путь к папке с компилятором (;c:\MASM611)? Что это за пеерменная и зачем прописывать путь, если и так все работает (под словом "все" я имею ввиду процесс компиляции и компоновки)?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Asm75
    Поставь масм нормальный для вини. Потом тебе нужно както память прочитать с табличкой. Обычно нужно дров делоть, но можно есчо через физиклмемори или дебагконтрол заюзоть, вобщем то ничего требующего режима ядра делоть не нужно для этого.
     
  4. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Спасибо, толковая инфа, но у меня другой вопрос: не о фунциях прерываний (этой информации в интернете много), а как узнать по какому адресу памяти находится обработчик конкретного прерыаания? Что нужно сделать для этого? Через какую программу? Какие команды вводить?
     
  5. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Иэдем к точному ответу методом элиминации (исключения): из Вашего ответа я узнал еще одно из того, что делать не нужно, а можно сказать, что делать нужно, а то область поиска очень широка? :)

    масм нормальный (MASM611) у меня давно стоит, я давно ком-файлы на нем делаю, но хочу поэкспериментировать с прерывааниями.
    Т.о., резюмируя: чтобы узнать, по какому адресу памяти именно моего процессора находится обработчик прерывания, надо 4 х номер прерывания и использовать в своей программе адрес с полученным номером?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Процессора всмысле NTVDM ?
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Прочитать из таблицы прерывания. В реальном режиме таблица представляет собой массив элементами которого есть указатели на вектор прерывания. Указатель это <сегмент:смещещение> в памяти соответственно будет вначале два байта смещение следующии два сегмент.
    К примеру мы хотим узнать адресс int 10h мы должны умножить на 4 - размер элемента массива и прибавить базу получаем 10h*4h+0h=40h с этого адресса мы должны прочитать вектор.
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Clerk
    Пусть чиловек первый день потусуется с NTVDM, а потом уже в защищенный режим лезет.
     
  9. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    не наоборот?
     
  10. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Я работаю в DOS пока...а DOS - это, насколько я понял реальный режим, в защищенном работает только Мир форточек :)
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Нет именно так. В intel вначале идут младшии байты потом старшии.
    Имеем адресс 020Сh:08BDh
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Ты работаешь в эмуляции доса от виндовс. Эмулятор этот называется NTVDM.
    Режим этот называется виртуальный 86. Виртуальный потому, что он эмулирует реальный режим.
    Вот виндовскии приложении работают в защищенном режиме.
    Так как мы работаем не в чистом досе, а в эмуляции то есть некоторые ограничения. Но о них потом.
     
  13. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Это о них в последнем абзаце? то-то я смотрю, у меня ни один созданный ком-файл не пашет...Это может быть связано с ограничениями виртуальной ДОС-машины в NT?

    The NT Virtual DOS Machine (a.k.a WOW, or Windows on Windows), is a Win16 subsystem that runs under Windows NT, which allows 16-bit applications to run as if they were being executed on a DOS machine, with that machine's multitasking and segmented memory model.

    Because the system is multitasked 16-bit DOS and Windows applications cannot crash NT. However, 16-bit apps within a Win16 subsystem run the exact same way as they do on a DOS/Win 3.x machine; therefore, 16-bit apps within the subsystem can crash one another, or the subsystem. To prevent this, you can launch multiple WOW subsystems as long as your program does not communicate using shared memory.


    Windows NT will not allow NTVDM to execute instructions that try to directly manipulate hardware or memory locations. As a result, some DOS and Windows 3.x applications (such as games) may not run under Windows NT.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Как не запускаются вон 007 у тебя отработал на ура сделал синий экран как и должен был. Ты просто разберись что должно и что не так.
     
  15. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Спасибо всем вам огромное! Начал помаленьку въезжать...
     
  16. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Резюмируя:

    Таким образом, для того, чтобы в реальном режиме узнать по какому адресу памяти находится обработчик прерывания, например, int10h, мы должны номер прерывания 10h умножить на размер элемента массива 4, прибавив базу (смещение, от которогот идет отсчет ячеек памяти), получить адрес 40h, затем открыть в cmd debug.exe, введя -d0:40 открыть дамп области памяти, начинающийся с указателя 0:40. Далее, записать адрес обработчика - первые 2 байта справа из этих 4-х байтов в качестве номера сегмента, а последние 2 справа в качестве смещения. Так?
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Asm75
    Так.
     
  18. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    )))))))))))че-то я какой-то бред написал,...не совсем понятно почему сначала идет адрес смещения а потом сегмента, тогда как по общему правилу должно быть наоборот.
    И потом, если мы знаем адрес -40h, нужны ли значения, записанные по этому адресу или можно использовать в программах 40h, чтобы указать процесссору по какому адресу он должен искать обработчик прерывания, а значения он сам там прочитает?
     
  19. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    О, благословенно ДАО, ибо неизменно, как ассемблер - истинно дзенский язык
     
  20. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Если цель дзен -достичь Нирваны, то какова конечная цель ассемблера? ))))))))))))))) Создать единую и неизменную таблицу векторов прерываний?