PPS W1

background image

Podstawy programowania

systemowego

Dr inż. Zbigniew Lach

konsultacje: poniedziałek, 16:15-17:00

wtorek, 10:15-11:00

background image

OPROGRAMOWANIE

UŻYTKOWE

OPROGRAMOWANIE

SYSTEMOWE

HARDWARE

System komputerowy

background image

oprogramowanie systemowe

realizuje funkcje konieczne dla działania
systemu komputerowego (świadczy usługi
sprzętowi komputerowemu)

pojęcie szersze niż systemy operacyjne

w skład o.s. wchodzi każde oprogramowanie,
z którym użytkownik nie ma bezpośredniej
styczności.

Programowanie systemowe

= rodzaj programowania

systemów oprogramowania

background image

Specyfika:

Programista uwzględnia i aktywnie wykorzystuje cechy
sprzętu i inne właściwości systemu, na którym program
jest uruchomiony

o

język niskiego poziomu

o

środowisko o limitowanych zasobach

o

bezpośredni i surowy dostęp do pamięci i kontroli

wykonania

o

ma małą bibliotekę uruchomieniową (albo wcale)

Program systemowy jest bardzo efektywny i
ma małe narzuty uruchomieniowe

background image

Narzędzia wspomagania programowania systemowego

Język asemblera; ograniczenia asemblera

Makroasembler,

relokowalność, dyrektywy

Konsolidacja i

ładowanie programu

Programowanie

modułowe w języku asemblera

Procedury, parametry, zmienne

wewnętrzne

Wykonywanie

działań na reprezentacjach danych

Struktury danych

Sterowanie programem

Funkcje systemowe

Sterowanie procesami

Program wykładu

background image

Zaliczenie przedmiotu: min. 50% punktów z dwóch
kolokwiów:

(I) 14 kwietnia

(II) 16 czerwca

Literatura podstawowa:

1. A. Silberschatz. P.B. Galwin. "Podstawy systemów

operacyjnych", WNT. Warszawa 2000

2. Gary Syck, "Turbo Assembler. Biblia użytkownika"

LT&P. Warszawa 1994

3. W. Stallings, "Organizacja i architektura systemu

komputerowego", WNT, Warszawa 2000

background image

Wykład 1

Oprogramowanie systemowe

Asembler

background image

Hierarchia oprogramowania

Poziom

Opis

Program aplikacyjny

Oprogramowanie
zaprojektowane dla określonego
zastosowania

Język wysokiego
poziomu (HLL)

Program

y są kompilowane z HLL

na język asemblera lub
maszynowy, n.p. C++, Pascal,
Java, Visual Basic.

background image

Poziom

Opis

System operacyjny

(loadery)

Zawiera procedury, które mogą
być wywoływane z programów
napisanych w HLL lub
asemblerze.

Może być

wyposażony w interfejs
programów aplikacyjnych (API).

Asembler (ASM)

(konsolidatory, edytory,
biblioteki)

Stosuje mnemoniki instrukcji
bezpośrednio odpowiadające
rozkazom języka maszynowego.

Hierarchia oprogramowania.

background image

Poziom

Opis

Język Maszynowy (ML) Instrukcje numeryczne i

operandy, które mogą być
umieszczone w pamięci
komputera i bezpośrednio
wykonywane przez procesor.

Hierarchia oprogramowania.

background image

Planowanie produktu

Projekt. systemu

Projektowanie sprzętu

Projekt. programu

Zgodność z założeniami?

Projektowanie systemu komputerowego

background image

Projektowanie programu

Określenie właściwości

Sporządzanie schematu

blokowego

Kodowanie

Edycja programu

źródłowego

ASEMBLACJA

(TŁUMACZENIE)

Testowanie programu

Testowanie systemu

BŁĘDY

?

BŁĘDY

?

TAK

NIE

TAK

NIE

użycie narzędzi do

programowania

systemowego

Projektowanie systemu komputerowego

background image

Narzędzia programowania systemowego

background image

Narzędzia systemowe wspomagające

poszczególne etapy procesu projektowania

Programy komputerowe

Posługują się dobrze zrozumiałą dla człowieka symboliką


Urządzenia pomiarowe (testujące)

Umożliwiają sprawdzenie zgodności z założeniami (testery cyfrowe)

background image

Programy wspomagające projektowanie

Asembler

- stosuje mnemoniki instrukcji

bezpośrednio

odpowiadające rozkazom języka maszynowego (+linker,
loader)

Konsolidator/loader -

umożliwia scalenie programu z

