Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc92 / курсовик.doc
Скачиваний:
39
Добавлен:
03.08.2013
Размер:
360.45 Кб
Скачать

37

Министерство образования науки молодежи и спорта Украины

Севастопольский Национальный Технический Университет

Кафедра кибернетики и вычислительной техники.

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

по дисциплине «Системное программирование»

на тему:

«Разработка транслятора языка Ассемблер»

Вариант №35

Выполнил:

студент группы М-33д

Клочан В.О.

Проверил: Тертычный А.И.

Севастополь

2012

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

1 ПОСТАНОВКА ЗАДАЧИ 4

5 ОПИСАНИЕ АЛГОРИТМА 11

6 ОПИСАНИЕ ПРОГРАММЫ 14

6.1 Назначение программы 14

6.2 Требования к программному и техническому обеспечению 15

Программа разработана на языке Java. 15

6.6. Загрузка программы 18

ЗАКЛЮЧЕНИЕ 19

ЛИТЕРАТУРА 20

ВВЕДЕНИЕ

Любая программа, переводящая программу на исходном языке в выходную или объектную программу, называется транслятором. Если исходным языком является Ассемблер, то транслятор тоже часто называют ассемблером.

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

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

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

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

В данной курсовой работе необходимо разработать транслятор для подмножества команд языка Ассемблера IBM PC. Данный транслятор предназначен для перевода текста исходной программы с языка Ассемблер в машинные коды.

Транслятор с языка Ассемблер должен:

- выявить ошибки в исходной программе;

- распределить память;

- перевести на машинный язык команды мнемокода и константы;

- сформировать объектный код программы;

- сформировать протокол трансляции (листинг).

Транслятор должен обрабатывать следующие команды:

MOV Р,Р

MOV Р,НО

MOV Р,ОП( базово-индексная )

MOV ОП( базово-индексная ),Р

SUB Р,Р

SUB Р,НО

SUB Р,ОП( базово-индексная )

SUB ОП( базово-индексная ),Р

SHL Р,1

JA ссылка

INT 20H

Транслятор должен обрабатывать следующие директивы:

- SEGMENT, ENDS, END;

- ORG, OFFSET;

- DB, DW.

Входными данными для транслятора является программа на языке Ассемблер. Результатом работы программы являются два файла – файл-листинг и файл объектного кода.

Объектный код должен иметь следующую структуру:

H запись-заголовок

T тело

E запись-конец

Здесь

запись-заголовок имеет формат:

H<Имя_сегмента><Длина_кода>

запись-тело:

T<адрес_кода><длина_кода><Код>

запись-конец:

E<точка_входа>

Исходная программа имеет следующую структуру:

NAMESEG SEGEMENT

ORG выражение

область команд

NAMEDATA DB

DW

область данных

NAMESEG ENDS

END

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

Номер строки + [ ошибка ] + 16-ричная команда + мнемоника команды + номера регистров [ непосредственный операнд ]

В ходе обработки исходного текста программы, транслятор должен выявлять следующие ошибки:

Неверная структура программы

Ссылка на неопределенную переменную или метку

Повторное определение переменной или метки

Неверный формат операнда

Неизвестная команда

2 Форматы команд

Таблица 2.1 Формирование команд

Команда

Оп1

Оп2

Байт КОП

Адресный байт

Дополнительные байты

КОП

d

w

mod

Reg

r/m

MOV

Reg8

Reg8

100010

1

0

11

xxx

yyy

MOV

Reg16

Reg16

100010

1

1

11

xxx

yyy

MOV

Reg8

Reg8

100010

0

0

11

yyy

xxx

MOV

Reg16

Reg16

100010

0

1

11

yyy

xxx

MOV

Reg8

ОП

100010

1

0

10

xxx

zzz

Адрес

MOV

Reg16

ОП

100010

1

1

10

xxx

zzz

Адрес

MOV

ОП

Reg8

100010

0

0

10

xxx

zzz

Адрес

MOV

ОП

Reg16

100010

0

1

10

xxx

zzz

Адрес

MOV

Reg8

НО

110001

1

0

11

000

xxx

Data8

MOV

Reg16

НО

110001

1

1

11

000

xxx

Data16

MOV

Reg8

НО

10110reg

Data8

MOV

Reg16

НО

10111reg

Data16

Data16

SUB

Reg8

Reg8

001010

0

0

11

yyy

xxx

SUB

Reg16

Reg16

001010

0

1

11

yyy

xxx

SUB

Reg8

Reg8

001010

1

0

11

xxx

yyy

SUB

Reg16

Reg16

001010

1

1

11

xxx

yyy

SUB

Reg8

ОП

001010

0

0

10

xxx

zzz

Адрес

SUB

Reg16

ОП

001010

0

1

10

xxx

zzz

Адрес

SUB

ОП

Reg8

001010

1

0

10

xxx

zzz

Адрес

SUB

ОП

Reg16

001010

1

1

10

xxx

zzz

Адрес

SUB

Reg8

НО

100000

1

0

11

000

xxx

Data8

SUB

Reg16

НО

110001

1

1

11

000

xxx

Data16

SHL

Reg8

-

110100

0

0

11

010

xxx

SHL

Reg16

-

110100

0

1

11

010

xxx

JA

ссылка

-

0111 0111

Disp8

Сокращения, используемы в таблице:

xxx – код регистра 1

ууу – код регистра 2

zzz – поле Rm.

Регистры кодируются следующим образом:

Таблица 2.2 Коды регистров

Reg или r/m

000

001

010

011

100

101

110

111

Регистр

w=0

AL

CL

DL

BL

AH

CH

DH

BH

w=1

AX

CX

DX

BX

SP

BP

SI

DI

Поле Rm кодируется в зависимости от используемых регистров:

Таблица 2.2 Кодирование поля Rm

000

[BX]+[SI]

001

[BX]+[DI]

010

[BP]+[SI]

011

[BP]+[DI]



Смещение в адресе будет представлено в виде 2-х байтного числа.

Соседние файлы в папке doc92