Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Вопрос по работе прерываний в winxp


Автор: suvolod 13.6.2006, 04:54
Помогите разобраться с теорией. Ассемблер копаю недавно, учусь по книге Питера Абеля «Ассемблер и программирование на IBM PC», пятое издание, книга выпущена в 2005 году. Беспокоит вот что: у Абеля есть большая глава, посвящена различным прерываниям – int 10h, 16h, 21h и так далее. Как я понимаю, если материал по прерываниям в новом издании книги остался, значит эта тема не устарела и все эти прерывания должны работать и под новыми операционными системами. Работаю под Win XP. При изучении ассемблера в качестве компилятора использую VC++ 6.0. Пользуюсь asm- вставками. Так вот, попытка задействовать (исследовать) даже самое простенькое прерывание – например, вывод на консоль char-строки или изменение положения курсора в консоли, приводит к тому, что приложение аварийно завершается. Никак не могу понять, что делать – то ли материал, приводимый в книге давно устарел, несмотря на то что издание новое, то ли я неправильно что-то делаю. Краем уха я слышал, что пользоваться прерываниями под nt-шными операционками нельзя, так как операционная система не дает напрямую обращаться к аппаратуре ПК. Однако, насколько я знаю, xp позволяет запускать dos- приложения, можно даже настроить совместимость с w95-98, а значит как минимум XP должна хотя бы эмулировать эти прерывания. И еще, в инете несколько раз встречал упоминания о том, что прерывания в новых версиях windows заменены понятием селекторы. И якобы прерываний как таковых нет вовсе. Если не сложно, поясните простым доступным языком, что это значит в плане программирования на ассемблере. Если предположить, что прерываний нет, значит  есть заменяющие (эмулирующие???) их селекторы, и я могу вызывать их вместо прерываний для тех-же целей. Например, для того-же вывода стоки на консоль… 

Автор: setty 13.6.2006, 12:33
хм, прерывания есть и никуда собстнаи не нделись, однако не 21h )
возможно xp и позволяет запускать dos приложения, однако запускает их в специальном там какомта эмуляционном режиме
твоюже прогу она будит запускать как обычное виндовое приложение и падобные инты её могут малость контузить )

что касается прерыванияй и селекторов, тут тебе стоит копать в сторону защищённого режима

при работе в виндоузе используются не прерывания а набрр функций предоставляемый windows разработчику - т.н. native APIs. С помощью этих апи можно писать/читать в консоль, работать с файлами, графическим интерфейсом, и впринципе делать очень и очень многое.
 

Автор: BUGOR 13.6.2006, 16:26
suvolod, есть прерывания windows, а есть прерывания ДОС, так вот если бы пытаешься в VC++ в win32 проекте писать на прерываних ДОС, то само собой ничего у тебя не выйдет, это же совершенно разные платформы, поэтому у тебя два выхода:
1. Использовать ДОС компилятор для своих проектов
2. Писать на ассемблере под вин.

Советую второе, книга Абеля давно морально устарела, после описывающего материала я там не вижу ничего актуального. Поэтому если уже знаком с основами, то переходи на win32 платформу. 

Автор: ds29 15.6.2006, 00:41
вы что ребята, Питер Абель  "АССЕМБЛЕР язык и программирование для IBM PC"- это Библия программиста!
(у меня как первое (1991) так и 5-е (2003) издание)

итак, все прерывания будут корректно работать если ты их будешь компилировать тем компилятором, который указан в книге (т.е. MASM 6.1, например) и запускать под соотв. ОС (т.е. MS-DOS), для запуска в Win32 удобней запускать из консоли (cmd.exe) или из far-manager.
в этих случаях бкдет эмулирование MS-DOS .

если ты хочешь использовать Cи компилятор, то например используй Turbo C++ создавая в нём приложения под DOS с АСМ вставками.

т.е. используя эту книгу приложение под Win32 ты не напишешь. 

Автор: Exekutor 15.6.2006, 06:36
Прерывания в 32-х битных приложениях под вин ХР не работают. Используй API. Если пишешь под доску, то используй соответствующий компилятор как уже говорилось выше.  

Автор: BUGOR 15.6.2006, 13:52
Exekutor, как не работают? Таблицу прервываний винды никто не отменял!  

Автор: ds29 15.6.2006, 14:09
???

мы говорим про прерывания MS-DOS и BIOS которые описаны в книге П. Абеля. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)