Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Другие методич. материалы / Лабораторная работа "Изучение среды и отладчика ассемблера"

Лабораторная работа "Изучение среды и отладчика ассемблера"



57 вебинаров для учителей на разные темы
ПЕРЕЙТИ к бесплатному просмотру
(заказ свидетельства о просмотре - только до 11 декабря)


  • Информатика

Поделитесь материалом с коллегами:

Методические указания к выполнению лабораторных работ по МДК 01.01 «Системное программирование»

для специальности 09.02.03 «Программирование в компьютерных системах»


Лабораторная работа №5

Тема: «Изучение среды и отладчика ассемблера»

Цель работы: ознакомление с общими принципами построения программы на языке ассемблер.

Ход работы:

  1. Изучить теоретическую часть ( дополнительная информация в файле Структура COM и EXE файлов.docx)

  2. Выполнить задание в соответствии с указаниями

  3. Ответить на контрольные вопросы

  4. Предъявить преподавателю результаты работы: проект и исходный код

  5. Оформить отчет в соответствии с ходом работы

Теоретическая часть:

1.1 Структура ассемблерной программы

Каждый язык программирования имеет свои особенности. Язык ассемблера - не исключение. Традиционно первая программа выводит приветственное сообщение на экран ‘Hello World’.

В отличие от многих современных языков программирования в ассемблерной программе каждая команда располагается на ОТДЕЛЬНОЙ СТРОКЕ. Нельзя разместить несколько команд на одной строке. Не принято, также, разбивать одну команду на несколько строк.

Язык ассемблера является РЕГИСТРОНЕЧУВСТВИТЕЛЬНЫМ.Т. е. в большинстве случаев нет разницы между большими и малыми буквами. Команда может быть ДИРЕКТИВОЙ - указанием транслятору. Они выполняются в процессе превращения программы в машинный код. Многие директивы начинаются с точки. Для удобства чтения программы они обычно пишутся БОЛЬШИМИ БУКВАМИ. Кроме директив еще бывают ИНСТРУКЦИИ - команды процессору. Именно они и будут составлять машинный код программы.

1.2 Процесс обработки программы на языке ассемблера

Весь процесс технического создания ассемблерной программы можно разбить на 4 шага (исключены этапы создания алгоритма, выбора структур данных и т.д.).

Набор программы в текстовом редакторе и сохранение ее в отдельном файле. Каждый файл имеет имя и тип, называемый иногда расширением. Тип в основном используется для определения назначения файла. Например, программа на C имеет тип C, на Pascal - PAS, на языке ассемблера - ASM.

Обработка текста программы транслятором. На этом этапе текст превращается в машинный код, называемый объектным. Кроме того, есть возможность получить листинг программы, содержащий кроме текста программы различную дополнительную информацию и таблицы, созданные транслятором. Тип объектного файла - OBJ, файла листинга - LST. Этот этап называется ТРАНСЛЯЦИЕЙ.

Обработка полученного объектного кода компоновщиком. Тут программа "привязывается" к конкретным условиям выполнения на ЭВМ. Полученный машинный код называется выполняемым. Кроме того, обычно получается карта загрузки программы в ОЗУ. Выполняемый файл имеет тип EXE, карта загрузки - MAP. Этот этап называется КОМПОНОВКОЙ или ЛИНКОВКОЙ.

Запуск программы. Если программа работает не совсем корректно, перед этим может присутствовать этап ОТЛАДКИ программы при помощи специальной программы - отладчика. При нахождении ошибки приходится проводить коррекцию программы, возвращаясь к шагу 1. Таким образом, процесс создания ассемблерной программы можно изобразить в виде следующей схемы. Конечной целью, напомним, является работоспособный выполняемый файл HELLO. EXE.

hello_html_m3f7b9373.png

1.3 Особенности создания ассемблерной программы в среде эмулятора EMU8086

Этот программный продукт содержит все необходимое для создания программы на языке Assembler.

Пакет Emu8086 сочетает в себе продвинутый текстовый редактор, assembler, disassembler, эмулятор программного обеспечения (Виртуальную машину) с пошаговым отладчиком, примеры.

1.4 Правила оформления ассемблерных программ

При наборе программ на языке ассемблера придерживайтесь следующих правил:

директивы набирайте большими буквами, инструкции - малыми;

пишите текст широко - не скупердяйничайте;

не выходите за край экрана, т.е. не делайте текст шире 80 знаков - его не удобно будет редактировать и печатать;

для отступов пользуйтесь табуляцией (клавиша TAB);

блоки комментариев задавайте с одинаковым отступом. Оптимальной считается такая строка:

movax,<пробел>bx< (1-3) TAB>; <пробел>текст комментария

Количество табуляций перед комментарием определяется длиной аргументов команды и может быть от 1 до 3. По мере знакомства с синтаксисом языка будут приводиться дополнительные правила.

Задание 1. Работа с эмулятором Emu8086

Emu8086 сочетает в себе мощный редактор исходного кода, ассемблер, дизассемблер, программный эмулятор (виртуальный ПК) с отладчиком и поэтапное обучение. Эта программа компилирует исходный код и выполняет его с помощью эмулятора шаг за шагом.

