JĘZYKI PROGRAMOWANIA

Realizacja programu jest możliwa tylko wtedy, gdy:

- program przedstawiony jest w postaci ciągu wektorów informacji cyfrowej,

- program w wyżej opisanej formie znajduje się w pamięci operacyjnej.

Mówimy wtedy, że program zakodowany jest w języku wewnętrznym

komputera (maszynowym), i charakteryzuje się:

- stosowaniem binarnych kodów operacji reprezentujących rozkazy z listy

rozkazów procesora,

- stosowaniem binarnych adresów komórek pamięci (adr. fizycznych).

Ze względu na stopień zorganizowania dzielimy języki na:

1) najniższego poziomu - język wewnętrzny

2) niskiego poziomu

-

tzw. języki symboliczne systemowo

zorientowane (asemblery i makroasemblery)

3) wysokiego poziomu

-

języki symboliczne

proceduralnie

zorientowane i języki symboliczne problemowo zorientowane.

JĘZYKI PROGRAMOWANIA c.d.

Języki programowania należą do grupy języków formalnych.

JĘZYKIEM FORMALNYM nazywamy każdy system, w którym stosując określone z góry reguły możemy uzyskać wszystkie zdania (napisy) uznawane za komunikaty

w tym języku. Zbiór reguł tworzenia zdań języka formalnego odgrywa rolę

normatywną: stanowi o tym co jest, a co nie jest zdaniem należącym do języka.

Formalizacja reguł danego języka obejmuje

- syntaktykę (składnia) języka zwaną także gramatyką języka, która pozwala na tworzenie poprawnych składniowo zdań języka

- semantykę - czyli reguły określające sens komunikatów w danym

języku.

JĘZYKI PROGRAMOWANIA c.d.

W białodrzewiu jaśnie dźni słoneczno,

Miodzie złoci białopałem żyśnie,

Drzewia pełni pszczelą i pasieczną,

A przez liście kraśnie pęk słowiśnie.

( Julian Tuwim)

Niejednoznaczność języka etnicznego stanowi oczywistą przeszkodę w używaniu go jako środka przekazu algorytmów, zarówno między ludźmi, jak i między człowiekiem a komputerem.

JĘZYK PROGRAMOWANIA

jest to język przeznaczony do zapisu

algorytmów, wykonywanych następnie przez komputer. Algorytm

doprowadzony do postaci zawierającej wyłącznie operacje arytmetyczno-

logiczne na zawartościach komórek pamięci o zdefiniowanych adresach

symbolicznych należy wrazić w języku programowania.

JĘZYKI PROGRAMOWANIA c.d.

ADRESEM SYMBOLICZNYM nazywamy skrótowy kod mnemotechniczny

adresu komórki w pamięci. Kod mnemotechniczny adresu musi spełniać

pewne reguły wynikające z definicji języka programowania (np. być

zbudowany z symboli należących do pewnego ograniczonego zbioru

symboli, często długość kodu jest ograniczona, itp.) oraz zasadę

wzajemnej jednoznaczności przyporządkowania adresu symbolicznego i

adresu fizycznego.

Adres symboliczny

Adres fizyczny

ala

adres 100

kot

adres 185

JĘZYKI PROGRAMOWANIA c.d.

Języki symboliczne systemowo

zorientowane (asemblery i makroasemblery)

Ję zyki symb. systemowo zorientowane charakteryzują się :

- stosowaniem symbolicznych kodów mnemotechnicznych w miejsce

kodów binarnych z listy rozkazów procesora

- stosowaniem adresów symbolicznych komórek pamię ci operacyjnej

- jednemu rozkazowi ję zyka wewnę trznego odpowiada jeden rozkaz

symboliczny

- operandami rozkazów są zawartoś ci rejestrów lub komórek pamię ci

- w ję zyku asemblera uż ywa się takż e tzw. pseudorozkazy, które

przedstawiają informacje niezbę dne przy tłumaczeniu programu na

ję zyk wewnę trzny (zestaw pseudorozkazów zależ y od programu

tłumaczą cego zwanego asemblerem). Należą do nich pseudorozkazy

