- •1 Постановка задачи
- •2 Форматы команд
- •3 Описание метода решения
- •4 Описание структур данных
- •5 Описание алгоритма
- •6 Описание программы
- •6.1 Назначение программы
- •6.2 Требования к программному и техническому обеспечению Программа разработана на языке Java.
- •6.6. Загрузка программы
- •7 Тестирование программы
- •Заключение
- •Литература
6 Описание программы
6.1 Назначение программы
Транслятор предназначен для преобразования исходной программы написанной на языке Assembler в объектный код. Так же формируется файл-листнг с подробной информацией о коде.
6.2 Требования к программному и техническому обеспечению Программа разработана на языке Java.
Для корректной работы программы необходим компьютер с установленной виртуальной машиной JVM и техническими параметрами, соответсвующими требования JVM.
6.3 Структура программы
Программа представлена 4-мя классами:
- ASM – для загрузки исходного текста, считывания очередной строки и запуска обработки;
- Tables – содержит все таблицы, используемые в программе и описанные в пункте 4 данной курсовой работы;
- SourceLine – содержит методы для проверки синтаксиса, формирования ТСИ, вычислений длины кода, адреса переменных, проверки данных;
- SourceCode - содержит методы перевода команд в машинный код, формирования карт и листинга.
6.4 Используемые переменные
Поля:
Fields – массив разделенных полей из исходной строки( String[] );
Label – метка( String );
Mnem – мнемокод( String );
Directive – директива( String );
Link - ссылка( String );
Var - переменная( String );
Data – массив данных для DW\DB( String[] );
isCommand – является ли командой( boolean );
address – СЧАК( int );
opType – тип операндов( String );
wBitR1 – бит w первого операнда( int );
wBitR2 – бит w второго операнда( int );
wBitRN – бит w непосредственного операнда( int );
hasError – содержит ли ошибки( boolean );
SC – ссылка на объект класса SourceCode;
codeLength – длинна кода( int );
memOff - смещение в адресе( int );
hasSegment – была ли директива SEGMENT( boolean );
SCLength - длинна всего кода( int );
segmentName – имя сегмента( String );
- offset – смещение( int );
- line – текущая строка( String );
- newAddress – новое значение СЧАК( int );
- lineNumber – номер строки( int );
- start – точка входа( String );
- code – таблица кода( LinkedList );
- TSI – ТСИ( LinkedList );
- TFK – таблица форматов команд( String[][] );
- TR – таблица регистров( String[][] );
- TA – таблица адресации ( String[][] );
- errors– таблица ошибок(String[] );
6.5 Спецификация методов
Класс ASM:
void main( String[] args ) – считывание очередной строки из файла и запуск обработки;
Класс SourceLine:
void split( String line ) – разделяет исходную строку на поля;
void error( int i ) - вывод ошибки;
void reset() – сброс полей в начальное состояние;
void start() – запуск процесса проверки синтаксиса и формирования ТСИ;
void calculateSize() – вычисление размера кода;
void addToCode() – добавление в таблицу кода;
boolean checkReg( String temp ) – проверка имени регистра;
boolean checkMnem( String temp ) – проверка мнемоники;
boolean checkLink( String temp ) – проверка ссылки;
boolean checkVar( String temp ) – проверка переменной;
boolean checkLabel( String temp ) – проверка метки;
boolean checkMem( String temp ) – проверка адреса ОП;
int getWBitR( String temp ) – проверка бита W регистра;
int checkData( String temp ) – проверка данных;
void createH() – формирование карты H;
Класс SourceLine:
boolean hasInTSI( String temp ) – проверка наличия в ТСИ;
addToTSI( String temp, int value ) – добавление в ТСИ;
searchTSI( String temp ) – поиск в ТСИ;
void addCodeLine( String[] temp, boolean isCommand, boolean hasLabelOrLink, int codeLength ) - добавляет текущую строку кода в таблицу;
void startConvert() – запуск процесса формирования кодов;
String[] checkOp( String temp ) – перевод адреса в ОП;
String getData( String temp, boolean DB ) – перевод данных;
String getAdrType( String temp ) – полученик кода типа адресации;
void createT( String codeLine ) – формирование карты T;
void createE( ) – формирование карты E;
void List( int e, String code ) – формирование листинга;
void close() – закрытие файлов;
Класс Tables:
int searchTR( String temp ) - поиск по таблице регистров;
int searchTA( String temp ) - поиск по таблице адресации;
int searchTFK( String temp, String opType ) - поиск по таблице форматов;
int searchTD( String temp ) - поиск по таблице директив.