Материал: Моделирование вычислительной системы. Ассемблерная часть

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Моделирование вычислительной системы. Ассемблерная часть















Пояснительная записка к курсовому проекту

По дисциплине “Программирование”

На тему: ”Моделирование вычислительной системы. Ассемблерная часть”

Содержание

Введение

. Постановка задачи

. Анализ набора команд

. Выбор формата ассемблерной команды

. Описание входных и выходных данных

. Анализ возможных ошибок

. Разработка программы

. Описание программы

.1 Класс Asm

.2 Класс SourceLine

7.3 Класс InfoBag

7.4 Класс ListingLine

7.5 Класс BinCom

.6 Класс DiagLine

. Отладка и тестирование программы

.1 Исходные данные

.2 Файл листинга

.3 Файл диагностики

.4 Бинарный файл

Заключение

Список литературы

Приложение

Введение

Ассемблер (от англ. assembler - сборщик) - компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

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

Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполнимый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью программы-компоновщика может быть скомпонован исполнимый файл.

В данном курсовом проекте необходимо разработать транслятор упрощенного языка ассемблера. К варианту задания прилагается таблица команд ассемблера и структура ЭВМ.

1. Постановка задачи

Структура процессора

Объем оперативной памяти . 256 байт. Буферные регистры a и b предназначены для хранения операндов операций. Рабочий регистр Рез используется как регистр результата, полученного при обработке данных в АЛУ.

Коды команд:

Команды имеют длину один или два байта. Первый байт определяет код команды в соответствии с таблицей команд (биты 0-3). Следующие 4 бита предназначены для указания номера регистра, коммутируемого к буферному регистру а.

Второй байт используется для задания адреса памяти, где находится второй операнд. Если в качестве второго операнда используется регистр, то его номер хранится в младших 4-х битах второго байта команды, а старшие 4 бита не используются.

Код

Мнемокод и операнды

Описание

0000

ILR регистр

Rn:=Rn+флаг переполнения

0001

NOTR регистр

Rn:= Rn +флаг переполнения

0010

ADR регистр,память

Rn:=Rn+Память[Адрес]+ флаг переполнения

0011

CLR регистр

Rn:=0

0100

ONR регистр, адрес

Rn:= Rn ∨Память[Адрес]

0101

ANR регистр, адрес

Rn:= Rn ∧Память[Адрес]

0110

XNR регистр, адрес

Rn:= Rn⊕Память[Адрес]

0111

JZ адрес

Переход, если результат равен 0

1001

JL адрес

Переход, если результат меньше 0

1010

JMP адрес

Безусловный переход

1011

CLF

Регистр флагов := 0

1100

DOP регистр

Перевод содержимого Rn в дополнительный код

1101

LOAD регистр, адрес

Rn:= Память[адрес]

1110

SAVE регистр, адрес

Память[адрес]:= Rn

1111

CMP регистр, адрес

Сравнение содержимого Rn и Память[адрес]. Установка флагов.


Задание на курсовой проект состоит в написании учебного ассемблера с заданной таблицей команд.

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

2. Анализ набора команд

Данные в курсовом проекте команды можно подразделить на группы: арифметические команды, логические, команды загрузки, перехода, установки и команды обработки программы.

Арифметические

Код

Мнемокод и операнды

Описание

0000

ILR регистр

Rn:=Rn+флаг переполнения

0001

NOTR регистр

Rn:= Rn +флаг переполнения

0010

ADR регистр,память

Rn:=Rn+Память[Адрес]+ флаг переполнения


Установка

Код

Мнемокод и операнды

Описание

0011

CLR регистр

Rn:=0

1011

CLF

Регистр флагов := 0


Переход

Код

Мнемокод и операнды

Описание

0111

JZ адрес

Переход, если результат равен 0

1001

JL адрес

Переход, если результат меньше 0

1010

JMP адрес

Безусловный переход


Загрузка

Код

Мнемокод и операнды

Описание

1101

LOAD регистр,адрес

Rn:= Память[адрес]

1110

SAVE регистр,адрес

Память[адрес]:= Rn


Логические

Код

Мнемокод и операнды

Описание

0100

ONR регистр,адрес

Rn:= Rn ∨Память[Адрес]

0101

ANR регистр,адрес

Rn:= Rn ∧Память[Адрес]

0110

XNR регистр,адрес

Rn:= Rn⊕Память[Адрес]


Команды имеют длину один или два байта. Первый байт определяет код команды в соответствии с таблицей команд (старшие 4 бита), а также номер регистра-операнда (младшие 4 бита), указывающего на один из РОПов процессора.

Второй байт определяет адрес операнда в памяти, или задает константу.

Программа должна выполнять преобразование текстового файла в двоичный код (т.е. код команды и код адреса нахождения операнда).

Обработка программы

Код

Мнемокод и операнды

Описание

1100

DOP регистр

Перевод содержимого Rn в дополнительный код

1111

CMP регистр, адрес

Сравнение содержимого Rn и Память[адрес]. Установка флагов.


3. Выбор формата ассемблерной команды

Возможные типы строк:

X - строка не определена

С - строка-комментарий

O - строка содержит ORG команду

D - строка содержит переменную или константу

E - строка, содержащая оператор завершения работы END

P - строка содержит команду микропроцессора