okreś lają ce typy zmiennych, rezerwacji bloku pamię ci, równoważ ność

zmiennych, etc.

JĘZYKI PROGRAMOWANIA c.d.

MAKROASEMBLERAMI

nazywa się takie języki symboliczne systemowo

zorientowane, które mając właściwości i możliwości języków asemblerowych umożliwiają ponadto zastąpienie często występujących sekwencji rozkazów jednym makrorozkazem w postaci zdefiniowanego (zarezerwowanego) skrótu

mnemo- technicznego (posiadającego lub nie listę argumentów).

W trakcie tłumaczenia programu na język wewnętrzny, makrorozkazy

zastępowane są odpowiadającą im sekwencją rozkazów z uwzględnieniem aktualnych wartości parametrów ( o ile takie występują).

JĘZYKI PROGRAMOWANIA c.d.

PRZYKŁAD

Stosując adresy symboliczne dla hipotetycznego procesora, który był użyty w przykładnie z poprzedniego wykładu, program realizujący dodanie dwóch

wielkości X i Y możemy zapisać następująco:

Kod mnemotechniczny Numer rozkazu Kod binarny rozkazu

CLA

2

0010

STO

3

0011

ADA

4

0100

JMP

10

1010

Język Kody z adresami Język adresów Opis rozkazów

wewnętrzny

fizycznymi symbolicznych

0010 0000000

CLA

CLA

A¬0

0100 1101100

ADA 108

ADA X

A¬A+X

0100 1111000

ADA 120

ADA Y

A¬A+Y

0011 1011111

STO 95

STO Z

Z¬A

JĘZYKI PROGRAMOWANIA c.d.

PRZYKŁAD.

Wcześniej zapisany fragment programu dodającego X do Y i zapamiętanego w pamięci operacyjnej pod adresem symbolicznym Z, zapiszmy w formie

makrorozkazu

MACRO DODAJ A,B,C

CLA

ADA A

ADA B

STO C

END MACRO

Użycie makrorozkazu

DODAJ X,Y,Z

DODAJ X,Z,W

Odpowiedz na pytanie : jaka wartość zostanie zapamiętana pod adresem

symbolicznym W ? Wykonaj samodzielnie translację tego fragmentu programu do

postaci asemblerowej.

JĘZYKI PROGRAMOWANIA c.d.

Podprogram stanowi ciąg rozkazów, który mimo. iż realizowany jest w różnych miejscach programu, przechowywany jest w pamięci tylko w jednej kopii ( w

przeciwieństwie do makroinstrukcji).

Uruchomienie (wywołanie) podprogramu przez inny podprogram (lub

program główny) zawsze wiąże się z naruszeniem sekwencji rozkazów

pochodzących z kolejnych komórek pamięci. Możliwość właściwej realizacji sekwencji rozkazów , w której występuje odwołanie do

podprogramu zapewnia tzw. skok z zapamiętaniem adresu powrotnego.

Tłumaczenie na język wewnętrzny programu źródłowego napisanego w języku asemblera

lub

makroasemblera,

nazywa

się

asemblowaniem

(to

assembly=montować).

Automatyczna asemblacja (realizowana przez program zwany też asemblerem)

wykonywana jest na ogół w 2 krokach:

- w pierwszym kroku program asemblujący sporządza kartotekę adresów

symbolicznych i ich przesunięć w stosunku do adresu pierwszego

rozkazu, oraz kartotekę stosowanych makrorozkazów

- w drugim następuje tłumaczenie programu źródłowego wykorzystujące przygotowane kartoteki.

JĘZYKI PROGRAMOWANIA c.d.

W wyniku działania programu asemblującego otrzymujemy program w

języku wewnętrznym z adresami relokowanymi (względnymi), tzn. takimi które odniesione są do adresu pierwszego rozkazu programu. Rzeczywisty

adres w pamięci, pod który będzie wprowadzony pierwszy rozkaz

programu nazywa się adresem bazowym relokacji.

Specjalne programy łącząco-ładujące (zwane także konsolidatorami i ładowaczami) ustalają adres bazowy relokacji a następnie przekształcają

wszystkie zrelokowane adresy programu na adresy docelowe (fizyczne), i