1. Запустите эмулятор и щелкните на кнопку new

hello_html_22564db8.png

2. Выберите тип исполняемого файла:

hello_html_71846c39.png

Директивы, определяющие тип исполнимого файла:

#MAKE_COM#

#MAKE_BIN#

#MAKE_BOOT#

#MAKE_EXE#

Вы можете вставить эти директивы в исходный код для определения нужного вам типа исполнимого файла.

Описание типов исполнимых файлов:

#MAKE_COM# - самый старый и самый простой формат исполнимого файла. Такие файлы загружаются с префиксом 100h (256 байтов).

#MAKE_EXE# - более "продвинутый" формат исполнимого файла. Не ограничены размер и количество сегментов.

#MAKE_BIN# - простой исполнимый файл.

#MAKE_BOOT# - эта директива копирует первую дорожку дискеты (загрузочный сектор).

3. Выберите "examples"- (Hello,world) из меню "File".

4. Щелкните кнопку [emulate] (или нажмите клавишу F5).

5. Щелкните кнопку [Single Step] (пошаговый режим) (или нажмите клавишу F8), и наблюдайте за выполнением кода.

hello_html_m2dd93daf.png

В окне памяти: первая строка - смещение, вторая строка - значение hexadecimal, третья строка - десятичное значение, и последняя строка - значение символа ASCII.

Кнопка [Single Step] выполняет команды, один за другим останавливающие после каждой команды.

[Run] кнопка выполняет команды один за другим с задержкой, установленной задержкой шага между командами.

6. Дважды щелкните на текстовых полях регистра - открывается окно "Extended Viewer " со значением того регистра, преобразованного ко всем возможным формам. Вы можете изменять значение регистра непосредственно в этом окне.

7. Дважды щелкните на элементе списка памяти - открывается " Extended Viewer" со значением WORD, загруженным со списка памяти в выбранном местоположении.

Менее существенный байт - в младшем адресе: LOW BYTE загружен от выбранной позиции и HIGH BYTE от следующего адреса памяти. Можно изменять значение слова памяти непосредственно в окне "Extended Viewer", можно изменять значения регистров во времени выполнения, печатая по существующим значениям.

Кнопка [Flags] позволяет рассматривать и изменять флажки на времени выполнения.

В окне эмулятора вы можете запустить вашу программу на выполнение целиком (кнопка RUN) либо в пошаговом режиме (кнопка SINGLE STEP). Пошаговый режим удобен для отладки. Ну а мы сейчас запустим программу на выполнение кнопкой RUN. После этого (если вы не сделали ошибок в тексте программы) вы увидите сообщение о завершении программы (рис. 1.3). Здесь вам сообщают о том, что программа передала управление операционной системе, то есть программа была успешно завершена. Нажмите кнопку ОК в этом окне и вы увидите, наконец, результат работы вашей первой программы на языке ассемблера (рис. 1.4).

hello_html_5c42ba7e.png

Рис. 1.3. Сообщение о завершении программы.

hello_html_6a021bea.png

Рис. 1.4. Ваша первая программа выполнена.

Задание 2. Разработка программы типа com на языке ассемблер

  1. Щелкните на кнопку New, выберите com и введите в строке «add your code here» следующие команды:

hello_html_782d018b.png

Рассмотрим исходный текст программы:

1 строка ORG 100h устанавливает значение программного счетчика (IP) в 100h, потому что при загрузке СОМ-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.

2 строка Метка BEGIN: располагается перед первой командой в программе и будет использоваться в директиве END (Begin - англ. начало; end - конец), чтобы указать, с какой команды начинается программа.

Вообще вместо слова BEGIN можно было бы использовать что-нибудь другое. Например, START:. В таком случае, нам пришлось бы и завершать программу END START.

Строки (3) - (5) выводят на экран сообщение “Hello”.

Команда MOV DX, OFFSET MESSAGE помещает в регистр DX смещение метки MESSAGE относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода. OFFSET (по-английски - это смещение). Когда, при ассемблировании, Ассемблер дойдет до этой строки, он заменит OFFSET MESSAGE на АДРЕС (смещение) этой строки в памяти. Если мы запишем OFFSET MESSAGE (хотя, правильнее будет MOV DX, WORD OFFSET MESSAGE), то в DX загрузится не адрес (смещение), а первые два символа нашей строки (в данном случае "He"). Так как DX - шестнадцатиразрядный регистр, в него можно загрузить только два байта (один символ всегда один байт).

Команда INT 21H вызывает системную функцию DOS (int от англ. interrupt - прерывание). Прерывание MS-DOS - это своего рода подпрограмма (часть MS-DOS), которая находится постоянно в памяти и может вызываться в любое время из любой программы. Эта команда - основное средство взаимодействия программ с операционной системой. В примере вызывается функция DOS (строка 7) - вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS: DX, до первого встречного символа $. При запуске СОМ-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был подготовлен предыдущей командой.

6 строка Команда RET пользуется обычно для возвращения из процедуры. DOS вызывается COM-программы так, что команда RET корректно завершает программу.

