Системное программное обеспечение

Автор работы: Пользователь скрыл имя, 21 Марта 2015 в 19:50, курсовая работа

Описание работы

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

Содержание работы

ЗАДАНИЕ……………………………………………………………..
ОПИСАНИЕ ПРИМЕНЕНИЯ………………………………………..
Общие сведения о трансляторе С0…………………………….
Возможности языка C0………………………………………...
Использование компилятора C0………………………………
Сообщения об ошибках………………………………………...
ОПИСАНИЕ ПРОГРАММЫ…………………………………………
Описание новых возможностей языка C0…………………….
3.1.1 Тип данных: char………………………………………..…
3.1.2 Дополнительные операции: ++,--……………………...
3.1.3 if else…………………………………………………
3.1.4 Тип комментария: \………………………………………...
3.1.5 Тип констант: 16……………………………………………
Список подпрограмм транслятора С0 ………………………..
ТЕСТИРОВАНИЕ ПРОГРАММЫ …………………………………..
ЗАКЛЮЧЕНИЕ………………………………………………………..
СПИСОК ЛИТЕРАТУРЫ…………………………………

Файлы: 1 файл

Курсач СПО.doc

— 104.50 Кб (Скачать файл)

           chsim();

      }

}

return leksema;

}

 

 

3.1.5. Константа 16-ная.

 

        /**********************************************/

        /*               чтение лексемы               */

        /**********************************************/

enum tipleks chleks()

