Направления 6.0501–«Компьютерная инженерия» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Направления 6.0501–«Компьютерная инженерия»



МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению курсовой работы

«Разработка системы программирования

языка Ассемблер»

п о д и с ц и п л и н е

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

для студентов дневной и заочной форм обучения

Направления 6.0501–«Компьютерная инженерия»

 

 

Севастополь


УДК 681.3.06

 

 

Методические указания к выполнению курсовой работы «Разработка системы программирования языка Ассемблер» по дисциплине «Системное программирование» для студентов дневной и заочной форм обучения направления 6.0501 «Компьютерная инженерия» / Тертычный А.И., Шалимова Е.М. – Севастополь: Издательство СевНТУ, 2010.- 20с.

 

 

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

 

 

Методические указания утверждены на заседании кафедры кибернетики и вычислительной техники, протокол № 4 от 25 ноября 2010 г.

 

Рецензент Апраксин Ю.К., канд. техн. наук, профессор.

 

Допущено учебно-методическим центром СевНТУ в качестве методических указаний.

 

Ответственный за выпуск заведующий кафедрой кибернетики и вычислительной техники профессор Скатков А.В.


 

 

СОДЕРЖАНИЕ

 

 

1. Основные теоретические положения……………………………………...4

1.1. Требования к транслятору………………………………………........8

1.2. Требования к отладчику…………………………………………......11

2.Задание на курсовое проектирование…………………………………......13

3. Порядок выполнения курсовой работы…………………………………..15

4. Варианты заданий……………………………………………………….....17

Библиографический список …………………………………………………20

 


ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ

Программное обеспечение персональных ЭВМ (ПО) можно разделить на прикладное и специальное или системное. Прикладное ПО – это программы пользователей, системное – это операционные системы, компиляторы, трансляторы, отладчики, драйверы и т.д.

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

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

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

 

Рисунок 1– Абстрактная модель ЭВМ.

 

На рисунке 1 приняты следующие обозначения:

ЦП – центральный процессор;

УУ – устройство управления;

АЛУ – арифметико-логическое устройство;

передача данных;

передача управляющих сигналов.


Процессоры i8086/8088 имеют 14 регистров, каждый из которых имеет длину в одно слово. Длина машинного слова – 2 байта или 16 бит. Всем регистрам присвоены имена, которые и используются для обращения к регистрам. На рисунке 2 приведена классификация регистров.

Р Е Г И С Т Р Ы

       
   


Индексные Регистр

Регистры SI,DI командного

Указателя IP

Рисунок 2– Классификация регистров процессора i8086/8088.

 

Регистры общего назначения состоят из двух 1-байтовых регистров, к которым можно обращаться независимо: АН, ВН, СН, DН (старшие байты) и AL, BL, CL, DL (младшие байты).

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

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

 

  Смещение

+

Значение сегментного регистра  

 

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

В общем случае длина машинной команды от 1 до 6 байт. Код команды занимает первый байт, способ адресации задается во втором байте, в остальных байтах команды указываются непосредственные данные или адрес памяти, где эти данные находятся.

Структура адресного байта представлена на рисунке 3.

 

. 7 6 5 4 3 2 1 0

               

 

Mod reg r/m

 

Рисунок 3 – Структура адресного байта

 

Байт кода команды содержит бит w, определяющий длину операндов команды:

w=0 – размер операндов – байт;

w=1 – размер операндов – слово.

Однако, положение бита w для разных команд может быть различно. Например,

 

MOV AH,0 10110100 00000000

 

w

 

ADD BX,AX 00000011 11 011 000

Mod reg r/m

D w

 

Кроме того, первый байт машинного кода может содержать бит d, который указывает направление потока данных между операндами. Если d=0, то поле reg определяет второй операнд, а поля mod и r/m – первый, иначе поле reg определяет первый операнд, а поля mod и r/m – второй.

В последнем примере d=1 означает, что поле reg определяет первый операнд, а поля mod и r/m - второй.

Операнды команды кодируется полями reg или mod,r/m. Поле reg предназначено для указания операнда с регистровым режимом адресации и содержит код регистра. Поле r/m предназначено для указания операнда с регистровым режимом адресации или с режимом адресации оперативной памяти. Если биты поля mod имеют значение 11, это значит, что операнд находится в регистре, т. е. биты r/m вместе с битом w определяют конкретный регистр. Кодирование регистров приведено в таблице 1. Если биты поля mod имеют значение 00,01,10 это значит, что операнд находится в оперативной памяти, т. е. поле r/m содержит код способа адресации оперативной памяти.

 

reg или r/m                
  Регистр w =0 AL CL DL BL AH CH DH BH