odrębnych modułów / załadowanie do pamięci i
przekazanie sterowania

Biblioteki -

gotowe programy lub fragmenty programów,

wykonujących standardowe operacje (np. mnożenie,
dzielenie liczb, we-wy, itp..)

background image

Symulator -

symuluje zachowanie się systemu podczas

wykonania programu (tańsze i wygodniejsze niż
debugger)

Debugger -

umożliwia kontrolowane wykonywanie

programu przez system, na przykład krok po kroku, w
celu obserwacji zgodności działania programu z
zamiarem jego autora

Programy wspomagające projektowanie

background image

Funkcje narzędzi systemowych

Program

źródłowy

asembler

Kod

wynikowy

Loader

Kod wykonywalny

Konsoli-

dator

Zależność od procesora

różne formaty instrukcji, różne rozkazy

symulator

debugger

sprzęt

background image

Asembler

Narzędzia programowania systemowego

background image

Język asemblera

Niskopoziomowy język

programowania związany
z konkretnym procesorem
ściśle odpowiadający
zestawowi instrukcji
języka maszynowego

Każda instrukcja ASM

odpowiada dokładnie
jednej instrukcji ML

background image

Porównanie HLL i ASM

Typ

zastosowań

HLL

ASM

Oprogramowanie
ogólnego
przeznaczenia na
jedną platformę
komputerową

Struktury
formalne języków
ułatwiają
zorganizowanie
programu

Brak struktur
formalnych

Oprogramowanie
ogólnego
przeznaczenia na
wiele platform
komputerowych

Przenośne

Trudne do
wykonania

background image

Porównanie HLL i ASM

Typ

zastosowań

HLL

ASM

Sterownik
urządzenia

Złożone techniki
programowania

Dostęp do
hardware’u
bezpośredni i
prosty

Systemy
wbudowane i gry
wymagające
bezpośredniego
dostępu do
urządzeń

Dają w wyniku
zbyt długie
programy
maszynowe;
mogą być
nieefektywne

Idealny,

ponieważ

program
maszynowy jest
krótki i może być
wykonywany
szybko

background image

Cechy programów w ASM

Zwiększenie szybkości aplikacji

bezpośredni dostęp do hardware’u (np.:

bezpośredni dostęp do portów zamiast
wywołania systemowego)

dobry program ASM jest szybszy i zajmuje

mniej miejsca (krytyczne fragmenty programu
w ASM)

Ograniczenia

Bardzo szybkie i zwarte lecz przystosowane

tylko do jednego typu procesora

background image



;zaczynam pisać program

ORG

0000H

;rozmieść program od adresu 0

DANE

EQU

10H

;przypisz nazwie DANE wartość 10 heks

START:

MOV A, #DANE

;wpisz dane do rejestru A

JMP

START

;skok do linii oznaczonej etykietą START

Przykładowy program w ASM

background image

Formalizm języka asemblera

Język asemblera

-

sposób przedstawiania programu

tak, aby

był on zrozumiały dla asemblera (bliski

językowi maszynowemu – mały nakład pracy przy
tłumaczeniu)

Język asemblera

jest

strukturą sformalizowaną.

Rządzą nim:

reguły leksykalne (znaczeniowe)

reguły składni

background image

W języku asemblera:

-

program składa się z oddzielnych wierszy

-

w jednym wierszu umieszcza się jedno polecenie

- instrukcja mikroprocesora
- dyrektywa asemblera

- opcjonalnie komentarz.

Formalna składnia języka asemblera

Formalizm języka asemblera

background image

Formalizm języka asemblera

Asembler typowo

rozróżnia jednostki leksykalne :

- program

- wiersz

- instrukcja

- operand

background image

<program> ::= <wiersz> <koniec pliku > | <wiersz> <program>

-

program jest ciągiem 1 lub wielu wierszy

<wiersz> ::= <definicja> | <dyrektywa> | <polecenie> | <komentarz>

-

wiersz zawiera definicję, polecenie lub komentarz

<definicja> ::= <symbol >

=

<operand> <komentarz>

-

definicja jest symbolem po którym następuje znak przypisania oraz

operand

<polecenie> ::= <etykieta> <instrukcja> <komentarz> | <instrukcja>
<komentarz> | <komentarz>

-

etykieta i instrukcja są w poleceniu opcjonalne

<etykieta> ::= <symbol> :

-

etykieta jest symbolem po którym umieszczono dwukropek

<instrukcja> ::= <rozkaz> <operand> | <rozkaz>

- operand jest opcjonalny w instrukcji

Formalizm języka asemblera

