Туториал по Ассемблеру NOP-erator(а) № 1, страница 2

Как я уже сказал вначале, впервый раз вы создадите очень простую программу.Мы начинаем писать наш код в разделе .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;