Как я уже сказал вначале, впервый раз вы создадите очень простую программу.Мы начинаем писать наш код в разделе .code.Это показывает компилятору , что мы собираемся написать некоторый код.Но это еще не всё.Мы должны показать где "настоящая" программа начинается при помощи вводного слова.Я назову это "start".В конце программы вы дождны показать компилятору, где ваша программа заканчивается.Вы можете это сделеать при помощи "end start".
.code
start:
;Здесь будет наш код
end start
Вы видите , что это давольно легко.Теперь мы должны вызвать некоторые из функций windows, о которых я говорил вначале.Функции windows называются API. Проблема в том, что вы должны знать параметры, которые ожидает API! Есть один главный документационный пакет в help-файле . Он называется: "win32.hlp". Вы можете скачать его с
www.nan32asm.cjb.net
Если он уже у вас есть, тогда откройте его пожалуйста, нажмите на "index" и впишите MessageBox.Там вы найдете документацию о параметрах.Вот его пример.Т.к. win32.hlp изначально был создан для с++ его синтаксис следующий:
MessageBox функция создает,выводит всплывающее окно.Всплывающее окошко содержит заданнное приложение сообщение и заголовок, плюс любую комбинацию из заданных иконок и нажимающихся кнопок.
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
Хорошо, прежде всего вызов в ассемблере.API вызывается при помощи команды INVOKE.Параметры разделяются запятыми.
INVOKE MessageBox,0,ADDR ourmessage,ADDR ourtitle,MB_OK
Первый параметр должен быть заголовком окна хозяина.Но у нас нет никаких окон в нашей программе,так что мы устанавливаем параметр на ноль.Windows требует адрес строки окна, как второй параметр, и адрес заколовка строки как третий параметр.Четвертый параметр это стиль всплывающего окна.В нашем примере всплывающее окошко будет иметь всего лишь кнопку "ОК".Есть и другие константы, которые вы можете использовать. "ourmessage"(наше сообщение) и "ourtitle"(наш заголовок) это две переменные, которые вы должны , конечно же,объявить в разделе .data. Функция требует адрес строки , так, что вам нужно использовать ADDR команду.Вам надо использовать ADDR команду, каждый раз как она нужна.
Хорошо,когда всплывающее окошко будет показано, программа будет ждать пока вы не нажмете кнопку "ОК".Мы хотим закончить программу и выгрузить ее из памяти после показа всплывающего окна, не так ли?Это может быть сделало при помощи следующего API:
INVOKE ExitProcess,0
И так, после показа всплывающего окна , программа включается. После того как пользователь нажимает кнопку "ОК", всплывающее окно автоматически удаляется и программа продолжает выполнение своего кода. В нашем случае это ExitProcess API , который закрывает нашу программу. Ваша программа теперь должна выглядеть примерно так:
.386
.model flat, stdcall
option casemap :none
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
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
.data
ourmessage db "Это сообщение!",0
ourtitle db "Это заголовок сообщения!",0
.code
start:
invoke MessageBox,0,ADDR ourmessage,ADDR ourtitle,MB_OK
invoke ExitProcess,0
end start
Хорошо, сохраните файл как "part1.asm" в вашей C:\masm32\bin директории.Затем выберите "Project" из меню и нажмите "Build All"(скомпилировать).Окно DOS-а должно быть открыто и показано,если в программе были допущены какие либо ошибки.Если все прошло успешно, выберите "Run Program"(запустить программу) из меню "Project".Вы должны увидеть всплывающее окно с текстом!Вот и всё!!!
Теперь, у вас должно быть 3 файла вашего проекта в ваше C:\masm32\bin директории:
part1.asm - Исходный код
part1.obj - Скомпилированный исходный код
part1.exe - Скомпилированный и пролинкованный исходный код-исполняемая программа
Заключение
Я надеюсь вам понравилась первая часть серии моих туториалов!В следующей части вам будут объеснены основные команды asm.Вам будут представлены некоторые вычисления а также результат будет показан во вслывающем окне.
Если у вас есть какие-либо вопросы к переводчику пишите на emadan@hotbox.ru
Если же у вас есть какие-то проблемы, то пишите автору: nop-erator@gmx.net
Удачного вам дня!
All right translated 2001-2002 Duker®
Этот туторал перевёл Евгений Мадан emadan@hotbox.ru - Duker на форуме http://win32asmboard.cjb.net
Туториал по ассемблеру NOP-erator'а #2
(перевёл Евгений Мадан)
Вступление
Здраствуйте, и добро пожаловать в мой второй туториал.Как я уже сказал в заключении первой части, эта часть будет об основных команд ассемблера, которые вам понадобятся, например, вписать переменную и сделать некоторые математические действия и т.д.
Начало
Надеюсь, что у вас уже есть все нужные инструменты.Мы собираемся назвать наш второй проэкт "part2",не удивительно, не так ли?:)Хорошо, пожалуйста запустите QEditor и вставьте скелет стандартной программы.Вот он:
.386
.model flat, stdcall
option casemap :none
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
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
.const
.data
.data?
.code
start:
invoke ExitProcess,0
end start
Прежде всего, я должен объяснить вам несколько основ ассмблера.......
Несколько основ ассмблера
Если вы когда нибудь программировали на языках высокого уровня, например Delphi, вы все знаете как сложить два числа.Это может выглядеть примерно так:
результат:=число1+число2;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.