Статьи по Assembler


Минимальное приложение - часть 2


  • стартовав, получить нормальный доступ к ресурсам рабочей среды
  • завершившись, оставить рабочую среду работоспособной
  • Здесь, пожалуй, уместно напомнить про ограниченность тематики сайта: прикладное программирование на masm под windows. Поэтому дальше речь пойдет не о программах вообще, и не о каких-нибудь VxD, а о приложениях, то бишь applications, непосредственно взаимодействующих с операционной системой.

    Сказанное особенно важно для программ на ассемблере, который дает программисту абсолютную власть над компьютером, что, конечно же, подразумевает и абсолютную возможность напакостить. Чем выше язык программирования, тем более обставлены всяческим сервисом процессы запуска и завершения программы, тем более они безопасны, и тем меньше требований к соблюдению соответствующих ритуалов программистом.

    В C/C++, например, запуск и завершение приложения win32 поддерживаются скрытой от прикладного программиста функцией _WinMainCRTStartup, содержащейся в runtime-библиотеке. Именно ее вызывает операционная система при запуске приложения, а уж она, кое-чего поделав, вызывает ту самую WinMain, с которой начинается всякое приложение, базирующееся на win32. (Конечно, строго говоря, запуск приложения посредством вызова _WinMainCRTStartup - это свойство не языка, а операционной среды.) От программиста же требуется, чтобы WinMain была правильно оформлена (включая четыре входных параметра), и завершалась оператором return с кодом выхода типа int.

    В языках программирования более высокого уровня для программиста все еще проще, хотя там уже вряд ли можно говорить о том, что приложение-де "непосредственно взаимодействует с операционной системой". Java, еще более высокий, чем C/С++, уже не использует фиксированное название стартовой функции, да и завершение программы в нем - это просто закрывающая фигурная скобка.

     

    Однако, вернемся к ассемблеру. Вот обещанный текст минимального приложения для win32:

    .386 .model flat,stdcall ExitProcess PROTO :DWORD .code WinMain PROC PUBLIC hinst,prev_hinst,command_line,cmd_show ;... invoke ExitProcess,0 WinMain ENDP end




    - Начало -  - Назад -  - Вперед -



    Книжный магазин