- •Программирование
- •Синтаксис языка Ассемблера
- •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 * строка)
Int MessageBox (hwnd hWnd, char * сообщение, char * заголовок, int стиль) вывод диалогового окна с текстовым сообщением и одной-двумя-тремя кнопками (см. Тему«Стандартные диалоги»)
Int wsprintf (char * строка, char * образец, …) формирование текстовой строки по образцу
Пример. Формирование строки вида (x,y)
.data
Obrazec db "(%d,%d)",0
.data?
Stroka db 20 dup (?)
.code
push y ; wsprintf(Stroka,Obrazec,x,y)
push x
push offset Obrazec
push offset Stroka
call wsprintf
add esp,16 ; выровнять стек
Функции интерфейса графических устройств
HWND GetDesktopWindow() получить дескриптор окна Рабочего стола
HDC GetWindowDC(HWND hWnd) получить дескриптор контекста устройства, связанного с заданным окном
Int ReleaseDc(hwnd hWnd,hdc hDc) освободить заданный дескриптор контекста устройства, связанный с заданным окном
Пример. Получить дескриптор контекста устройства, связанного с Рабочим столом
.data?
hWnd dd ?
hDC dd ?
.code
call GetDesktopWindow ; hWnd=GetDesktopWindow()
mov hWnd,eax
push hWnd ; hDC=GetWindowDC(hWnd)
call GetWindowDC
mov hDC,eax
BOOL MoveToEx(HDC hDC,int x,int y,POINT *) сместить графический курсор в точку (x,y)
BOOL LineTo(HDC hDC,int x,int y) провести линию до точки (x,y)
Пример. Построить отрезок (x1,y1) – (x2,y2)
.code
push 0 ; MoveToEx(hDC,x1,y1,NULL)
push y1
push x1
push hDC
call MoveToEx
push y2 ; LineTo(hDC,x2,y2)
push x2
push hDC
call LineTo
BOOL Rectangle(HDC hDC,int x1,int y1,int x2,int y2) построить прямоугольник
BOOL Ellipse(HDC hDC,int x1,int y1,int x2,int y2) построить эллипс
BOOL Polygon(HDC hDC,POINT * Points,int N) построить N-угольник по координатам вершин
BOOL Polyline(HDC hDC,POINT * Points,int N) построить ломаную по координатам вершин
Пример. Построить треугольник
.data
Treug dd 100,100, 150,150, 50,150
.code
push 3 ; MoveToEx(hDC,x1,y1,NULL)
push offset Treug
push hDC
call Polygon
HBRUSH CreateSolidBrush(int Color) создать сплошную кисть заданного цвета
HBRUSH CreateHatchBrush(int Style,int Color) создать штриховую кисть с заданным стилем и цветом
HPEN CreatePen(int Style,int Width,int Color) создать перо с заданными стилем, толщиной, цветом
HGDIOBJ SelectObject(HDC hDC,HGDIOBJ Object) загрузить параметр в контекст устройства
Пример. Установка кисти зеленого цвета
.data?
GreenBrush dd ?
.code
push 00FF00h ; GreenBrush=CreateSolidBrush(0x00FF00)
call CreateSolidBrush
mov GreenBrush,eax
push GreenBrush ; SelectObject(hDC,GreenBrush)
push hDC
call SelectObject
Пример. Установка пера красного цвета
.data?
RedPen dd ?
.code
push 0000FFh ; RedPen=CreatePen(PS_SOLID,3,0x0000FF)
push 3
push PS_SOLID
call CreatePen
mov RedPen,eax
push RedPen ; SelectObject(hDC,RedPen)
push hDC
call SelectObject