Сборник по задачам и примерам Assembler



         

Поддержка ХММ-команд в файле iaxmm.inc - часть 4


  • Команды с непосредственным операндом:

    CMPPS RXMM1. RXMM2/ml28, 18 CMPSS RXMM1, RXMM2/m32. i8

  • Однооперандные команды: FXRSTOR m512 FXSAVE m512 LDMXCSR m32 STMXCSR m32
  • Из перечисленных выше групп команд можно вывести следующую обобщенную структуру команды:

    метка: код_операции операнд1. операнд2, операндЗ] ;текст комментария

    Данная структура почти совпадает со структурой обычных команд ассемблера. В соответствии с общими принципами трансляции препроцессор будет работать с исходной программой в несколько этапов.

  • 1. Лексический анализ (сканирование) исходного текста.

    2. Синтаксический анализ.

    3. Генерация кода.

  • Необходимо отметить, что по принципу действия разрабатываемый нами препроцессор относится к интерпретаторам. Читатель наверняка понимает, в чем состоит разница между интерпретатором и компилятором. Объект для работы компилятора — исходный текст программы в полном объеме. Выход компилятора — объектный модуль, то есть машинное представление исходной программы, пригодное для компоновки с другими модулями или получения исполняемого модуля. Интерпретатор работает с отдельными строками исходной программы. Распознав синтаксическую правильность строки, интерпретатор исполняет ее. В частности, интерпретация характерна для обработки входных строк командного процессора. Поэтому на примере данной задачи читатель может научиться достаточно профессионально организовывать языковое взаимодействие с пользователями своих программ.

    В главе 2 описаны основные шаги разработки компилятора. Для интерпретатора разница невелика, в чем мы убедимся ниже.

    Для распознавания лексем входной программы разработаем сканер, следуя для этого следующему алгоритму.

  • 1. Выделить классы лексем.

    2. Определить классы литер.

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

    4. Каждому классу лексем поставить в соответствие грамматику класса 3.

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

    6. Выполнить объединение («склеивание») конечных автоматов для всех классов лексем.

    7. Составить матрицу переходов для «склеенного» конечного автомата.

    8. «Навесить» семантику на дуги «склеенного» конечного автомата.

    9. Выбрать коды лексической свертки для терминалов грамматики и формат таблицы идентификаторов.

    10. Разработать программу сканера.




  • Содержание  Назад  Вперед