среда, 5 октября 2011 г.

Пишем транслятор языка Ассемблера для процессора i8088. Часть первая.

Всем привет. Вот скоро у меня начинается зимняя сессия, и осталось всего нечего два месяца, надо бы уже заняться учебой, а заниматься мне придется многим, так как есть еще некое количество долгов еще с прошлой сессии. Решил я начать готовиться к сессии с курса «Системное программирование», по этому курсу мне предстоит выполнить курсовую работу на тему «Разработка транслятора для языка Ассемблер», так же еще будет контрольная работа и экзамен, но все это отталкивается от курсовой работы. Жаль что я учусь на заочной форме, на стационаре  требуется еще написать отладчик. В своем блоге я решил шаг за шагом описывать то, как я выполняю свою курсовую работу, тоесть расписывать пошаговую разработку транслятор для ассемблера. Возможно  для кого-то эта информация будет очень полезная.
И так, это первый пост на тему «Разработка транслятора», начну его я пожалуй с того что же вообще мне надо сделать, вот основные требования к транслятору:
  • Выявить ошибки в исходной программе
  • Распределить память
  • Перевести на машинный язык команды мнемокода и константы
  • Сформировать объектный код программы
  • Сформировать протокол трансляции (листинг)
Пять требований, это не слишком много, да и сами требования немного тривиальны, но все поначалу кажется легким, на самом деле все не так просто, особенно если посмотреть на «Задание на курсовое проектирование», ниже привожу текст из «методического указания для курсовой работы»:
Разработать программу транслятора для подмножества команд языка Ассемблера процессора i8088. Транслируемая программа имеет следующий формат:
NAMESEG SEGMENT
...
область команд
...
NAMEDATA DB
DW
...
область данных
...
NAMESEG ENDS
END
В качестве признака завершения вычислений использовать команду RET. В результате работы транслятора должены быть сформированы протокол трансляции и объектный код программы. Протокол трансляции представляется файлом-листингом, в котором содержится объектный код и мнемонический код команд, сообщения об ошибках, информация о результатах трансляции и т. д. Объектный код программы записывается в файл объектного кода и должен иметь следующий формат:
H запись-заголовок
T тело
E запись-конец
Здесь
запись-заголовок имеет формат:
H<Имя_сегмента><Длина_кода>
запись-тело:
T<адрес_кода><длина_кода><Код>
запись-конец:
E<точка_входа>
Коды команд и данных записать в виде строки, представляющей шестнадцатиричную константу.
Во всех вариантах реализовать обработку команды MOV и команд, определенных номером варианта (см. п4 ). Кроме того, во всех вариантах предусмотреть обработку директив:
1 SEGMENT, ENDS, END
2 OFFSET
3 DB
4 DW
Да уж, даже не знаю с какой стороны подойти к решению вопроса, но благо количество литературы данное в конце методички радует. Так как это статья из темы «шаг за шагом», то привести литературу я обязан, вот весь список:
  • Абель П. Язык Ассемблера для IBM PC и программирования / П. Абель. – М.: Высш. шк, 1992. - 447с.
  • Дао Л. Программирование микропроцессора 8088 / Л. Дао - М.: Мир,  1988.  - 355с.
  • Бек Л. Введение в системное программирование / Л. Бек - М.: Мир, 1988. -  448c.
  • Донован Дж. Системное программирование / Дж. Донован -М.: Мир,1975. -  540c.
  • Баррон Д. Ассемблеры и загрузчики /  Д. Баррон - М.: Мир, 1974. - 74c.
  • Лебедев В. Н. Введение в системы программирования / В.Н.Лебедев - М.: Статистика, 1975 – 311с.
Как и любая работа все начинается с теории, теории  (литературы) у меня много, теперь только осталось все это постичь, а как только постигну, то тут же перейду к практике. Курсовая не очень легкая, практики написания чего-то подобного у меня нет, но если я учусь на «Компьютерного инженера», то выполнить ее это мой долг. Как я сказал выше, я начну с изучения литературы, к счастью я очень быстро читаю, поэтому пять книг это не проблема, но проблема все-же есть. Как понятно тут фигурирует процессор i8088, он появился еще до моего рождения, а еще не радуют года выпуска книг, почему-то мне кажется, что найти в наше время печатные версии этих книг уже не возможно, но я попытаюсь пройтись по барахолкам, возможно кто-то как раз хочет продать такую литературу.
Ну, и заканчиваю пост неким маленьким выводом. Разработка транслятора имеет много очень важных моментов, о которых я еще не знаю (нет опыта в чем-то подобном). Хоть это и курсовая, но как говорится «у каждого задания есть свой смысл», поэтому на будущее подобный опыт мне пригодится. Что касается блога, тут я буду писать о том,  что к чему, что делаю, как делаю и по каким правилам делаю и всякое такое. Туториалом/учебником/уроком эта серия постов не является, но все-же я попытаюсь рассказать все боле детально, так чтобы это было похоже на туториал, но в качестве учителя в этой теме я себя еще не вижу, сам еще зеленый. Ну, а дальше я послушаю совет Ленина, но об этом уже в следующем посте.
Вот и все. Всем удачи. Пока.