Положим тип строки X. Если длина массива слов исходной строки равна нулю или "", или начинается с символа ';', то тип строки - C. Если строка начинается словом "DATA", то тип строки - D. Если первое слово строки - "ORG" - тип строки - О, если "END" - E. Если в таблице команд находится мнемоника, эквивалентная первому слову в строке, то тип команды устанавливается равным P. И номер строки в таблице команд, где обнаружилось соответствие, запоминается для дальнейшего определения типа операнда.

Методика определения типа операнда

При решении данной задачи имеем строку, содержащую мнемонику, эквивалентную одной из мнемоник в таблице команд. Следовательно, известен тип строки - Р и номер строки в таблице команд. А зная строку таблицы команд, можно из неё извлечь тип операнда - строка таблицы команд её содержит в четвёртом слове.

Алгоритм формирования инфопакета

В общем случае, формирование инфопакета - это создание объекта, поля которого - строки листинга, диагностики, бинарная часть - формируются вызовом конструкторов классов ListingLine, DiagLine, BinaryBin с параметрами. Но поскольку существуют нюансы при формировании инфопакета для разных типов строк, то следует описать алгоритм создания инфопакета для каждого типа строки.

Тип строки С (метод parseComment)

В случае строки-комментария необходимо сформировать только строку листинга, которая будет содержать исходную строку, за исключением первого символа - признака комментария. Для этого конструктору класса ListingLine передаётся в качестве параметра номер строки и исходная строка преобразованная методом substring для отделения первого символа. Остальные значения параметров -1 означают отсутствие соответствующих элементов строки листинга. Строка диагностики и бинарная части (поля объекта InfoBag) устанавливаются равными null.

Тип строки О (метод setOrg)

Для строк типа О необходимо формировать строки листинга и диагностики. ORG команда не является командой микропроцессора. Она считается инструкцией ассемблеру. Поэтому бинарная часть инфопакета создается равной 1 байту. Строку диагностики для строк типа О необходимо формировать потому, что ORG команда содержит операнд, в котором возможна ошибка.

Для формирования строки листинга необходимо решить задачу поиска адреса из операнда. Если результат будет положительным ( в прямом смысле этого слова, если результат будет значением адреса), то строка листинга в данном случае формируется следующим образом: номер строки, значение операнда, исходная строка. В противном случае, если результат решения задачи поиска отрицательный(тип ошибки), то строка листинга формируется как номер строки + символ ошибки "-" + исходная строка. Строка диагностики формируется следующим образом: номер строки, исходная строка, символ перехода на новую строку и краткое описание типа ошибки.

Тип строки D (метод setData)

Строки, хранящие данные, должны формировать "строку" бинарного файла и листинг. В случае ошибки в записи операнда, так же должен формироваться файл диагностики. Значение константы в данной задаче находится так же, как и адрес - решается задача поиска(выделения) адреса из операнда. Строка листинга формируется следующим образом: номер строки, первый байт, второй байт, исходная строка. Конструктору бинарной части инфопакета передается следующая информация: длина команды - 2, адрес команды, первый байт, второй байт. В случае ошибки в адресе операнда (поиск адреса в операнде выдал отрицательный результат), формируется следующая строка листинга: номер строки, символ ошибки, исходная строка. Бинарная часть инфопакета устанавливается равной null.

Тип строки E (метод setEnd)

Строкой типа E может являться одна единственная команда - команда END. Она не является командой микропроцессора, но бинарная часть будет равна 1 байту - FF. Команда END не содержит операндов, поэтому формирования строки диагностики на этом этапе так же происходить не будет. Строка листинга формируется просто как номер строки + исходная строка.

Тип строки P, тип операнда Z (метод parseZ)

1 байт

2 байт

Мнемокод и операнд

1011RRRR

----

CLF


Команды типа Р с типом операнда Z - это однобайтовые команды, старшие четыре разряда содержат код команды, остальные разряды нулевые.

Значение первого байта равно двоичному коду мнемокоманды, смещённому на четыре разряда влево.

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

Строка листинга: номер строки, адрес команды, первый байт, исходная строка. Бинарная часть: длина команды - 1, признак команды, первый байт.

Формирование строки диагностики на данном этапе не нужно, поскольку операнд в командах типа Z отсутствует. Команды типа Р с типом операнда R - это однобайтовые команды, старшие четыре разряда которого - код команды, младшие четыре разряда байта - регистр.

Тип строки P, тип операнда R (метод parseR)

1 байт

2 байт

Мнемокод и операнд

0000RRRR

----

ILR регистр

0001RRRR

----

NOTR регистр

0011RRRR

----

CLR регистр

1100RRRR

----

DOP регистр


Байт-код, соответствующий мнемонике в строке и взятый из таблицы команд в соответствующей строке сдвигается на четыре разряда влево, а младшие четыре разряда заполняются регистром. Таким образом формируется байт команды.

Строка листинга: номер строки, адрес команды, байт команды, исходная строка. Бинарная часть: длина команды - 1, признак команды, байт команды.

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

Тип строки P, тип операнда RА (метод parseRА)

1 байт

2 байт

Мнемокод и операнд

0010RRRR

AAAAAAAA

ADR регистр, память

0100RRRR

AAAAAAAA

ONR регистр, адрес

0101RRRR

AAAAAAAA

ANR регистр, адрес

0110RRRR

AAAAAAAA

XNR регистр, адрес

1101RRRR

AAAAAAAAA

LOAD регистр, адрес

1110RRRR

ААААААААА

SAVE регистр, адрес

1111RRRR

ААААААААА

CMP регистр, адрес