ładują do pamięci pozwalając na właściwe działanie programu.

Stosowanie zrelokowanych programów ułatwia ich umieszczanie w

dowolnym obszarze pamięci operacyjnej oraz dołączanie do nich innych

programów, a także uzasadnia celowość modularyzacji programów i

tworzenie bibliotek programów.

JĘZYKI PROGRAMOWANIA c.d.

Wady programowania przy użyciu języków

symbolicznych systemowo zorientowanych

(asembler i makroasembler):

- utrata przejrzystości algorytmów wskutek konieczności rozbijania

prostych operacji arytmetycznych i logicznych na ciągi elementarnych

operacji dostępnych w liście rozkazów,

- listy rozkazów różnych procesorów różnią się - brak możliwości natychmiastowego przeniesienia programu z jednego komputera na drugi,

- skupienie uwagi programisty na sprawy nie związane z treścią algorytmu (a raczej z konstrukcją komputera)

- zwiększona możliwość wprowadzenia błędów, trudnych do wykrycia

-

duży koszt wytworzenia oprogramowania związany z wysoką

pracochłonnością procesu programowania

- program w asemblerze wymaga bardzo detalicznego opisu w postaci

komentarzy, dla umożliwienia interpretacji stworzonego kodu przez innych

programistów i w trakcie nanoszenia poprawek.

JĘZYKI PROGRAMOWANIA c.d.

JĘZYKI SYMBOLICZNE PROCEDURALNIE ZORIENTOWANE (wysokiego

poziomu) są językami programowania, które umożliwiają sformułowanie programu źródłowego przy użyciu symboli nie wynikających z listy rozkazów procesora, lecz z procedury przetwarzania charakteryzującej

klasę algorytmów, dla programowania których języki takie są przeznaczone.

Programowanie w tych językach jest całkowicie uniezależnione od mechanizmu realizacji przetwarzania przez procesor, pozwalając na określenie przetwarzania za pomocą symboliki stosowanej w arytmetyce i algebrze. Programista nie musi znać architektury procesora realizującego program, a opracowane programy źródłowe (przy niewielkich modyfikacjach) można realizować przy użyciu różnych procesorów, pod warunkiem posiadania odpowiednich programów tłumaczących.

Odpowiednikami rozkazów są tzw. instrukcje, każdej instrukcji odpowiada odpowiednia sekwencja rozkazów w języku wewnętrznym.

Przykłady

języków

symbolicznych

proceduralnie

zorientowanych:

FORTRAN, ALGOL, BASIC, PASCAL, PL/I, C.

JĘZYKI PROGRAMOWANIA c.d.

JĘZYKI

SYMBOLICZNE

PROBLEMOWO

ZORIENTOWANE

to

języki

programowania, które umożliwiają formułowanie programu źródłowego przy

użyciu symboliki odzwierciedlającej sposób rozwiązywania problemów, dla których języki te są przeznaczone.

Posługiwanie się takimi językami nie wymaga z reguły żadnych wiadomości z zakresu programowania w językach systemowo i

proceduralnie

zorientowanych, co ułatwia koncentrację na problemach stanowiących

istotę zadania.

JĘZYKI PROGRAMOWANIA c.d.

Tłumaczenie automatyczne programów źródłowych

Metoda kompilacji

polega na jednorazowym przetłumaczeniu całego

programu źródłowego na język wewnętrzny przy użyciu programu zwanego kompilatorem. Kompilator tworzy z programu źródłowego program docelowy.

Metoda interpretacji polega na tym, że:

- dla każdej instrukcji jest przechowywany w pamięci odpowiadający jej podprogram

- wykonanie instrukcji wymaga wykonania rozkazu skoku odpowiadającego

jej podprogramu, przekazania mu danych (argumentów instrukcji) i realizacji

podprogramu. Interpretacja realizowana jest przez program zwany

interpreterem. Interpretery pozwalają na interakcyjne współdziałanie

komputera i programisty.

BASIC - Beginners All-purpose Symbolic Instruction Code - uniwersalny ję zyk

symboliczny dla począ tkują cych (1964 Kemeny-Kurz)