w=1 AX CX DX BX SP BP SI DI

Таблица 1– Таблица соответствия кодов и мнемонических имен регистров

 

Значения битов mod имеют следующую интерпретацию:

mod=00 – биты r/m задают абсолютный адрес, байт смещения отсутствует;

mod=01 – биты r/m задают абсолютный адрес памяти и имеется один байт смещения;

mod=10 – биты r/m задают абсолютный адрес памяти и имеется два байта смещения.

Кодирование типов адресаций приведено в таблице 2.

 

Таблица 2– Таблица кодов адресации

 

r/m mod=00 mod=01 или mod=10
  [BX]+[SI] [BX]+[SI]+смещение
  [BX]+[DI] [BX]+[DI]+смещение
  [BP]+[SI] [BP]+[SI]+смещение
  [BP]+[DI] [BP]+[DI]+смещение
  [SI] [SI]+смещение
  [DI] [DI]+смещение
  Прямая [BP]+смещение
  [BX] [BX]+смещение

 

 


В объектном коде команды, если используются операнды длиной в слово, сначала указывается младший байт, а затем – старший.

 

Например,

 

 

Байт байт байт байт

 

В командах с одним операндом или в командах, когда второй операнд является непосредственным значением, первый операнд кодируется полями mod и r/m, а поле reg содержит дополнительные 3 бита кода операции.

 

Например,

 

ТРЕБОВАНИЯ К ТРАНСЛЯТОРУ

 

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

 

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

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

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

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

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

 

Эти задачи трудно решить за один просмотр [3–7]. Поэтому, как правило, используются двухпросмотровые ассемблеры. При первом просмотре ассемблер просматривает исходную программу и строит таблицу идентификаторов, т.е. имен полей данных и меток, используемых в программе, и их относительных адресов.

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

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

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

Общая схема обработки данных транслятором приведена на рисунке 4. Стрелками на рисунке представлены информационные и логические связи между блоками транслятора.

 


       
 
 
   
Рисунок 4 – Схема обработки данных транслятором

 


 

КОП – мнемонический код операции;

ОП1 и ОП2 – операнды первый и второй соответственно.

 

 


ТРЕБОВАНИЯ К ОТЛАДЧИКУ

 

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

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

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

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

Как уже отмечалось выше, в настоящей работе рассматривается задача разработки универсального отладчика – эмулятора.

На вход универсального отладчика поступает объектный код программы в заданном формате (см. п.2), и отладчик должен обеспечивать проверку правильности структуры объектного кода и выполнение команд программы. Кроме того, отладчик должен фиксировать ошибки исполнения команд (например, деление на ноль) и отслеживать недопустимые ссылки (передачу управления за пределы программы).

Схема обработки данных отладчиком представлена на рисунке 5. Стрелками на рисунке обозначены информационные и логические связи между отдельными блоками отладчика.

 

 


 

 
 
Объектный код

               
   
 
 
     
 
     
 


       
 
   
 


 

 

Рисунок 5 – Схема обработки данных отладчиком.

 


ЗАДАНИЕ НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ

 

Разработать программу транслятора для подмножества команд языка Ассемблера процессора i8086/8088. Транслируемая программа имеет следующий формат:

 

 

NAMESEG SEGMENT

ORG выражение

...

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

...

NAMEDATA DB

DW

...

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

...

NAMESEG ENDS

END

 

В качестве признака завершения вычислений использовать команду

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

 

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

T тело

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

 

Здесь

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

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

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

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

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

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

 

Коды команд и данных записать в виде строки, представляющей шестнадцатеричную константу.

 

Во всех вариантах реализовать обработку команды MOV и команд, определенных номером варианта (п. 4). Кроме того, во всех вариантах предусмотреть обработку директив:

 

1) SEGMENT, ENDS, END;

2) ORG, OFFSET;

3) DB;

4) DW.

 

Разработать среду отладчика-эмулятора, в которой предусмотреть следующие возможности:

1) загрузка объектного кода в память;

2) вывод состояния регистров, регистра флагов и заданной области памяти;

3) вывод реассемблированного текста программы;

4) пошаговое выполнение программы.

Исходными данными для отладчика являются объектный код и значения сегментных регистров. Результат работы отладчика – состояния регистров и оперативной памяти после выполнения каждой команды, отображаемые на экране компьютера.

 


 

ВАРИАНТЫ ЗАДАНИЙ

 

Разрабатываемая программа (транслятор или отладчик) должна обрабатывать следующие команды: команду MOV и по одной команде из трех групп команд. Варианты заданий приведены в таблице 3, а группы команд – в таблице 4.

 