7 строка определяет строку данных, содержащую текст “ Hello ", управляющий символ ASCII возврат каретки с кодом ODh, управляющий символ ASCII перевод строки с кодом 0Ah и символ $, завершающий строку. Первое слово (message - сообщение) - название сообщения. Оно может быть любым (например, mess или string и пр). Управляющие символы (ODh и 0Ah) переводят курсор на первую позицию следующей строки.

8 строка директива END завершает программу, одновременно указывая, с какой метки должно начинаться ее выполнение.

2. В качестве дополнительного примера создадим еще одну строку, которую назовем message1. Затем, начиная со строки (6) вставим следующие команды и скомпилируем программу заново.

hello_html_79b39f69.png

Задание 3. Создание программы типа *. ЕХЕ с использованием простых арифметических действий

Простые арифметические операторы.

1. Сложение.

Команда ADD (Addition - сложение (гл. to add - сложить)) осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды ADD можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду ADD можно использовать для сложения как обычных целых чисел, так и двоично-десятичных (с использованием регистра АХ для хранения результата). Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.

hello_html_m2e23672.png

Примеры:

mov al,10; загружаем в регистр AL число 10

add al,15; al = 25; al - приемник, 15 - источник

mov ax,25000; загружаем в регистр AX число 25000

add ax,10000; ax = 35000; ax - приемник, 10000 - источник

mov cx, 200; загружаем в регистр CX число 200

mov bx,760;а в регистр BX - 760

add cx,bx; cx = 960, bx = 760 (bx не меняется); cx - приемник, bx - источник

2 Вычитание.

Команда SUB (Subtraction - вычитание) вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если команду вычитания записать в общем виде

SUB операнд1, операнд2

то ее действие можно условно изобразить следующим образом:

операнд1 - операнд2 - > операнд1

В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.

hello_html_m28ac3c1d.png

Примеры:

mov al,10

sub al,7 - --> al = 3; al - приемник, 7 - источник

mov ax,25000

sub ax,10000 - --> ax = 15000; ax - приемник, 10000 - источник

mov cx,100

mov bx,15

sub cx,bx - --> cx = 85, bx = 15 (bx не меняется); cx - приемник, bx - источник

3 Инкремент (увеличение на 1).

Команда INC (Increment - инкремент) прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово.

Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF. Команда не воздействует на флаг CF; если требуется воздействие на этот флаг, необходимо использовать команду Add Op,l.

Команда INC (Increment - инкремент) увеличивает на единицу регистр или значение операнда в памяти.

Она эквивалентна команде ADD источник, 1 только выполняется гораздо быстрее.

hello_html_3683ead.png

Примеры:

mov al,15

inc al - --> теперь AL = 16 (эквивалентна add al,1)

mov dh,39h

inc dh - --> DH = 3Ah (эквивалентна add dh,1)

mov cl,4Fh

inc cl - --> CL = 50h (эквивалентна add cl,1)

4 Декремент (уменьшение на 1).

Команда DEC (Decrement - декремент) вычитает 1 из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF.

Она эквивалентна команде SUB источник, 1 только выполняется гораздо быстрее.

hello_html_3683ead.png

Примеры:

mov al,15

dec al - --> теперь AL = 14 (эквивалентна sub al,1)

mov dh,39h

dec dh - --> DH = 38h (эквивалентна sub dh,1)

mov cl,4Fh

dec cl - --> CL = 4Dh (эквивалентна sub cl,1)

3. 2. Создание программ производящих сложение и вычитание.

1. Щелкните на кнопку New, выберите Exe и введите в строке «add your code here» следующие команды для расчета выражения:

(( 5 + ( AL – AH ) ) – BH ) + BL где AL=9, BL=3, AH=4, BH=6.


: ( № + AL ) – ( BH + AH ) – BL

hello_html_5c5b0dad.png

Для вывода результирующего значения в 10-ричной системе счисления добавьте следующий код:

hello_html_m71b3c955.png

Контрольные задания:

Произвести расчет выражений:

1) ( № + AL ) – ( BH + AH ) – BL

2) ( ( BH + ( № – AH ) ) – BL ) + AL

где № - порядковый номер по журналу, AL=9, BL=3, AH=4, BH=6.

Контрольные вопросы:

1. Характеристика структуры файла типа *.com?

2. Какова структура ассемблерной программы?

3. С какой целью в код программы на ассемблере для DOS вводится строка ORG 100h?

4. Назначение команды MOV?

5. Прерывания 21h и 20h. Назначение?

6. Сущность и целесообразность использования команды RET вместо прерывания 20h?

6. Символ ‘$’ методика применения?

7. Связка “BEGIN: - END BEGIN". Правила применения?

8. Каковы этапы получения выполняемого файла?





57 вебинаров для учителей на разные темы
ПЕРЕЙТИ к бесплатному просмотру
(заказ свидетельства о просмотре - только до 11 декабря)


Автор
Дата добавления 04.10.2016
Раздел Информатика
Подраздел Другие методич. материалы
Просмотров28
Номер материала ДБ-236191
Получить свидетельство о публикации
Похожие материалы

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