Asm75 Линк под правил. 0x00000000 - в С так обазночаются шестнадцатеричные цифры. Некоторые ассемблеры также понимают это обозначение. Можно в дебугере debug.exe набираешь d 0:0
под XP. Кстати вопрос, в инете встречал совет прописывать в Мой компьютер-Свойства-Переменные среды в переменной Path путь к папке с компилятором (;c:\MASM611)? Что это за пеерменная и зачем прописывать путь, если и так все работает (под словом "все" я имею ввиду процесс компиляции и компоновки)?
Asm75 Поставь масм нормальный для вини. Потом тебе нужно както память прочитать с табличкой. Обычно нужно дров делоть, но можно есчо через физиклмемори или дебагконтрол заюзоть, вобщем то ничего требующего режима ядра делоть не нужно для этого.
Спасибо, толковая инфа, но у меня другой вопрос: не о фунциях прерываний (этой информации в интернете много), а как узнать по какому адресу памяти находится обработчик конкретного прерыаания? Что нужно сделать для этого? Через какую программу? Какие команды вводить?
Иэдем к точному ответу методом элиминации (исключения): из Вашего ответа я узнал еще одно из того, что делать не нужно, а можно сказать, что делать нужно, а то область поиска очень широка? масм нормальный (MASM611) у меня давно стоит, я давно ком-файлы на нем делаю, но хочу поэкспериментировать с прерывааниями. Т.о., резюмируя: чтобы узнать, по какому адресу памяти именно моего процессора находится обработчик прерывания, надо 4 х номер прерывания и использовать в своей программе адрес с полученным номером?
Asm75 Прочитать из таблицы прерывания. В реальном режиме таблица представляет собой массив элементами которого есть указатели на вектор прерывания. Указатель это <сегмент:смещещение> в памяти соответственно будет вначале два байта смещение следующии два сегмент. К примеру мы хотим узнать адресс int 10h мы должны умножить на 4 - размер элемента массива и прибавить базу получаем 10h*4h+0h=40h с этого адресса мы должны прочитать вектор.
Я работаю в DOS пока...а DOS - это, насколько я понял реальный режим, в защищенном работает только Мир форточек
Asm75 Ты работаешь в эмуляции доса от виндовс. Эмулятор этот называется NTVDM. Режим этот называется виртуальный 86. Виртуальный потому, что он эмулирует реальный режим. Вот виндовскии приложении работают в защищенном режиме. Так как мы работаем не в чистом досе, а в эмуляции то есть некоторые ограничения. Но о них потом.
Это о них в последнем абзаце? то-то я смотрю, у меня ни один созданный ком-файл не пашет...Это может быть связано с ограничениями виртуальной ДОС-машины в 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.
Asm75 Как не запускаются вон 007 у тебя отработал на ура сделал синий экран как и должен был. Ты просто разберись что должно и что не так.
Резюмируя: Таким образом, для того, чтобы в реальном режиме узнать по какому адресу памяти находится обработчик прерывания, например, int10h, мы должны номер прерывания 10h умножить на размер элемента массива 4, прибавив базу (смещение, от которогот идет отсчет ячеек памяти), получить адрес 40h, затем открыть в cmd debug.exe, введя -d0:40 открыть дамп области памяти, начинающийся с указателя 0:40. Далее, записать адрес обработчика - первые 2 байта справа из этих 4-х байтов в качестве номера сегмента, а последние 2 справа в качестве смещения. Так?
)))))))))))че-то я какой-то бред написал,...не совсем понятно почему сначала идет адрес смещения а потом сегмента, тогда как по общему правилу должно быть наоборот. И потом, если мы знаем адрес -40h, нужны ли значения, записанные по этому адресу или можно использовать в программах 40h, чтобы указать процесссору по какому адресу он должен искать обработчик прерывания, а значения он сам там прочитает?
Если цель дзен -достичь Нирваны, то какова конечная цель ассемблера? ))))))))))))))) Создать единую и неизменную таблицу векторов прерываний?