Команда MOV и команда первой группы должны иметь четыре формата:

 

КОП Р,Р

КОП Р,НО

КОП Р,ОП

КОП ОП,Р

где КОП – мнемонический код команды,

Р – регистр общего назначения,

НО – непосредственный операнд,

ОП – оперативная память.

 

Режим адресации данных в оперативной памяти задан буквой: П – прямая, К – косвенная, И – индексная, Б – базовая, С – базово-индексная.

В команде второй группы операндом может быть регистр общего назначения (Р) или данные в оперативной памяти (ОП). Режим обращения к оперативной памяти такой же, как для команды первой группы.

 

 

Например, в варианте 45 задано следующее множество команд:

 

MOV Р,Р

MOV Р,НО

MOV Р,ОП(базовая)

MOV ОП(базовая),Р

ADD Р,Р

ADD Р,НО

ADD Р,ОП(базовая)

ADD ОП(базовая),Р

MUL ОП(базовая)

JB ссылка

INT 21H

 

Таблица 3 – Варианты заданий

 

 

№ п/п Группа Группа Группа № п/п Группа Группа Группа
  6п      
  7оп     2п 1оп  
  8оп      
  9п     4п 4оп  
  10к 4оп     2оп  
      3оп  
  1п 2оп     10б  
      10оп  
  1оп     7оп  
  5п 6оп      
  5оп      
      7п  
  10р     5оп  
  10с 8оп     10п  
  3оп      
      10и  
  9оп      
  3оп     3оп  
  3п 5оп      
  7оп     7оп  
      4оп  
  6оп      
  8п      
  7оп     10р  
       

 


 

Таблица 4 – Группы команд

 

 

№ п/п Группа Группа Группа
  ADD INC JP
  ADC DEC JNZ
  SUB NOT LOOP
  SBB MUL JZ
  CMP IMUL JG
  XOR DIV JGE
  AND IDIV JE
  OR SHL JLE
  XCHG SHR JA
  TEST SAR JAE
      JB
      JBE
      JS
      JC

 

 


 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

 

1. Абель П. Ассемблер. Язык и программирование для IBM PC / П. Абель. – Минск: КОРОНА-Век, 2009. – 736с.

2. Дао Л. Программирование микропроцессора 8088 / Л. Дао – М.: Мир, 1988.– 355с.

3. Бек Л. Введение в системное программирование / Л. Бек – М.: Мир, 1988. – 448c.

4. Пильщиков В.Н. Программирование на языке Ассемблера IBM PC/ В.Н.Пильщиков. – М.: Диалог – МИФИ, 2001. – 288 с.

5. Донован Дж. Системное программирование / Дж. Донован. –М.: Мир,1975.– 540c.

6. Баррон Д. Ассемблеры и загрузчики / Д. Баррон – М.: Мир, 1974. – 74c.

7. Лебедев В. Н. Введение в системы программирования / В.Н.Лебедев. – М.: Статистика, 1975. – 311с.

 

 

 

Заказ №_______от «___»________2010 ____Тираж_________экз.

Изд-во СевНТУ

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению курсовой работы

«Разработка системы программирования

языка Ассемблер»

п о д и с ц и п л и н е

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

для студентов дневной и заочной форм обучения

направления 6.0501–«Компьютерная инженерия»

 

 

Севастополь


УДК 681.3.06

 

 

Методические указания к выполнению курсовой работы «Разработка системы программирования языка Ассемблер» по дисциплине «Системное программирование» для студентов дневной и заочной форм обучения направления 6.0501 «Компьютерная инженерия» / Тертычный А.И., Шалимова Е.М. – Севастополь: Издательство СевНТУ, 2010.- 20с.

 

 

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

 

 

Методические указания утверждены на заседании кафедры кибернетики и вычислительной техники, протокол № 4 от 25 ноября 2010 г.

 

Рецензент Апраксин Ю.К., канд. техн. наук, профессор.

 

Допущено учебно-методическим центром СевНТУ в качестве методических указаний.

 

Ответственный за выпуск заведующий кафедрой кибернетики и вычислительной техники профессор Скатков А.В.


 

 

СОДЕРЖАНИЕ

 

 

1. Основные теоретические положения……………………………………...4

1.1. Требования к транслятору………………………………………........8

1.2. Требования к отладчику…………………………………………......11

2.Задание на курсовое проектирование…………………………………......13

3. Порядок выполнения курсовой работы…………………………………..15

4. Варианты заданий……………………………………………………….....17

Библиографический список …………………………………………………20

 



Поделиться:


Последнее изменение этой страницы: 2017-01-23; просмотров: 326; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.166.7 (0.179 с.)