Оглавление
Исходники
Программы
Справочник
|
Разминка. Первая программа
Итак, приступим. Нам понадобится сам MASM32, который легко найти в Интернете.
Для своих проектов создадим папку, но, желательно не внутри MASM32. Назовем ее, но так,
чтобы в названии были только английские буквы - компилятор, гад, по-русски не понимает и
при компилляции будут трудности. Если имя не придумывается, то назовем просто ASM. Получилось? Тогда начнем. Немножко теории. В ассемблере
любая программа содержит сегмент данных - он отмечается символом .data, сегмент констант
- .const и сегмент кода - .code. В сегмент данных заносятся переменные, которые будут
доступны из любой точки программы (глобальные переменные). То же самое относится и к
сегменту констант. Тогда в общем виде структура программы имеет вид:
.data - глобальные переменные
.const - константы (по ходу дела не меняются)
.code - исполняемый код прогаммы
start: - его начало и наконец,
end start - его окончание.
MASM32 использует плоскую модель памяти - никаких сегментов памяти нет,
она, в принципе, доступна вся. Об этом - в самом начале программы мы должны
сообщить компиллятору (который сделает их нашего текста исполняемый .ехе файл):
.386 ; процессор
.model flat, stdcall ; 32 разрядная модель памяти
option casemap :none ; различает строчные
и заглавные буквы
Накопленный человечеством опыт собран в библиотеках. Опыт программистов
также собран в библиотеках - динамических и статических. Нам не нужно изобретать
велосипед заново - воспользуемся
тем, что уже есть (по крайней мере, на первых порах).
Windows содержит огромное количество функций в библиотеках динамической компоновки (DLL - dynamic link library),
эти функции часто называют API(Application Programming Interface).
Подключим к нашему проекту библиотеки. Это делается помощью include и includelib так:
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
Если мы впишем в текст программы эти строки, то к нашему проекту будет подключена
библиотека user32. Одной библиотекой, как правило, не обойтись, чаще всего стандартный набор
выглядит так:
; Подключаемые файлы.
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Comctl32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\shell32.inc
include \MASM32\include\oleaut32.inc
; Подключаемые библиотеки.
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Comctl32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\oleaut32.lib
Все понятно? Если не все (или все не) - ничего страшного, потом разберемся.
Едем дальше. Наша первая программа:
--------------------------------------------Линия отреза---------------------------------------------
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
TitleMsg db "Первая программа",0
TextMsg db "Пишем здесь чаво-нибудь, типа - это я сам сделал(а)!" ,0
.code
start:
invoke MessageBox, NULL,ADDR TextMsg,ADDR TitleMsg, MB_OK
invoke ExitProcess, NULL
end start
uild
-------------------------------------Линия отреза-----------------------------------------------------
Аккуратно копируем то, что между линиями отреза (они не должны попасть в копируемую область!),
откравыем MASM32 editor, в меню File выбираем пункт New и вставляем туда скопированное. Теперь сохраним созданный файл
в нашей папке под каким-нибудь название, и, что очень важно, с расширением .asm, ну, например, first.asm. Получилось?
Если нет - то повторим все еще раз (или не раз, пока не получится). Теперь - компиляция, т.е. создание .ехе-файла. В меню
редактора выбираем пункт Project и в нем - пункт Build All. Выдохнули и нажали. Если все сделано правильно, через
какое-то время на экране появится что-то вроде:
Если картинка похожа, то .ехе-файл создан. Открываем нашу папку и находим его. Если папка была сначала
пустой, то после компиляции там три файла - один first.asm - это наш исходник, другой, похожий на использованную
туалетную бумагу - first.obj, и наконец, наш файл first.exe. Щелкаем по нему мышкой. Работает? Если не работает -
ищем, что сделано неправильно, а если работает - то еще похожий пример:
--------------------------------------------Линия отреза---------------------------------------------
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
TextMsg1 db "Здесь - текст, типа - это я сам сделал(а)!" ,0
TextMsg2 db" (чтобы показывать друзьям и знакомым )",0
TextMsg3 db "Copyright © А здесь - свою ФИО., ",13,10,"(полностью, чтобы они поверили)",13,10,"ну и, конечно, -All Right Reserved",0
.code
start:
invoke AboutBox,NULL,NULL,NULL,ADDR TextMsg1,ADDR TextMsg2,ADDR TextMsg3
invoke ExitProcess, NULL
end start
end start
-------------------------------------Линия отреза-----------------------------------------------------
Повторим все то, что мы сделали раньше. Запускается? Для тех, у кого рука дрожит и текст
не копируется, исходники - пример 1 и пример 2
Ну вот, разминка закончена. Тот, кто понял, что MASM32 он уже полностью освоил, может
расслабиться, а для остальных - продолжение на следующей странице...
|
|