{

.

.

.

.

else

if (*usim >= '0' && *usim <= '9')

{  

/* цифра */

/*           чтение числа            */

znach = 0;

leksema = chislo;

if (*usim == '0')

{

chsim();

if (*usim == 'X' || *usim == 'x')

{

mn = 16;

chsim();

}

}

while (*usim >= '0' && *usim <= '9' || mn == 16 &&

(*usim >= 'A' && *usim <= 'F' || *usim >= 'a' && *usim <= 'f'))

{

if (znach > 32767)

{

oshibka(1);

znach = 0;

/*пpопуск цифp*/

while (chsim() >= '0' && *usim <= '9' || mn == 16 &&

(*usim >= 'A' && *usim <= 'F' || *usim >= 'a' && *usim <= 'f'));

}

else

{

if (*usim >= '0' && *usim <= '9')

{

znach = mn * znach + *usim - '0';

chsim();

}

else

{

if (*usim >= 'a' && *usim <= 'f') *usim = *usim - 'a' + 'A';

if (*usim >= 'A' && *usim <= 'F' && mn == 16)

{

znach = mn * znach + *usim - 'A' + 10;

chsim();

}

else

{

oshibka(23);

znach = 0;

/*пpопуск цифp*/

while (chsim() >= '0' && *usim <= '9' || mn == 16 &&

(*usim >= 'A' && *usim <= 'F' || *usim >= 'a' && *usim <= 'f'));

}

}

}

}

 

3.2. Список подпрограмм  транслятора С0

Список подпрограмм транслятора С0 представлен в таблице 1.

Таблица 1

Номер

строки

Имя

Назначение

Вызываемые

функции

816

 

 

924

 

1106

 

136

 

 

 

584

 

382

 

 

 

217

 

 

243

 

 

269

 

991

 

369

 

 

950

 

977

 

 

465

 

 

 

768

 

 

959

 

796

chleks

 

 

chsim

 

kodret

 

main

 

 

 

operac

 

operatr

 

 

 

opisper_int

 

 

opisper_ptr

 

 

oprfun

 

oshibka

 

poslop

 

 

pozic

 

test

 

 

virag

 

 

 

vitsk

 

 

vkluch

 

zopreg(z,t,r)

 

Чтение очередной лексемы и присваива ние её значения переменной leksema.

 

Чтение символа.

 

Генерация кода оператора return.

 

Трансляция конструкции «программа».

 

 

 

Компиляция/интерпретация операции выражения.

 

Трансляция конструкции оператор.

 

 

 

Трансляция конструкции «описание переменных» для типа int.

 

Трансляция конструкции «описание переменных» для типа ptr

 

Трансляция конструкции «описание функции».

 

Генерация сообщения о типе и позиции ошибки.

 

Трансляция последовательности операторов вида “[оператор]…}”.

 

Поиск позиции имени в таблице имён.

 

Проверка лексемы. В случае ошибки – выдача сообщения и пропуск части тела программы.

 

Трансляция выражения (определение порядка операций).

 

 

Выталкивание из стека скобки “(“ или “имя(“.

 

 

Включение имени в таблицу имён.

 

Генерация кода загрузки в регистр r операнда z типа t.

chsim.

 

 

 

 

opisper_int,

opisper_ptr,

test,oprfun.

 

oshibka.

 

virag,chleks,

poslop,

operator,oshibka,

kodret,test.

pozic, oshibka

vkluch,chleks.

 

pozic, oshibka

vkluch,chleks.

 

opisper, pozic, oshibka

vkluch,chleks.

 

operator,chleks,

test.

 

 

oshibka

chleks.

 

chleks,pozic,vkluch,

oshibka, operac,vitsk

zopreg,test

 

zopreg, ,

oshibka.

 

oshibka.

 

adrper,oshibka

.


 

 

4. ТЕСТИРОВАНИЕ ПРОГРАММЫ

 

Для тестирования новых возможностей языка C0 на вход транслятора подавалась следующая программа на языке С0:

 

int g,h,f;

main ()

{

 

   g=0xC8;

   f=g;

   f++;//primer so skobkoi

   putn(f);

   putchar(10);

   putchar(13);

   if (f>200)

   {

     do

     {

       h=g--; 

       putn(h);

       putchar(10);

       putchar(13);

     }

     while(h!=190);

   }  

   getch();

}

На выходе сформировался файл p.asm следующего содержания:

ASSUME CS:KOM_,SS:STEK_,DS:DAN_

STEK_ SEGMENT STACK

DW 10000 DUP (?)

DNOST_ DW ?

STEK_ ENDS 

;int g,h,f;

;main ()

KOM_ SEGMENT 

_main PROC FAR

MOV AX,DAN_

MOV DS,AX

MOV AX,STEK_

MOV SS,AX

;{

;

;   g=0xC8;

LEA SP,DNOST_

PUSH BP

MOV BP,SP

MOV AX,200

;   f=g;

MOV _g,AX

MOV AX,_g

;   f++;//primer so skobkoi

MOV _f,AX

INC _f

;   putn(f);

MOV AX,_f

MOV AX,_f

PUSH AX

;   putchar(10);

CALL _putn

MOV AX,10

PUSH AX

;   putchar(13);

CALL _putchar

MOV AX,13

PUSH AX

;   if (f>200)

CALL _putchar

MOV BX,200

MOV AX,_f

CMP AX,BX

MOV AX,1

JG CC_1

SUB AX,AX

CC_1:  

;   {

TEST AX,AX

JNZ CC_2

JMP CC_3

;     do

CC_2:  

;     {

;       h=g--; 

CC_4:  

DEC _g

MOV AX,_g

;       putn(h);

MOV _h,AX

MOV AX,_h

PUSH AX

;       putchar(10);

CALL _putn

MOV AX,10

PUSH AX

;       putchar(13);

CALL _putchar

MOV AX,13

PUSH AX

;     }

;     while(h!=190);

CALL _putchar

MOV BX,190

MOV AX,_h

CMP AX,BX

MOV AX,1

JNE CC_5

SUB AX,AX

CC_5:  

TEST AX,AX

;   }  

JNZ CC_4

;   getch();

CC_3:  

;}

CALL _getch

POP BP

MOV AH,4CH

INT 21H

;

_main ENDP 

INCLUDE std.asm

KOM_ ENDS 

DAN_ SEGMENT 

_g DW ?

_h DW ?

_f DW ?

DAN_ ENDS 

END _main

;Компилятоp С0 от 10/04/08:

;колич. ошибок 0

 

В результате ассемблирования, компоновки и выполнения данной программы на экране сформировался следующий результат:

C:\DOCUME~1\9335~1\C316~1\GOOGLE~1\__8EC9~1\ALINA~1\TEST_A~1>p

201

199

198

197

196

195

194

193

192

191

190 
ЗАКЛЮЧЕНИЕ

 

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

 

 

 

СПИСОК ЛИТЕРАТУРЫ

 

  1. Хохлов Д.Г.  Основы технологии модульного программирования:  Учебное пособие.-Казань:  КГТУ (КАИ), 2003.—62 с.
  2. Хохлов Д.Г.  Системное программное обеспечение: Учебное пособие.-Казань:  КГТУ (КАИ), 2006.—135 с.

 

 

 


 

 



Информация о работе Системное программное обеспечение