background image

<komentarz> ::=

;

<tekst> <koniec linii> | <koniec linii>

-

komentarz przed końcem linii jest opcjonalny


<rozkaz> ::= ADD | ADDC | SUB | SUBC | ... | DJNZ

-

rozkazami są: ADD,ADDC,SUB,SUBC,...,DJNZ (

mnemoniki

)

<dyrektywa> ::= DB | ... | ORG

-

dyrektywami są: DB,...,ORG


<operand> ::= <symbol > | <liczba>

-

operand jest symbolem lub liczbą


<tekst>::= <znak alfanumeryczny> ... <znak alfanumeryczny>
<symbol>::= <litera> <znak alfanumeryczny> ...<znak alfanumeryczny>
<znak alfanumeryczny>::=<litera> | <cyfra>
<liczba>::=<cyfra> | <cyfra>

Formalizm języka asemblera

background image

Mnemoniki rozkazów

Mnemonik

+ wskaźnik (wskaźniki) trybu adresowania i

predefiniowane nazwy rejestrów

rozpoznanie instrukcji

procesora (kod instrukcji)

Mnemoniki w przykładowym języku asemblera:

Mnemonik

Opis

LJMP

skocz do adresu podanego w polu argumentów
instrukcji

CPL

neguj bit, którego adres podano w argumencie

MOV

prześlij argument źródłowy do lokalizacji argumentu
przeznaczenia

background image

Mnemonik

Opis

LCALL

wywołaj procedurę, której adres podano w
argumencie

SJMP

skocz do adresu wyznaczonego na podstawie stanu
licznika rozkazów i przesunięcia zawartego w
argumencie

DJNZ

zmniejsz o jeden stan rejestru lub komórki pamięci,
a następnie skocz, jeżeli wynik zmniejszenia jest
różny od zera

RET

wróć z podprogramu

Mnemoniki rozkazów

background image

Tryb adresowania

Wskaźniki trybu adresowania

-

identyfikują tryb adresowania

- zwykle jednoznakowe symbole umieszczone przed

lub po argumencie

W przykładowym języku asemblera:

wskaźnik

Opis

#

adresowanie natychmiastowe

@

adresowanie pośrednie

adresowanie bezpośrednie

background image

Dyrektywy asemblera

Dyrektywy asemblera
nie odpowiadają instrukcjom ML
nie są tłumaczone na ML
służą do sterowania pracą asemblera.
posiadają przypisane zwykle kilkuznakowe

symbole

-

ORG,

-

ABS, REL

-

IF, ENDIF

-

DB, DW

background image

Dyrektywy asemblera

Dyrektywy między innymi służą do:

nadawania adresu początkowego kodowi

maszynowemu linii programu

oznaczenia początku segmentu, który ma być

tłumaczony na postać relokowalną

sterowania wykonaniem asemblacji
zarezerwowania obszaru w pamięci i przypisaniu

wartości poszczególnym bajtom

background image



;zaczynam pisać program

ORG

0000H

;rozmieść program od adresu 0

DANE

EQU

10H

;przypisz nazwie DANE wartość 10 heks

START:

MOV A, #DANE

;wpisz dane do rejestru A

JMP

START

;skok do linii oznaczonej etykietą START

Ilustracja elementów składowych programu

dyrektywa inicjalizacji adresu instrukcji

d

yrektywa przypisania wartości

etykieta

mnemonik

komentarz

background image

Realizacja funkcji asemblera (programu

tłumaczącego)

background image

Zamienić mnemoniki kodów operacji na odpowiedniki

w języku maszynowym

Zamienić symboliczne operandy na odpowiadające im

adresy ich lokalizacji w komputerze

Zbudować instrukcje maszynowe we właściwym

formacie

Zamienić stałe na ich wewnętrzne reprezentacje

maszynowe

Utworzyć program wynikowy i listing

Funkcje asemblera

background image

Zasada działania asemblera

Asembler pobiera plik źródłowy i zamienia umieszczony tam

tekst (w jęz. asemblera) na ciąg binarnych rozkazów

maszynowych (język maszynowy).


Produktem asemblera są :
- plik wynikowy (zwykle z rozszerzeniem .OBJ lub .HEX)
- plik listingu programu (rozszerzenie .LST).

Plik wynikowy zawiera program w języku maszynowym

zapisany w formacie odpowiednim do dalszego

przetwarzania przez inne programy narzędziowe.

background image

asemblacja

listing

Program w języku
asemblera

Plik wynikowy

Funkcje

asemblera

background image

1 0097 LED

