- •Программирование
- •Синтаксис языка Ассемблера
- •Xchg Приемник, Источник
- •Inc Операнд
- •Imul eax, b ; возможна потеря !!!
- •Idiv Источник
- •Стек. Команды работы со стеком
- •Подпрограммы
- •Структура приложения Win32 api
- •Функции Windows api Функции Windows api сохраняют значения регистров ebp, ebx, esi, edi и могут модифицировать регистры eax, ecx, edx
- •Int MessageBox (hwnd hWnd, char * сообщение, char * заголовок, int стиль) вывод диалогового окна с текстовым сообщением и одной-двумя-тремя кнопками (см. Тему«Стандартные диалоги»)
- •Int wsprintf (char * строка, char * образец, …) формирование текстовой строки по образцу
- •Int ReleaseDc(hwnd hWnd,hdc hDc) освободить заданный дескриптор контекста устройства, связанный с заданным окном
- •Арифметический сопроцессор
- •Void FloatToStr(double число, char * строка)
Структура приложения 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