Gaist-Endruy
( off
)
(
09:46 24-03-2009
)
АЛГОРИТМ
Однопросмотровый макроассемблер
Начало алгоритма
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
МТДС = 0
МНТС = 0
ФЛАГ ВЫХОДА = 0
цикл пока !(ФЛАГ ВЫХОДА) {
чтение следующей строки ВХТ
НАЙДЕНО = поиск кода в МНТ
если (НАЙДЕНО) {
МДИ = 1
УКАЗАТЕЛЬ = индекс из МНТ
Заполнение списка параметров АЛА
цикл {
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
УКАЗАТЕЛЬ ++
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
чтение след. строки из МДТ
подстановка параметров
вставка во ВХТ
} пока !(операция MEND)
иначе если !(операция MACRO) {
вывод строки в ВЫХТ1
если (операция END) ФЛАГ ВЫХОДА = 1
}
иначе {
чтение идентификатора
запись имени и индекса в МНТ
МНТС ++
приготовить массив списка АЛА
запись имени в МДТ
МДТС ++
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
цикл {
чтение следующей строки ВХТ
подстановка индекса операторов
добавление в МДТ
МДТС ++
} пока !(операция MEND)
}
}
конец алгоритма
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
ОПИСАНИЕ АЛГОРИТМА
Gaist-Endruy
( off
)
(
09:47 24-03-2009
)
данный алгоритм является упрощением алгоритма приведенного в [1]. Различие состоит в том, что современные средства интеллектуализации программирования дают нам возможность осуществлять вставки и удаления из крупных массивов с минимальными затратами процессорного времени, что было невозможно при использовании перфокарт.
Gaist-Endruy
( off
)
(
09:48 24-03-2009
)
Кроме того, скорость работы современных процессоров настолько велика, что позволяет производить прямые вставки и удаления в массивах данных средней величины (скажем, до 64 килобайт) в режиме реального времени. Таким образом, расширение исходного макроса может быть напрямую вставлено в массив исходного текста и обработано в расширенном виде. Такая технология позволяет значительно упростить алгоритм обработки макроязыка.
Gaist-Endruy
( off
)
(
09:48 24-03-2009
)
РЕАЛИЗАЦИЯ ВНУТРИ АССЕМБЛЕРА
Gaist-Endruy
( off
)
(
09:48 24-03-2009
)
Макропроцессор, описанный нами предназначался для обработки текста в режиме препроцессора, то-есть он выполнял полный просмотр входного текста, до того, как передать управление ассемблеру. Но макропроцессор также может быть реализован внутри первого прохода ассемблера. Такая реализация позволяет исключить промежуточные файлы, и позволяет достичь на порядок большей интеграции макропроцессора и ассемблера путем объединения сходных функций.