Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Чтобы решить ту же задачу средствами Visual С + + .NET, мы должны прежде
всего изменить имя процедуры в ассемблерном модуле в соответствии с
требованиями компилятора С + + . Напомним, что во всех наших примерах
мы используем соглашение stdcaii. Тогда фрагменты кода, где встречается
процедура addreals, будут выглядеть следующим образом (листинг 3.36).
I Листинг 3.36. Ассемблерная процедура addreals для использования в программе на С++
.386
.model flat
public _addreals@8
. data
SUM DD 0
. code
_addreals@8 proc
push EBX
push EBP
ret 8
_addreals@8 endp
end
За основу приложения в Visual С + + .NET возьмем диалоговое окно, на котором
разместим, как и в Delphi-варианте, три поля редактирования Edit с
тремя элементами статического текста static Text и кнопку Button.
В классе окна объявим процедуру addreals как внешнюю с соответствующими
параметрами:
extern "С" float* _stdcall addreals(float *xl, float *x2);
Свяжем с элементами управления Edit три вещественные переменные xi,
X2 и sumx. Теперь напишем обработчик нажатия кнопки, исходный текст
которого приведен в листинге 3.37.
Листинг 3.37. Обработчик события нажатия кнопки в программе на С++
void CAddTwoRealsinCNETDlg::OnBnClickedButtonl()
// TODO: Add your control notification handler code here
UpdateData(TRUE);
sumX = *addreals(&X1, &X2);
UpdateData(FALSE);
Приложение ожидает ввода переменных xi и X2 в поля редактирования.
Функция updateData с параметром TRUE передает текущие значения
элементов управления в связанные с ними переменные xi и X2. Процедура
addreals получает в качестве параметров адреса этих переменных и возвращает
адрес, по которому находится сумма. Оператор " * " позволяет передать
в переменную sumx сумму двух вещественных чисел.
Последняя команда UpdateData с параметром FALSE передает текущие значения
переменных в связанные с ними элементы управления и обновляет
экран.
Наш следующий пример более сложен и показывает, как можно найти максимальный
элемент в массиве вещественных чисел. Размерность массива
зададим равной 9. Разработаем классическое процедурно-ориентированное
приложение в Visual С + + .NET. В таком приложении обычно присутствуют
два взаимосвязанных фрагмента кода: главная процедура winMain, регистрирующая
класс окна и выполняющая все функции по инициализации экземпляра
окна приложения, и функция обратного вызова (оконная процедура).
Более подробно мы будем рассматривать разработку таких приложений в
главе 4, а сейчас просто используем каркас приложения, построенный для
нас Мастером приложений С + + .NET.
Поиск максимального элемента в массиве вещественных чисел выполним в
ассемблерной процедуре, исходный текст которой представлен в листинге
3.38.
Листинг 3.38. Ассемблерная процедура, выполняющая поиск максимального
элемента в массиве вещественных чисел
.386
.model flat
public _maxreal@8
.data
MAXREAL DD 0
. code
_maxreal@8 proc
push EBX
push
mov
mov
mov
mov
f init
fid
NEXT_CMP:
add
fcom
fstsw
sahf
jne
fid
EBP
EBP,ESP
EBX, DWORD PTR [EBP+12]
EDX, DWORD PTR [EBP+16]
ECX, 1
DWORD PTR [EBX]
EBX, 4
DWORD PTR [EBX]
AX
CHECK_INDEX
DWORD PTR [EBX]
CHECK INDEX:
cmp
je
inc
jmp
FIN:
fwait
fstp
mov
pop
ECX, EDX
FIN
ECX
NEXT CMP
DWORD PTR MAXREAL
EAX, offset MAXREAL
EBP
pop ЕВХ
ret 8
_maxreal@8 endp
end
<< Назад В начало Далее >> |
|