EQU 97H

2 0000: 02 01 00

LJMP

START

3 0100:

ORG 100H

4 0100: B2 97 START: CPL LED

5 0102: 74 0A

MOV A,#10

6 0104: 12 01 09

LCALL DELAY

7 0107: 80 F7

SJMP START

8 0109: 78 FF DELAY: MOV R0,#0FFH

9 010B: D8 FE LOOP:

DJNZ R0, LOOP

10 010D: D5 E0 F9

DJNZ ACC, DELAY

11 0110: 22

RET

Zawartość pliku listingu przykładowego programu

background image

Proces tłumaczenia programu. Zadania.

1.

Analiza leksykalna.

2.

Analiza syntaktyczna (składniowa).

3.

Określenie ilości bajtów zajmowanych przez kod każdej
instrukcji.

4.

Przypisanie instrukcjom odpowiadających im kodów.

a)

tłumaczenie rozkazu na kod maszynowy,

b)

przypisanie wartości stałym,

c)

przypisanie wartości adresom.

5.

Określenie miejsca w pamięci, w którym ma być umieszczony
uzyskany kod maszynowy.

background image

LED EQU

97H

LJMP START
ORG 100H
START: CPL LED
MOV

A,#10

LCALL DELAY

SJMP

START

DELAY: MOV

R0,#0FFH

LOOP: DJNZ

R0, LOOP

DJNZ

ACC, DELAY

RET

Program w przykładowym języku asemblera.

background image

Wiersz

Etykieta/symbol

Mnemonik/dyrektywa

wsk

Arg #1

Arg #2

1

LED

EQU

97H

2

LJMP

START

3

ORG

100H

4

START:

CPL

LED

5

MOV A,

#

10

6

LCALL

DELAY

7

SJMP

START

8

DELAY:

MOV R0,

#

0FFH

9

LOOP:

DJNZ R0,

LOOP

10

DJNZ

ACC,

DELAY

11

RET

Wsk: wskaźnik adresowania

Wyodrębnienie składowych przykładowego programu.

background image

Mnemonik operacji

Liczba bajtów

kod

LJMP

3

02 aa aa

CPL

2

B2 a1

MOV A

2

74 cc

LCALL

3

12 aa aa

SJMP

2

80 aw

DJNZ R0

2

D8 aw

DJNZ

<komórka>

3

D5 a1 aw

RET

1

22

Uwagi:
aa aa

-

dwubajtowy adres bezwzględny, pierwszy najbardziej znaczący bajt

a1

-

jednobajtowy adres bezwzględny

aw

-

jednobajtowy adres względny

cc

-

jednobajtowa stała

<komórka>

-

predefiniowana nazwa komórki lub jednobajtowy adres bezwzględny

Kody maszynowe instrukcji procesora niezbędne do zakodowania

przykładowego programu.

T

a

b

e

la

k

o

d

ó

w

i

n

s

tr

u

k

c

ji

background image

02

LJMP

START

aa

aa

B2

START: CPL

LED

a1

74

MOV

A,#10

cc

12

LCALL DELAY

aa

aa

80

SJMP

START

aw

78 DELAY: MOV R0,#0FFH

cc

D8 LOOP:

DJNZ

R0, LOOP

aw

D5

DJNZ

ACC, DELAY

a1

aw

22

RET

Częściowe tłumaczenie na język maszynowy przykładowego programu.

LC=0000

LC=0100

LC=0102

LC=0104

LC=0107

LC=0109

LC=010B

LC=010D

LC=0110

background image

Symbol

l. Bajtów

Bajt #1

Bajt #2

LED

1

97

-

START

2

01

00

DELAY

2

01

09

LOOP

2

01

0B

Kompletna tablica symboli dla przykładowego programu.

T

a

b

e

la

s

y

m

b

o

li

background image

02

LJMP

START

aa

aa

B2

START: CPL

LED

97

74

MOV

A,#10

0A

12

LCALL DELAY

aa

aa

80

SJMP

START

F7

78 DELAY: MOV R0,#0FFH

FF

D8 LOOP:

DJNZ

R0, LOOP

FE

D5

DJNZ

ACC, DELAY

E0

F9

22

RET

Dodatkowe tłumaczenie przykładowego programu z podstawieniem wartości

stałych i wartości przesunięć względnych.

LC=0000

LC=0100

LC=0102

LC=0104

LC=0107

LC=0109

LC=010B

LC=010D

LC=0110

background image

02

LJMP

START

01

00

B2

START: CPL

LED

97

74

MOV

A,#10

0A

