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

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


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





Процедуру SumTwo можно легко переделать для использования указателей вместо переменных. При передаче параметров через стек исходный текст процедуры будет выглядеть так, как показано в листинге 2.6.
Листинг 2.6. Обработка параметров-указателей в процедуре SumTwo
SumTwo proc
push ЕВХ
push EBP
mov EBP, ESP
mov EAX, DWORD PTR [EBP+12]
mov EBX, DWORD PTR [EBP+16]
mov EAX, [EAX]
add EAX, [EBX]
pop EBP
pop EBX
ret 8
SumTwo endp

Фрагмент кода основной программы для вызова процедуры SumTwo тоже изменится (листинг 2.7).
Листинг 2.7. Передача указателей в процедуру через стек
.data
SUM DD О
II DD 32
12 DD -43
. code
start:
push offset II
push offset 12
call SumTwo
mov SUM, EAX

При анализе исходного текста процедуры SumTwo видно, что для извлечения операндов требуются дополнительные команды. Кроме того, в процедуре, использующей указатели, как правило, необходимо задействовать дополнительные регистры, сохранив перед этим их содержимое в стеке.

Здесь не рассматривается способ передачи параметров с использованием общих областей памяти. Этот способ используется только MS-DOS приложениями и прямых аналогов в Windows не имеет. Вместо этого в операционных системах Windows для межпрограммных взаимодействий используется метод отображения файлов в память.

В "старой доброй" MS-DOS для иллюстрации работы приложений использовалось обычное окно командного процессора, часто называемое DOS- окном. Создавать и отображать такое окно было легко, для этого достаточно было вызвать одну из системных функций, выводящую что-либо на экран. Для того чтобы сделать то же самое в Windows, нам придется, несколько опережая события, познакомиться с принципом работы консольных приложений в этой операционной среде.
Подробное рассмотрение консольных приложений представлено в главе 5, сейчас же ограничимся только теми сведениями, которые необходимы, чтобы в общих чертах понять работу программного кода. Программный код каркаса или шаблона такого приложения довольно прост по сравнению с полнофункциональными графическими приложениями Windows. Мы разработаем два шаблона классического консольного приложения, которые и будем использовать для демонстрации примеров этой главы. Даже если что-то и будет непонятно в исходном тексте программ консоли, можно пропустить описание, тем более что это не помешает анализу примеров.

Один из шаблонов консольного приложения написан целиком на ассемблере и использует функции интерфейса прикладного программирования API операционной системы Windows. Обработка данных в такой программе выполняется при помощи команд ассемблера, а преобразование результата такой обработки в формат, удобный для отображения на экране дисплея, выполняется функциями WIN API. Такие приложения мы будем использовать в основном, для работы с целочисленными и строковыми переменными.

Второй шаблон приложения консоли мы разработаем с использованием мастера приложений Delphi 7. Каркас программного кода при использовании такого метода получается очень простым и будет понятен всем программистам без исключения: как поклонникам ассемблера, так и сторонникам языка С. В таком приложении вычислительные алгоритмы на языке ассемблера реализуются в виде процедур в теле основной программы.
Это позволяет без ограничения общности работать с такими процедурами так же, как и с обычными ассемблерными программами. Консольные приложения на Delphi позволяют более гибко выполнять операции преобразования и ввода-вывода любых данных числового или текстового типа.

Мы будем рассматривать оба типа консольных приложений для отображения результатов работы наших демонстрационных программ.
Разработаем первый вариант консольного приложения, где будем использовать функции WIN API. Консольное приложение Windows представляет собой один из классов 32-разрядных приложений, в которых используется оконный интерфейс для работы в текстовом режиме. По внешнему виду консольное окно Windows очень сильно напоминает окно приложения MSDOS. Проведем краткий сравнительный анализ приложений, работающих в MS-DOS и в Windows.
Возьмем классический вариант консольного приложения — программу, выводящую строки "Привет, мир!". В MS-DOS текст 16-разрядного приложения выглядел бы так, как показано в листинге 2.8.

Листинг 2.8. Консольное приложение MS-DOS
.model small
.stack lOOh
. data
message DB "Привет, мир!", О
lmessage EQU $-message
. code
main proc
mov AX, @data
mov DS, AX
mov AH, 4Oh
mov DX, offset message
mov HX, 1
mov CX, lmessage
int 21h
mov AX, 4C00h
int 21h
main endp
end


 
 
 

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