Как начать программировать на ассемблере A86

Образование

1. Запуск ассемблера а86.

Программа на языке ассемблера а86 транслируется запуском командной строки:

a86.com <prog>.8 [опции]

где <prog>.8 — имя файла с исходным текстом программы (вместо <prog> подставляется конкретное имя файла).

Если трансляция успешна, создаются одноименный файл с расширением com (com-программа) и одноименный файл с расширением sym, содержащий таблицу имен для отладчика d86.

Если обнаружены ошибки, исходный файл копируется в одноименный файл с расширением old, затем в исходный файл вставляются сообщения об ошибках. Каждое сообщение состоит из двух строк: в первой содержится указатель ошибки, во второй — пояснение.

Как начать программировать на ассемблере A86

2. Программирование данных.

Практическое программирование начнем с простейших программ, которые содержат только данные. Подобные программы в будущем могут пригодиться в качестве компонентов более сложных и объемных программ.

Рассмотрим пример.

Допустим, нужно задать в программном коде периодическую последовательность байтов со значениями 0, 1, –2 и –1; Длина последовательности — 2,5 Кбайт. Решение показано в листинге.

Листинг 1. Решение задачи.

start:

dw offset end — start

size equ 5k / 2 ; длина последовательности

r cnt equ size / 4 ; число повторов

dw r cnt

seq db r cnt dup (0, 1, -2, -1)

size equ $ — seq ; длина получившейся последовательности

Повторное определение имени size введено для контроля совпадения ожидаемой (расчетной) длины

последовательности с ее фактическим размером. Проверьте, что произойдет при трансляции, если в var_0.8 между seq и повторным определением size вставить еще один байт.

После трансляции выбранного варианта задания проверьте совпадение результата с готовым решением в файле var_<n>.dat (<n> — номер варианта) при помощи утилиты сотр или fc (с ключом /b). Для рассмотренного варианта номер ноль:

comp var_0.com var_0.dat

ИЛИ

fс /b var_0.com var_0.dat

Примечание.

Полученный com-файл не следует пытаться вызвать на выполнение; с таким же успехом можно переименовать любой текстовый файл (размером не больше 64 Кбайт) в файл с расширением com и запустить его как программу.

Теперь рассмотрим средства отладчика d86, предназначенные для отображения данных, определенных в программе на а86.

Отладчик d86 представляет собой полноэкранную программу для исследования исполняемых com- и ехе-программ для i80x86. При отображении программы отладчик пользуется таблицей имен, которая была сохранена при трансляции в sym-файле. В результате, d86 не только отображает программу в символическом виде, но также позволяет использовать при отладке символические имена, определенные в исходной программе.

Как начать программировать на ассемблере A86

3. Запуск и завершение сеанса отладки.

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

d86 [<file> [<cmd_tail>] ]

где <file> — отлаживаемая программа с расширением com или ехе, <cmd_tail> — параметры командной строки для отлаживаемой программы. Информация о символах, определенных пользователем в отлаживаемой программе, автоматически считывается из одноименного файла с расширением sym.

Выполним трансляцию программы damn.8 и запустим отладку damn.com:

d86 damn.com

Обратите внимание на воспроизведение данных, определенных между инструкцией jmp start и меткой «start:». Отладчик не пользуется исходным текстом программы и поэтому не знает, где были определены данные, а где инструкции. В результате, он пытается все содержимое com-программы расшифровать как набор инструкций и при этом не показывает имен переменных (переменная — это символический адрес данных) — только метки (метка — это адрес инструкции в символическом виде).

Для выхода из отладчика введите команду q и нажмите клавишу < Enter>.

Удалите файл damn.sym и вновь запустите отладку damn.com. Таблицы имен теперь нет, и вместо имени start отладчик ставит адрес в числовом виде.

Теперь продемонстрируем ошибочный запуск. Выйдите из отладчика и войдите вновь следующим образом:

d86 damn.8

Ошибка в том, что отладчику в качестве исполняемой программы передан исходный текст. Отладчик

воспринял файл damn.8 как загрузочный модуль в формате com, поэтому содержимое экрана отличается от того, что отображалось при задании damn.com.

Примечание.

Независимо от расширения (8, asm, com, exe и т. д.), отладчик считает, что файл всегда содержит исполняемый код. Различие между форматами com и ехе устанавливается им по характерной структуре заголовка ехе-файла.

Если признаки такой структуры не выявлены, предполагается формат com.

4. Экран отладчика.

В начале работы d86 генерирует полноэкранное изображение и ожидает ввода команд.

В верхнем левом углу — результат расшифровки машинного кода отлаживаемой программы. В первой колонке выводится адрес первого байта машинной инструкции, во второй — сама инструкция. Красным курсором # отмечена текущая инструкция для выполнения, адрес которой определяется регистром ip (указатель инструкции).

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

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

В верхнем правом углу в начале работы выводятся сведения об авторе a86/d86. При нажатии клавиши <F10>, на этом месте последовательно выводятся:

— текущий статус отладчика;

— продолжение выделенной строки ассемблерного кода;

— статус математического сопроцессора.

Сочетание клавиш <Alt>+<F10>включает режим подсказки. В таком режиме ввод команд сопровождается пояснениями. В исходном состоянии, пока не начат ввод очередной команды, нажатия клавиши <F10> позволяют пролистать перечень команд. Включить/выключить режим подсказки можно в любой момент нажатием комбинации клавиш <Alt>+<F10>.

Оцените статью
ЗнайКак.ру
Добавить комментарий