12

LCALL DELAY

01

09

80

SJMP

START

F7

78 DELAY: MOV R0,#0FFH

FF

D8 LOOP:

DJNZ

R0, LOOP

FE

D5

DJNZ

ACC, DELAY

E0

F9

22

RET

Finalne tłumaczenie przykładowego programu z podstawieniem wartości stałych,

przesunięć względnych i adresów.

LC=0000

LC=0100

LC=0102

LC=0104

LC=0107

LC=0109

LC=010B

LC=010D

LC=0110

background image

1 0097 LED

EQU 97H

2 0000: 02 01 00

LJMP

START

3 0100:

ORG 100H

4 0100: B2 97 START: CPL LED

5 0102: 74 0A

MOV A,#10

6 0104: 12 01 09

LCALL DELAY

7 0107: 80 F7

SJMP START

8 0109: 78 FF DELAY: MOV R0,#0FFH

9 010B: D8 FE LOOP:

DJNZ R0, LOOP

10 010D: D5 E0 F9

DJNZ ACC, DELAY

11 0110: 22

RET

Zawartość pliku listingu przykładowego programu

background image

Problem odwołań w przód

Odwołanie w przód: do etykiety, która zdefiniowana jest w

dalszej części programu

1 0097 LED

EQU 97H

2 0000: 02 01 00

LJMP

START

3 0100:

ORG 100H

4 0100: B2 97 START: CPL LED

……………………….

SYMTAB

xxx

yyy

LED 97H

1

2

START ???

4

97H

background image

Schemat blokowy działania prostego asemblera jednoprzejściowego cz 1.

Next

LC

0

W 1 kolumnie nazwa

Występuje w

tablicy symboli

Błąd

STOP

Wpisz do tablicy

Druga kolumna

W tablicy symboli

przypisz symbolowi

wartość E90

W tablicy symboli przypisz

symbolowi

wartość

Licznika

FIN

START

T

T

T

N

N

N

II ga kolumna

symbol lub liczba?

background image

Schemat blokowy działania prostego asemblera jednoprzejściowego cz.2.

W 2 kolumnie

Dyrektywa

B

łąd

STOP

Wpisz do Licznika

Lokalizacji warto

ść

wyst

ępującą za

dyrektyw

ą ORG

Format instrukcji

zgodny z jednym z

dopuszczalnych

Określ typ

adresowania

Błąd

STOP

Do pliku wynikowego

wpisz kod instrukcji

określony na podstawie...

LC

LC+1

NEXT

N

N

N

T

T

N

FIN

background image

Asembler dwuprzejściowy

A) etap zapisywania tablicy symboli

(odwołań)

pierwsze

przejście

B) etap generacji kodu

drugie

przejście

ad A) Pierwsze

przejście: dla każdego wiersza:

1.

sprawdzenie

składni.

Jeżeli

napotkano

błędy,

odpowiednia informacja wpisywana jest do pliku listingu
(rozszerzenie .LST).

2.

przydzielenie

pamięci niezbędnej dla kodu programu

(alokacja)

3.

jeżeli w pierwszym przejściu wykryto błędy składni

kończy pracę.

background image

Asembler dwuprzejściowy

Ad B)

“obraz” bajtów, które będą załadowane pod poszczególne

adresy w

pamięci operacyjnej (nadanie wartości) .

1.

Dla

każdej linii tworzy odpowiadający jej

finalny

kod.

2.

Rezultat jest zapisywany do pliku listingu (dla analizy
przez

programistę).

3.

Kod programu zostaje zapisany do pliku wynikowego
(.OBJ lub .HEX),

jeżeli nie wystąpiły błędy = koniec

przetwarzanie pliku

źródłowego.

background image

Przejście 1

Przejście 2

Plik

przejściowy

Plik
wynikowy

Program
źródłowy

OPTAB

SYMTAB

SYMTAB

• Tablica kodów instrukcji (OPTAB)

• Tablica symboli (SYMTAB)

• Licznik lokalizacji (LC)

Struktury danych asemblera

background image

Główne składowe i główne operacje asemblera


Wyszukiwarka

Podobne podstrony:
PPS 2015 W1
Farmakologia pokazy, Podstawy Farmakologii Ogólnej (W1)
W1 wprow
Przygotowanie PRODUKCJI 2009 w1
Plan pracy na 2011 pps
w1 czym jest psychologia
Zimne piwo pps
PD W1 Wprowadzenie do PD(2010 10 02) 1 1
wde w1
Finanse W1
wyklad7 pps

więcej podobnych podstron