Консультация № 169292
11.06.2009, 13:33
0.00 руб.
0 19 2
Здравствуйте, товарищи

Вопрос простой и вот какой: как осуществляется ввод с клавиатуры, или вывод на экран в Windows - прерываниями, как в DOS, или для Windows как-то по-другому? Извините, если вопрос не корректный.

Обсуждение

Неизвестный
11.06.2009, 13:58
общий
смотря как написана программа
если программа под виндовс для консоли, то в/в API функциями консоли URL >>MSDN
давно
Посетитель
7438
7205
11.06.2009, 14:11
общий
это ответ
Здравствуйте, Vasiliusis.
А это смотря какую программу писать. Основной тип программ в Windows (будем говорить о 32-битных версиях) - 32-битные программы формата PE.
В системе взаимодействие с клавиатурой и экраном осуществляется в системных драйверах.
А вот передача и получение информации программам (а их множество) осуществляется посредством механизма сообщений.

Но Windows может запустить не только программы в родном формате.
Система может запустить как программу, предназначенную для ДОС-а (формата EXE (MZ) и COM, так и программы для 16-битных Windows (формата NE, LE).
При этом для их работы создается специальная виртуальная машина, в которой эмулируется среда для этих программ.
Сами эти программы, в частности досовские программы, вполне могут пользоваться всеми привычными прерываниями.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
11.06.2009, 14:25
общий
это ответ
Здравствуйте, Vasiliusis.

Вместо прерываний (как в DOS) все функции ОС уровня пользователя реализуются через вызовы API (Windows API). При работе с консольным режимом в среде Си (Microsoft Visual Studio C++, Borland CBuilder) предусмотрены, так же как и для DOS, готовые функции printf, scanf, getch, puthch и т.д. Для Delphi точно также предусмотрены readln, writeln. Если консольная программа пишется на ассемблере под Windows, используются API вызовы, такие WriteConsole, ReadConsole (подробный справочник на русском по консольным функциям http://vsokovikov.narod.ru/New_MSDN_API/Console/con_fn.htm). Для использования API-консольных функций необходимо подключить библиотеку kernel32. Кстати говоря, в языках высокого уровня использование только Windows API вызовов позволит значительно сократить размер исполняемого файла.
С графическими приложениями всё несколько сложнее. Оконная API архитектура Windows построена на сообщениях. При нажатии клавиши, клике мышки, любом другом событии отправляется сообщение (например, WM_KEYDOWN) оконному обработчику сообщений, где и классифицируется. Вывод информации в окно осуществляется также с помощью сообщений. Окну (окном является практически любой объект на экране, в том числе и поля для ввода текста) посылается сообщение WM_SETTEXT и передается текст. Также существует возможность прямого доступа к графической поверхности окна с помощью API GDI, которая позволяет «напрямую» рисовать в окно, в том числе текст.
Высокоуровневые среды Borland Delphi и CBuilder, Microsoft MFC значительно упрощают программирование оконных приложений Windows.
Неизвестный
11.06.2009, 19:29
общий
Спасибо! И такой вопрос (тоже может быть некорректным - я новичок в этом деле): если в windows написать консольное приложение, то в нем (в этом приложении) будут работать, прерывания, например, и другие dos и bios-средства?
Неизвестный
11.06.2009, 21:50
общий
В таком случае лучше писать в masm32 - там есть большая куча макросов для обращения к API-функциям, к функциям в стиле С
Взять можно на masm32 v10
Неизвестный
12.06.2009, 09:21
общий
Да-да, именно masm я и буду использовать. Спасибо!!
давно
Посетитель
7438
7205
12.06.2009, 09:23
общий
Vasiliusis:
Вам же ответитили, что в консоли нужно пользоваться "функциями консоли"
Консольная программа в Windows не может пользоваться средствами ДОС.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
12.06.2009, 10:25
общий
А можно ли самому написать какую-нибудь процедуру ввод/вывода на ассемблере вместо "УЖЕ КЕМ-ТО СОЗДАННЫХ, ГОТОВЫХ" API-функций?это меня тоже интересует
Неизвестный
12.06.2009, 10:32
общий
Кстати, Лысков Игорь Витальевич, такой ответ как:

>>в консоли нужно пользоваться "функциями консоли"
>>Консольная программа в Windows не может пользоваться средствами ДОС.

я и хотел услышать, а не поэму на полстраницы - без обид
давно
Посетитель
7438
7205
12.06.2009, 12:45
общий
Да какие обиды...
Пришлось писать поэму, потому что вопрос не был конкретным, а в общем.
Отсюда и прозвучало в ответе не то, что требовалось
Конкретный вопрос был задан уже в мини-форуме, причем после получения реплики чуть выше эксперта Airyashov
Свои процедуры ввода/вывода можно написать, но только надо писать драйвер(ы), рабатающий(ие) на уровне ядра системы, что является далеко не тривиальной задачей...
А чем, собственно не устраивают стандартные функции?
В ДОС-е Вы тоже ж пользовались стандартными сервисами, предоставляемыми через прерывания.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
12.06.2009, 13:11
общий
Просто хочется все знать))) Спасибо. Хорошие ответы
Неизвестный
12.06.2009, 16:26
общий
А вообще, какие книги вы бы порекомендовали по ассемблеру? Любой уровень - от начинающего до суперхакера
Неизвестный
13.06.2009, 01:07
общий
Не претендую на истину, но если у Вас начальный уровень, Вам подойдет практически любая книга Калашников, Зубков, Кип Ирвин - во всех них начальное представление о процессоре 80х86 и программирование под него, без этого сразу трудно будет понять защищенный режим или программирование под более современные ОС. Все команды процессора проще изучать без накрутки лишнего, т.е. под ДОС. А дальнейшее изучение наверное будет строится из реальных задач и ваших интересов.
А знать все это иллюзия, нужно знать где искать и у кого спросить (в том числе где искать) и обязательно смотреть что похожего и как уже сделано. Интересного много это и DDK, SDK и руководства производителей по процессорам, но без базы это увы читать будет не интересно и не полезно (скорее всего). По любой теме много в сети сообщест, форумов и др. ресурсов, где всегда подскажут по более узкой проблеме и направлении её решения.
Есть такой ответ бывалых программистов на вопрос "Какой язык программирования учить?", ответ "Английский" :-)
Неизвестный
13.06.2009, 14:51
общий
Претендуете на истину))) Понятно, спасибо
Неизвестный
13.06.2009, 17:50
общий
Еще говорят, что неплохо бы почитать ДОКУМЕНТАЦИЮ К ПРОЦЕССОРАМ INTEL. Где ж ее такую взять???
Неизвестный
13.06.2009, 18:30
общий
На сервере Intel.com лежит оригинальный англоязычный трёхтомный справочник по архитектуре, набору комманд и программированию процессоров Intel.
Том 1 - Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture
Том 2 - Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual
Том 3 - Intel Architecture Software Developer's Manual, Volume 3: System Programming
Неизвестный
21.06.2009, 10:03
общий
Airyashov, вот вы говорите, что знать все - иллюзия. А как же хакеры, они наверно помнят все на память?
Неизвестный
21.06.2009, 11:02
общий
Ну, в крайнем случае, ТОЧНО помнят, где прочитать
Ну а серьезно, запоминается как-то, хоть и хакером себя не считаю. Полезно, на форумах тусоваться. Там много можно новенького узнать
давно
Посетитель
7438
7205
21.06.2009, 12:33
общий
Согласен полностью с Boriss-ом.
Могу только добавить, что лучше запоминается, когда начинаешь самостоятельно писать программы.
Когда что-то используешь, то оно и в голове как-то само оседает.
А вообще, главное иметь желание и усердие, знать,
где искать ответы на возникающие вопросы, остальное приложится
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа