![]() |
|
![]() ![]() ![]() |
|
suvolod |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.8.2005 Репутация: нет Всего: 1 |
Помогите разобраться с теорией. Ассемблер копаю недавно, учусь по книге Питера Абеля «Ассемблер и программирование на IBM PC», пятое издание, книга выпущена в 2005 году. Беспокоит вот что: у Абеля есть большая глава, посвящена различным прерываниям – int 10h, 16h, 21h и так далее. Как я понимаю, если материал по прерываниям в новом издании книги остался, значит эта тема не устарела и все эти прерывания должны работать и под новыми операционными системами. Работаю под Win XP. При изучении ассемблера в качестве компилятора использую VC++ 6.0. Пользуюсь asm- вставками. Так вот, попытка задействовать (исследовать) даже самое простенькое прерывание – например, вывод на консоль char-строки или изменение положения курсора в консоли, приводит к тому, что приложение аварийно завершается. Никак не могу понять, что делать – то ли материал, приводимый в книге давно устарел, несмотря на то что издание новое, то ли я неправильно что-то делаю. Краем уха я слышал, что пользоваться прерываниями под nt-шными операционками нельзя, так как операционная система не дает напрямую обращаться к аппаратуре ПК. Однако, насколько я знаю, xp позволяет запускать dos- приложения, можно даже настроить совместимость с w95-98, а значит как минимум XP должна хотя бы эмулировать эти прерывания. И еще, в инете несколько раз встречал упоминания о том, что прерывания в новых версиях windows заменены понятием селекторы. И якобы прерываний как таковых нет вовсе. Если не сложно, поясните простым доступным языком, что это значит в плане программирования на ассемблере. Если предположить, что прерываний нет, значит есть заменяющие (эмулирующие???) их селекторы, и я могу вызывать их вместо прерываний для тех-же целей. Например, для того-же вывода стоки на консоль…
|
|||
|
||||
setty |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 8.6.2006 Где: Украина Репутация: нет Всего: нет |
хм, прерывания есть и никуда собстнаи не нделись, однако не 21h )
возможно xp и позволяет запускать dos приложения, однако запускает их в специальном там какомта эмуляционном режиме твоюже прогу она будит запускать как обычное виндовое приложение и падобные инты её могут малость контузить ) что касается прерыванияй и селекторов, тут тебе стоит копать в сторону защищённого режима при работе в виндоузе используются не прерывания а набрр функций предоставляемый windows разработчику - т.н. native APIs. С помощью этих апи можно писать/читать в консоль, работать с файлами, графическим интерфейсом, и впринципе делать очень и очень многое. |
|||
|
||||
BUGOR |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: нет Всего: 16 |
suvolod, есть прерывания windows, а есть прерывания ДОС, так вот если бы пытаешься в VC++ в win32 проекте писать на прерываних ДОС, то само собой ничего у тебя не выйдет, это же совершенно разные платформы, поэтому у тебя два выхода:
1. Использовать ДОС компилятор для своих проектов 2. Писать на ассемблере под вин. Советую второе, книга Абеля давно морально устарела, после описывающего материала я там не вижу ничего актуального. Поэтому если уже знаком с основами, то переходи на win32 платформу. |
|||
|
||||
ds29 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
вы что ребята, Питер Абель "АССЕМБЛЕР язык и программирование для IBM PC"- это Библия программиста!
(у меня как первое (1991) так и 5-е (2003) издание) итак, все прерывания будут корректно работать если ты их будешь компилировать тем компилятором, который указан в книге (т.е. MASM 6.1, например) и запускать под соотв. ОС (т.е. MS-DOS), для запуска в Win32 удобней запускать из консоли (cmd.exe) или из far-manager. в этих случаях бкдет эмулирование MS-DOS . если ты хочешь использовать Cи компилятор, то например используй Turbo C++ создавая в нём приложения под DOS с АСМ вставками. т.е. используя эту книгу приложение под Win32 ты не напишешь. |
|||
|
||||
Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: нет Всего: 4 |
Прерывания в 32-х битных приложениях под вин ХР не работают. Используй API. Если пишешь под доску, то используй соответствующий компилятор как уже говорилось выше.
-------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
BUGOR |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: нет Всего: 16 |
Exekutor, как не работают? Таблицу прервываний винды никто не отменял!
|
|||
|
||||
ds29 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
???
мы говорим про прерывания MS-DOS и BIOS которые описаны в книге П. Абеля. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |