Файл: 15. Простой двухпроходной ассемблер.pdf

ВУЗ: Не указан

Категория: Учебное пособие

Дисциплина: Программирование

Добавлен: 30.10.2018

Просмотров: 792

Скачиваний: 13

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

просмотреть  вспомогательную  таблицу  с  несформированными 

командами 

 

выполнить  поиск  каждого  символического  имени  из  этой  таблицы  в 

ТСИ 

 

если имя в ТСИ не найдено, сгенерировать сообщение об ошибке типа 

“Неопределенное имя” 

 

если  имя  найдено,  извлечь  из  ТСИ  назначенный  имени  адрес  и 

заменить этим адресом нулевое операндное поле 

 

сформировать  окончательный  вид  машинной  команды  с  указанием 

используемого способа адресации 

 

сохранить  созданный  код  в  виде  объектного  модуля  некоторого 

формата 

 

В  простейшем  случае  выходной  объектный  модуль  должен  содержать 

следующую минимально необходимую информацию: 

 

имя модуля 

 

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

значение переменной СА 

 

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

 

набор данных во внутреннем представлении 

 

набор машинных команд в двоичном коде 

 

Такая структура объектного модуля предполагает его автономность, т.е. 

отсутствие  компоновки  с  другими  модулями.  Более  сложную  структуру 

должны  иметь  модули,  предназначенные  для  последующего  объединения 

(компоновки) в единый исполняемый модуль.  

 


background image

 

 Практические задания к теме №15. 

Задание 1. Создать Windows-приложение для визуальной иллюстрации 

логики работы двухпросмотрового ассемблера 

Исходные данные: 

 

набор  основных  команд  процессора  (8-10  команд),  собранных  в 

Таблицу Кодов Операций (ТКО) 

 

основные  псевдокоманды-директивы  (объявление  данных,  описание 

внешних имен и ссылок) 

 

небольшой  исходный  текст  на  языке  ассемблера  (5-6  команд,  2-3 

псевдокоманды, 3-4 метки) 

Результаты работы: 

 

промежуточные  (после  первого  прохода):  Таблица  Символических 

Имен  (ТСИ),  вспомогательная  таблица  с  частично  сгенерированными 

командами 

 

окончательные:  основные  разделы  объектного  модуля  (заголовок, 

таблица  перемещений,  таблицы  внешних  и  общедоступных  имен, 

тело), сообщения об ошибках 

Порядок работы. 

Работа  выполняется  в  несколько  этапов  с  постепенным  наращиванием 

возможностей ассемблера 

Этап 1. Простейший ассемблер для создания модулей в абсолютном 

формате 

 

создать основную форму, разместив на ней 3 панели и меню из двух 

команд 

 

в левой панели разместить 2 строковые сетки (компонент TStringGrid) 

для исходного текста и ТКО, и строку ввода для задания адреса 

загрузки 

 

в средней панели разместить 3 строковые сетки для вспомогательной 

таблицы, ТСИ и списка ошибок первого прохода 


background image

 

в правой панели разместить 2 строковые сетки для заголовка 

объектного модуля и сообщений об ошибках, а также - список для 

созданного машинного кода 

 

команды меню должны запускать поочередно первый и второй 

проходы  

 

реализовать логику первого прохода в обработчике соответствующей 

команды 

 

ввести в сетки левой панели исходные данные, задать адрес загрузки и 

проверить работоспособность кода для нескольких примеров (в том 

числе –  при наличии ошибок) 

 

реализовать логику второго прохода в соответствующем обработчике и 

проверить его работоспособность 

Этап 2. Создание программ в перемещаемом формате 

 

добавить в правую панель список для запоминания адресов команд, 

операнды которых должны настраиваться при компоновке (таблица 

перемещений) 

 

изменить логику второго прохода для возможности формирования 

таблицы перемещений  

 

проверить работоспособность кода для нескольких вариантов 

исходного текста 

Этап 3. Раздельное ассемблирование модулей 

 

расширить исходный текст, добавив псевдокоманду EXTRN для 

задания двух имен как внешних и псевдокоманду PUBLIC для задания 

1-2 общедоступных имени 

 

изменить логику первого прохода: добавить обработку псевдокоманд 

описания общедоступных и внешних имен, добавить в сетку для ТСИ 

столбец для запоминания признака общего имени 

 

добавить в правую панель сетку для отображения таблицы внешних 

имен и сетку для отображения таблицы общедоступных имен 


background image

 

изменить логику второго прохода: ввести проверку символических 

операндов как внешних имен, добавить формирование таблицы 

внешних имен и таблицы общедоступных имен 

 

проверить работоспособность созданного кода на нескольких примерах 

 

добавить функцию сохранения объектного кода в текстовом (для 

наглядности) файле в  полном перемещаемом формате 

Рекомендации по использованию компонента TStringGrid 

При визуальном проектировании формы надо с помощью Object Inspector 

установить для сетки-таблицы следующие опубликованные свойства: 

  ColCount и RowCount – в значения, равные числу столбцов и строк 

  DefaultRowHeight (высота строки) – в 15 пикселов 

  Options / goEditing (возможность редактирования сетки 

пользователем) – в true (только для двух входных таблиц!) 

  ScrollBars – в значение ssNone (отключение полос прокрутки) 

  FixedCols и FixedRows – в значение 0 (нет фиксированных строк и 

столбцов) 

Кроме того, программно доступны следующие свойства: 

  Col, Row – координаты текущей активной клетки 

  Cells – индексируемый двумерный массив клеток 

  Cols –  одномерный массив столбцов в виде строковых объектов (типа 

TStrings

  Rows – одномерный массив строк в виде строковых объектов (типа 

TStrings

Рекомендации по обработке строк 

 

Для сравнения двух строк можно использовать стандартную функцию 

CompareText(строка, строка), которая возвращает 0 при совпадении 

строк. При этом регистр НЕ учитывается. Параметр строка 

устанавливается как значение соответствующей клетки необходимой 

таблицы 


background image

 

В клетках сетки-таблицы находится текстовая информация, поэтому 

для выполнения арифметических операций с 16-ричными адресами  

надо строку преобразовать в целое число с помощью функции   

StrToInt ( '$'+текст ). Здесь префикс  $  является признаком 16-

ричного целого числа. Обратное преобразование целого числа в 

текстовую строку в 16-ричном представлении выполняется функцией  

IntToHex ( число, 8 ), где 8 задает количество 16-ричных цифр в числе.