MASM32 - это легко и просто!


     Оглавление

    Исходники

    Программы

    Справочник



Есть вопросы - пишите...

Разминка. Первая программа

     Итак, приступим. Нам понадобится сам 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 он уже полностью освоил, может расслабиться, а для остальных - продолжение на следующей странице...





   В начало    Дальше
MASM32 и OpenGL



Hosted by uCoz