АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Call Sum2

Которые будут откомпилированы в машинный код и, фактическиб реализуют вызов процедуры с параметрами.


 

 

Нарисовать стековый кадр этой процедуры.

 

Исходный ESP

R -4 байта
B -4 байта
A -4 байта
Ip возврата -4 байта
Старое EBP -4 байта

 

Забрать возвращенную процедурой сумму в регистр eax…

После выполнения процедуры возвращенное значение находится в ячейке стека R, а указатель стека ESP наодится в «исходном» положении. Значит, копирование в EAX выглядит так:

mov eax, dword ptr [esp – 4]

Словами это можно сказать так: скопировать в ЕАХ двойное слово, находящееся по адресу, на 4 меньшему, чем тот, что сейчас сидит в ESP.

 

…и макросом print показать результат.

print str$(eax),13,10

Здесь str$() – это макрос преобразования числа в строку; 13 и 10 – перевод строки при выводе на консоль.

 

Программа должна иметь программную задержку для просмотра результата

inkey “Нажмите любую клавишу.”

 

Собрать это всё в единую программу.

Берем шаблон учебной программы и вставляем в него подготовленные выше кусочки (показаны красным).

 

include \masm32\include\masm32rt.inc

comment * ===========================

Шаблон минимальной учебной программы

* ===================================

Sum2 PROTO:dword,:dword,:dword

Data

;Точка Д. Описание числовых и строковых переменных

Code

start:

;ТОЧКА А. Команды ассемблера и вызовы макросов

Invoke Sum2, 22, 2014, 0

print str$(eax),13,10

inkey “Нажмите любую клавишу.”

Invoke ExitProcess,0; выход в Windows

Sum2 PROC A:dword, B:dword, R:dword

; команды процедуры

Mov EAX, A

Add EAX, B

Mov R, EAX

Ret

Sum2 ENDP

End start

 

Сохранить исходный текст в файл min7.asm. Откомпилировать buildc min7. Выполнить min7.exe, показать преподавателю.

Вопросы для самопроверки

а) Как выполняется команда сложения ADD? Какие ограничения существуют на ее операнды?

б) Как технически сложить две переменных, которые обе находятся в памяти?

в) Что такое прототип процедуры? По каким правилам он пишется?

г) Кому нужен прототип и как он используется?

д) Во что макрогенератор превратит строчку вызова процедуры макросом invoke?

е) В каких местах исходного текста программы следует размещать описания процедур?

 


 

РЕКОМЕНДОВАННАЯ ЛИТЕРАТУРА

1. Рихтер Дж. WINDOWS для профессионалов: Создание эффективных Win-32 приложений с учетом специфики 64-разрядной версии Windows / Пер. с англ. — 4-е изд. — СПб.: Питер; М.:Издательство «Русская редакция»; 2008 — 720 с., ил.

2. Фролов А., Фролов Г.: Защищенный режим процессоров Intel 286 / 80386 / 80486.— М.: Диалог-МИФИ, 1993.— 234 с.

3. Финогенов К. Г. Win32. Основы программирования.— М.: Диалог-МИФИ, 1999.— 342 с.


1 | 2 | 3 | 4 | 5 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)