Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Первое, что можно сделать — выделить фрагменты кода, выполняющие однотипные вычисления, в отдельные процедуры. Такими фрагментами кода являются:
Вычисление
mov ЕАХ,
sub ЕАХ,
push ЕАХ
mov ЕВХ,
xor EDX,
координаты хО
rect.right
rect.left
3
EDX
div EBX
mov ECX, rect.left
add ECX, EAX
mov xO, ECX
а также:

Вычисление координаты yO
mov EAX, rect.bottom
sub EAX, rect.top
push EAX
mov EBX, 3
xor EDX, EDX
div EBX
mov ECX, rect.top
add ECX, EAX
mov yO, ECX

Объединим эти два фрагмента кода так, чтобы вычисления можно было выполнять одной процедурой. Исходный текст такой процедуры (назовем ее
caicLeftTop) представлен далее.
CalcLeftTop proc
push ЕВР
mov ЕВР, ESP
mov EAX, [EBP+12] sub EAX, [EBP+8]
mov EBX, 3
xor EDX, EDX
div EBX mov ECX, [EBP+8]
add ECX, EAX
mov EAX, ECX
pop EBP
ret 8
CalcLeftTop endp

Аналогично можно представить в виде процедуры и фрагменты, при помощи
которых вычисляются координаты xi и yi. Исходный текст процедуры
(назовем ее calcRightBottom) представлен следующим фрагментом
кода:
CalcRightBottom proc push ЕВР
mov ЕВР, ESP
mov EAX, [EBP+12]
sub EAX, [EBP+8]
mov EBX, 3
xor EDX, EDX
div EBX
mov ECX, [EBP+12]
sub ECX, EAX
mov
pop
ret
EAX, ECX
EBP
8 CalcRightBottom endp

Исходный текст обработчика сообщения WMPAINT изменится и будет выглядеть
так, как приведено в листинге 5.15.
Листинг 5.15. Обработчик сообщения WM_PAINT, В котором используются процедуры
cmp uMsg, WM_PAINT
jne next_l
lea EDX, ps
push EDX
push hWnd
call BeginPaint
mov hdc, EAX
lea ESI, rect
push ESI
push hWin
call GetciientRect

Вычисление координаты хО
push rect.right
push rect.left
call CalcLeftTop
mov xO, EAX

Вычисление координаты yO
push rect.bottom
push rect.top
call CalcLeftTop
mov yO, EAX

Вычисление координаты xl
push rect.right
push rect,left
call CalcRightBottom
mov xl, EAX

Вычисление координаты yl
push rect.bottom
push rect.top
call CalcRightBottom
mov yl, EAX
push yl xl yO xO Ellipse
lea EDX, ps
push EDX
push hWnd
call EndPaint
ret


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru