Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler.doc
Скачиваний:
10
Добавлен:
20.04.2019
Размер:
12.47 Mб
Скачать

Структура приложения Win32 api

.386

.model flat, stdcall

option casemap:none

include windows.inc

include kernel32.inc

. . .

includelib kernel32.lib

. . .

.data

. . .

.data?

. . .

.code

start:

. . .

push 0

call ExitProcess

end start

Директивы транслятора

.386 система команд процессора (.386, .486, …)

.model flat, stdcall модель сегментации памяти; набор соглашений по передаче параметров в функции

option casemap:none сохранять регистр идентификаторов

include … подключить заголовочный файл

include windows.inc типы данных и константы Windows

kernel32.inc прототипы функций ядра Windows (память, процессы, файлы, каталоги)

user32.inc прототипы функций пользовательского интерфейса Windows (окна, диалоги, кнопки и т.д.)

gdi32.inc прототипы функций интерфейса графических устройств

includelib … подключить библиотеки функций

includelib kernel32.lib функции ядра

includelib user32.lib функции пользовательского интерфейса

includelib gdi32.lib функций интерфейса графических устройств

.data сегмент инициализированных данных содержит объявления переменных

имя d* значение

и массивов

имя d* значение,значение,...

db байт (char)

dw слово (short)

dd двойное слово (int, float)

dq учетверенное слово (long long int, double)

.data? сегмент неинициализированных данных содержит объявления переменных

имя d* ?

и массивов:

имя d* размер dup(?)

.code сегмент кода

end Метка конец текста программы; указание на точку входа в программу

Директивы сегментации памяти могут встречаться в тексте программы в любом порядке неограниченное число раз.

Во время трансляции все фрагменты каждого сегмента объединяются в один в том порядке, в котором они были расположены в исходном тексте.

Пример. Программа «Hello, World

.data

szTitle db "Первая программа",0

szMessage db "Hello, World!",0

.code

start:

push MB_OK + MB_ICONINFORMATION ; стиль окна

push offset szTitle ; адрес заголовка окна

push offset szMessage ; адрес выводимого сообщения

push 0 ; родительское окно

call MessageBox

push 0 ; код завершения программы

call ExitProcess

end start

Функции Windows api Функции Windows api сохраняют значения регистров ebp, ebx, esi, edi и могут модифицировать регистры eax, ecx, edx

Функции ядра Windows

void ExitProcess (int код) завершение работы программы с заданным кодом

void Sleep (int время) приостановить выполнение программы на заданное количество миллисекунд

int lstrlen (char * Строка) вычисляет длину строки

char * lstrcpy (char * Строка1, char * Строка2) копирует Cтроку2 в Строку1

char * lstrcat (char * Строка1, char * Строка2) приклеивает Строку2 к Строке1

int lstrcmp (char * Строка1, char * Строка2) посимвольное сравнение двух строк

(соответствуют стандартным строковым функциям языка С)

Пример. Объединение двух строк

.data

Stroka1 db "Hello, ",0

Stroka2 db "World!",0

.data?

Stroka3 db 20 dup (?)

.code

push offset Stroka1 ; strcpy(Stroka3,Stroka1)

push offset Stroka3

call lstrcpy

push offset Stroka2 ; strcat(Stroka3,Stroka2)

push offset Stroka3

call lstrcat

Функции пользовательского интерфейса Windows

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]