Вопрос № 79107: Ув эксперты!
Решил взяться за азм, и,в связи с этим имеется принципиальный (для меня) вопрос.
В литературе пишут,что азм для Винды работает только на АПИ,т.е.,о Досовских прерываниях можно забыть.Там же указывают,что по сравнению с Досовским ...Вопрос № 79226: Здраствуйте!
Скажите пожалуйста почему при сравнении одинаковых строк, переход по JE не происходит. Весь код в приложении. TASM version 2.5....
Вопрос № 79.107
Ув эксперты!
Решил взяться за азм, и,в связи с этим имеется принципиальный (для меня) вопрос.
В литературе пишут,что азм для Винды работает только на АПИ,т.е.,о Досовских прерываниях можно забыть.Там же указывают,что по сравнению с Досовским азмом у виндовского практически нет контроля за железом.Отсюда неск вопросов:
1. Действительно ли нет больше прерываний в Винде,или же ф-ии АПИ при вызове обращаются к тем же прерываниям?
2. Если в самом низу Винды работают прерывания,то можно ли обращаться к железу Винды досовским азмом?
3. Если прерываний больше нет,а есть только АПИ,то на чем,в таком случае можно обращаться к железу?
4. Можно ли в MASM 9.0 совмещать вызов прерываний и вызовы АПИ?
5. И самый важный вопрос - с чего начать изучение азма,с Доса или Винды.
Буду крайне признателен за исчерпывающий ответ,т.к. нужно определиться.
Спасибо заранее.
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Жлукто Александр/Jeff!
Окна действительно не пускают к железу из уровня пользователя. Они эмулируют сеанс Дос.
Зато можно спокойно работать в нулевом (системном) кольце.
Любой драйвер который загрузила ОСь находится в нулевом кольце.
Пишете драйвер (с необходимыми Вам функциями), ОСь его грузит, и у Вас уже все железо в руках.
Прерывания это вызов системных функций (ДОС или БИОС), АПИ тоже системные функции (только ВИНДОВС). Есть еще прерывания от устройств (но это не касается
темы Dos vs Windows)
Если Вы только начали учить ассемблер то лутше начинать с ДОСа, чтобы освоить язык и потом переходить на Окна
в приложении несколько сайтов
смотрите книги Юрова, Зубкова, Жордана и Калашникова.
еще на www.wasm.ru посмотрите Уроки Iczelion'а
Удачи!
Приложение:
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: Wild_one
Здравствуйте, Жлукто Александр/Jeff!
1. На самом деле, когда вы вызываете функцию АПИ высокого уровня она может обращаться к другим АПИ, но в конечном итоге вызываются так называемые NativeAPI. Их названия начинаются с Nt и Zw. Те же в свою очередь вызывают прерывание int 2E (sysenter в WindowsXP) в качестве параметров прерывания в EAX номер функции, EDX указатель на данные в стеке. Весь дальнейший код исполняется в режиме ядра и система из отладчика 3кольца(OllyDbg напр.) туда не пустит.
Вы можете напрямую вызывать эти NativeAPI или даже прерывание 2E, но они мало документированы и разобраться с ними проблематично. За подробностями на wasm.ru
2. Виртуальная машина ДОС под виндой блокирует все попытки обратиться напрямую к железу. Такие программы просто не запустятся.
3. Через драйвера, как уже было сказано.
5. Не думаю, что ДОС сегодня практически необходим. Я начинал изучение с Винды. Однако придется учить не только язык но и саму ОС. Думаю, что ничего сверхсложно здесь нет.
Ответ отправил: Wild_one (статус: 6-ой класс)
Ответ отправлен: 20.03.2007, 21:28
Отвечает: Волков Павел Юрьевич
Здравствуйте, Жлукто Александр/Jeff!
1,2)Во первых поймите, что есть только код, выполняемый процессором.
Прерывания - это код, на который процессор реагирует определенным образом, передавая управление обработчику прерываний.
В Win используется защищенный режим процессора, обработка процессором прерываний, в этом режиме происходит иначе, чем в DOS.
По этому необходимо знать механизм обработки прерываний в "защищенном" режиме. Обработкой прерываний в Win занимаются драйвера, имеют/находятся на нулевом кольце доступа/защиты процессора.
Т.о. для использования прерываний необходимо создать код, выполняющийся в нулевом кольце, т.е. писать драйвер.
3,4)DOS работает в "реальном" режиме работы процессора, обработка прерываний там одна, Win - в "защещенном" режиме, обработка прерываний происходит иначе.
5)Если вы хотите посмотреть на работу процессора в "реальном режиме", начинайте с DOS, иначе - Win, *nix :)
В "реальном" режиме, в основном реализуются загрузчики или системы реального времени, программы, которым предподчительнее работа процессора в этом режиме.
Я начинал по книгам Финогенова, Юрова, Пирогова.
Успехов.
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: Студент)
Ответ отправлен: 21.03.2007, 08:04
Даже не знаю как ответить...
Про DOS я просто прочитал у Зубкова, а писать начал сразу под win32 [на masm32]. Вывод на экран, обращение к файлам и т.п. Производится через API. Из прерываний использую только 0CCh :). Это на счет прикладного программирования, про драйвера не знаю.
Ответ отправила: Mavka (статус: 1-ый класс)
Ответ отправлен: 21.03.2007, 14:15
Вопрос № 79.226
Здраствуйте!
Скажите пожалуйста почему при сравнении одинаковых строк, переход по JE не происходит. Весь код в приложении. TASM version 2.5.
Приложение:
Отправлен: 21.03.2007, 14:13
Вопрос задал: chikanok (статус: 3-ий класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, chikanok!
причина в том, что CMPSB сравнивает строки ds:si и es:di.
Вы забыли определить ES.
Вы сравниваете одну и туже строку (SO).
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 7-ой класс)
Ответ отправлен: 21.03.2007, 14:28 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо! Я уже разобрался. Да одну и туже!