Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
If PrinterSetupDialog1.Execute then
Print; end; {Обработчик событий для кнопки «Выход»} procedure TForm1.Button3Click(Sender: TObject); Begin Close; end; В обработчике событий для кнопки «Выполнить» определяется массив Data. Это необходимо для того, чтобы у программы, написанной на языке ассемблера, была область памяти для свободного доступа и использования. Дело в том, что Windows, работая в защищенном режиме, контролирует использование памяти, запрещая доступ в области, куда загружены системные программы. В общем случае, контролируется доступ в программные области других запущенных программ. В связи с этим нужно позаботиться о том, чтобы Windows выделил программе область памяти, которую можно использовать спокойно, не боясь запрета доступа. Самым протым способом является объявление массива необходимой длины, каким и является массив Data. После того, как все обработчики событий созданы, проект надо откомпилировать, последовательно выбрав в главном меню «Project → Build Project 1» или нажать < Shift >+< F9>. Если есть ошибки, то исправить их. Если ошибок нет, то заготовка проекта для всех лабораторных работ готова и теперь ее надо сохранить в репозиторий. Для этого последовательно выбираем пункты меню «Project → Add to Repository …», после чего появляется окно, изображенное на рисунке 3. Рисунок 3. Окно добавления проекта в репозиторий.
Сделав активной папку «Delphi Projects» нажимаем кнопку «New Category …» и создаем категорию «For Assembler», далее, в поле «Title:» набираем «Для ассемблера», в поле «Description:» набираем «Заготовка для изучения языка ассемблера», в поле «Author:» набираем свою фамилию. После заполнения всех полей нажимаем кнопку «OK». Теперь при открытии нового проекта для выполнения очередной лабораторной работы надо будет выбрать «File → New ► Other …», в появившемся окне, изображенном на рисунке 4, в левой части окна «Item Categories» выбираем папку «For Assembler», а в правой части выбираем значок с подписью «Для ассемблера». Далее открывается окно для выбора папки, где будут располагаться файлы нового проекта. В этом окне надо создать в личном каталоге новую папку с именем, содержащим номер лабораторной работы, например, «Лаб1» и выбрать ее, нажав кнопку «ОК». Будет создан новый проект на основе созданного ранее шаблона, который будет автоматические содержать нужные объекты на форме и запрограммированные обработчики событий. Работа с новым проектом проходит в следующем порядке. Сначала необходимо набрать текст программы на языке ассемблера в ассемблерной вставке обработчика событий кнопки «Выполнить». Можно напомнить, что формат строчки программы на языке ассемблера в общем виде выглядит следующим образом: [метка:] мнемоника команды [1ый операнд[,2ой операнд[,3ий операнд]]] Фрагменты, записанные в квадратных скобках, могут отсутствовать. В качестве меток могут использоваться стандартные метки Pascal объявленные в разделе описания меток lable. Кроме того, без объявления могут использоваться специфические метки вида @@X, где X – любое целочисленное число. После набора всей программы необходимо откомпилировать проект известным способом и устранить все ошибки, найденные компилятором, если такие будут. Далее установить точку останова на первой команде ассемблерной вставки. Для этого поместить указатель мыши на сером поле слева и напротив первой команды ассемблерной вставки и нажать левую кнопку мыши. После этого на сером поле появиться красная точка, а вся строка станет отображаться на цветном фоне (смотри рис. 5) Рисунок 4. Окно выбора типа нового проекта из репозитория.
Рисунок 5. Установка точки останова.
Затем, запустить проект, последовательно выбрав в главном меню «Run → Run» или нажать <F9>. В окне запустившейся программы нажать на кнопку «Выполнить». После остановки программы в точке останова вызвать окно отладчика, для чего последовательно выбрать пункты меню «View → Debug Windows ► CPU Windows► Entire CPU» или нажать < Ctrl>+<Alt>+<C >. После этого откроется окно отладчика, изображенное на рисунке 6.
Окно отладчика состоит из пяти полей. В первом поле отображается текст программы. Первая колонка – адреса расположения каждой ассемблерной команды в сегменте кода, вторая колонка – машинный код, соответствующий ассемблерной команде. Можно заметить, что каждой ассемблерной команде соответствует машинный код разной длины, что характерно для CISC процессоров. Третья колонка – текст на языке ассемблера, который получился при компиляции программы на языке Delphi. Выделенные жирным шрифтом строчки – строчки программы на Delphi, а строчки, отображаемые обычным шрифтом, расположенные под ней – соответствующий ей ассемблерный код. Красная точка слева от первого столбца – точка останова. Еще левее отображается синяя стрелка – указатель на команду, которая сейчас должна будет выполниться. Если текущей командой является команда обращения к памяти, то сверху отображается эффективный адрес ячейки памяти, к которой будет происходить обращение и ее значение. Поле номер 2 служит для отображения содержимого памяти в сегменте данных в виде, так называемого, дампа памяти. В первой колонке выводиться адрес первой ячейки памяти, отображаемой в строке. Во втором столбце отображается информация о значениях восьми последовательных ячеек памяти. В третьем столбце отображается ASCII представление каждого байта в строке. Отображение информации в поле номер 2 можно менять с помощью контекстного меню, представленного на рис. 7, которое вызывается нажатием правой кнопки «мыши», когда она расположена в поле номер 2.
Рисунок 7. Контекстное меню поля номер 2.
Меню «Goto Address …» служит для изменения начального адреса памяти для отображения. На рисунке 8 изображено состояние программы после выполнения одной команды ассемблерной вставки. Текущая команда теперь – загрузка эффективного адреса начала массива Data в РОН EBX. Сверху первого поля видно, что этот адрес равен $0012F2D4 (символ “$” означает, что далее идет шестнадцатеричное представление информации). Это означает, что для отображения информации о значениях ячеек памяти массива Data, в поле номер 2 надо изменить текущий адрес отображения. Для этого надо вызвать контекстное меню, выбрать «Goto Address …», в появившемся окне набрать $0012F2D4 или $12F2D4 и нажать «ОК» (см. рис. 8). После этого начнется отображение информации по этому адресу, как это показано на рисунке 9. Как видно, адреса в первой колонке поменялись и теперь начинаются с указанного нами значения, а значения ячеек памяти по этим адресам равны нулю, как и должно быть, так как первые строчки обработчика событий кнопки «Выполнить» обнуляют массив Data. Меню «Display As» позволяет изменить формат отображения значений ячеек памяти в соответствии с выбранным (см. рис. 10) типом данных.
Рисунок 8. Выбор адреса дампа памяти в поле номер 2.
Рисунок 9. Результат изменения адреса дампа памяти в поле номер 2. Рисунок 10. Изменение формата отображения значений ячеек памяти.
Меню «Search …» позволяет искать нужное значение или последовательности значений в памяти. Меню «Change …» позволяет изменять значение или последовательности значений в памяти. Поле 5 на рисунке 6 полностью аналогично полю 2, только в нем отображается сегмент стека. Синей стрелкой указывается вершина стека. В процессорах Intel P6 стек растет в сторону уменьшения адресов. Поле 3 на рисунке 6 отображает содержимое основных регистров процессора. После выполнения каждой ассемблерной команды в пошаговом режиме или множества команд до точки останова красным цветом отображаются те регистры, значения которых изменились. Поле 4 на рисунке 6 отображает состояние флагов процессора, причем, также как и в поле 3, красным цветом отображаются те флаги, значения которых изменились после выполнения очередной команды. После открытия окна отладчика надо выполнять программу пошагово. Для этого использовать следующие функциональные клавиши: <F8> – выполнить одну инструкцию без захода в подпрограмму; <F7> – выполнить одну инструкцию c заходом в подпрограмму; < Shift >+<F8> – выполнить до следующей команды исходного текста на языке Pascal; <F4> – выполнить до места положения текстового курсора. Выполнение в пошаговом режиме вести до конца ассемблерной вставки, отмечая изменения регистров, флагов ЦПУ и данных в памяти на каждом шаге. После выполнения последней команды ассемблерной вставки, завершить выполнение программы нажатием клавиши <F9>. Если получился ожидаемый результат, то распечатать окно формы с результатами выполнения программы с помощью кнопки «Печать», а затем завершить выполнение программы с помощью кнопки «Завершить». В завершении, распечатать часть программы, содержащую ассемблерную вставку. Для этого, выделить ассемблерную вставку и последовательно выбрать «File → Print …». В появившемся окне отметить поле «Print selected block». Date: 2015-10-19; view: 608; Нарушение авторских прав |