PPS 2013 W1


Podstawy programowania
systemowego
Dr inż. Zbigniew Lach
konsultacje: poniedziałek, 18:15-19:00
środa, 10:15-11:00
System komputerowy
OPROGRAMOWANIE
UŻYTKOWE
OPROGRAMOWANIE
SYSTEMOWE
HARDWARE
Programowanie systemowe = rodzaj programowania
systemów oprogramowania
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.
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
Program wykładu
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
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
Zaliczenie przedmiotu: min. 50% punktów + 1 punkt z
dwóch kolokwiów:
(I) 15 kwietnia
(II) 10 czerwca
Wykład 1
Oprogramowanie systemowe
Asembler
Hierarchia oprogramowania
Poziom Opis
Program aplikacyjny Oprogramowanie
zaprojektowane dla określonego
zastosowania
Język wysokiego Programy są kompilowane z HLL
poziomu (HLL) na język asemblera lub
maszynowy, n.p. C++, Pascal,
Java, Visual Basic.
Hierarchia oprogramowania.
Poziom Opis
System operacyjny Zawiera procedury, które mogą
być wywoływane z programów
(loadery)
napisanych w HLL lub
asemblerze. Może być
wyposażony w interfejs
programów aplikacyjnych (API).
Asembler (ASM) Stosuje mnemoniki instrukcji
bezpośrednio odpowiadające
(konsolidatory, edytory,
rozkazom języka maszynowego.
biblioteki)
Hierarchia oprogramowania.
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.
Projektowanie systemu komputerowego
Planowanie produktu
Projekt. systemu
Projektowanie sprzętu
Projekt. programu
Zgodność z założeniami?
Projektowanie systemu komputerowego
Projektowanie programu
Określenie właściwości
SporzÄ…dzanie schematu
blokowego
Kodowanie
użycie narzędzi do
programowania
Edycja programu
zródłowego
systemowego
ASEMBLACJA
(TAUMACZENIE)
TAK
BADY
?
NIE
Testowanie programu
NIE
BADY
?
TAK
Testowanie systemu
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)
Programy wspomagajÄ…ce projektowanie
" Asembler - stosuje mnemoniki instrukcji bezpośrednio
odpowiadające rozkazom języka maszynowego (+linker,
loader)
" Biblioteki - gotowe programy lub fragmenty programów,
wykonujących standardowe operacje (np. mnożenie,
dzielenie liczb, we-wy, itp..)
" Symulator - symuluje zachowanie siÄ™ systemu podczas
wykonania programu (tańsze i wygodniejsze niż
debuger)
Programy wspomagajÄ…ce projektowanie
" Konsolidator/loader - umożliwia scalenie programu z
odrębnych modułów / załadowanie do pamięci i
przekazanie sterowania
" Debuger - 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
Funkcje narzędzi systemowych
Program
Konsoli-
Kod
asembler
dator
wynikowy
zródłowy
Kod wykonywalny
symulator
debugger
Loader
" Zależność od procesora
 różne formaty instrukcji, różne rozkazy
sprzęt
Asembler
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
Porównanie HLL i ASM
Typ zastosowań HLL ASM
Oprogramowanie Struktury Brak struktur
ogólnego formalne języków formalnych
przeznaczenia na ułatwiają
jednÄ… platformÄ™ zorganizowanie
komputerowÄ… programu
Oprogramowanie Przenośne Trudne do
ogólnego wykonania
przeznaczenia na
wiele platform
komputerowych
Porównanie HLL i ASM
Typ zastosowań HLL ASM
Sterownik Złożone techniki Dostęp do
urzÄ…dzenia programowania hardware u
bezpośredni i
prosty
Systemy Dają w wyniku Idealny, ponieważ
wbudowane i gry zbyt długie program
wymagajÄ…ce programy maszynowy jest
bezpośredniego maszynowe; krótki i może być
dostępu do mogą być wykonywany
urządzeń nieefektywne szybko
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
Przykładowy program w ASM
;zaczynam pisać program
ORG
;rozmieść program od adresu 0
0000H
;przypisz nazwie DANE wartość 10 heks
DANE
10H
EQU
;wpisz dane do rejestru A
#DANE
START: MOV A,
;skok do linii oznaczonej etykietÄ… START
START
JMP
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
Formalizm języka asemblera
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
Asembler typowo rozróżnia jednostki leksykalne :
- program
- wiersz
- instrukcja
- operand
Formalizm języka asemblera
::= |
- program jest ciÄ…giem 1 lub wielu wierszy
::= | | |
- wiersz zawiera definicjÄ™, polecenie lub komentarz
::= =
- definicja jest symbolem po którym następuje znak przypisania oraz
operand
::= |
|
- etykieta i instrukcja sÄ… w poleceniu opcjonalne
::= :
- etykieta jest symbolem po którym umieszczono dwukropek
::= |
- operand jest opcjonalny w instrukcji
Formalizm języka asemblera
::= ; |
- komentarz przed końcem linii jest opcjonalny
::= ADD | ADDC | SUB | SUBC | ... | DJNZ
- rozkazami sÄ…: ADD,ADDC,SUB,SUBC,...,DJNZ (mnemoniki)
::= DB | ... | ORG
- dyrektywami sÄ…: DB,...,ORG
::= |
- operand jest symbolem lub liczbÄ…
::= ...
::= ...
::= |
::= |
Mnemoniki rozkazów
Mnemonik + wskaznik (wskazniki) 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 zródłowy do lokalizacji argumentu
przeznaczenia
Mnemoniki rozkazów
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
Tryb adresowania
Wskazniki trybu adresowania
- identyfikujÄ… tryb adresowania
- zwykle jednoznakowe symbole umieszczone przed
lub po argumencie
W przykładowym języku asemblera:
wskaznik Opis
# adresowanie natychmiastowe
@ adresowanie pośrednie
adresowanie bezpośrednie
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
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
Ilustracja elementów składowych programu
dyrektywa inicjalizacji adresu instrukcji
dyrektywa przypisania wartości
;zaczynam pisać program
komentarz
;rozmieść program od adresu 0
0000H
ORG
;przypisz nazwie DANE wartość 10 heks
10H
EQU
DANE
;wpisz dane do rejestru A
#DANE
START: MOV A,
;skok do linii oznaczonej etykietÄ… START
START
JMP
mnemonik
etykieta
Realizacja funkcji asemblera (programu
tłumaczącego)
Funkcje asemblera
" 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
Zasada działania asemblera
Asembler pobiera plik zró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.
Funkcje
Program w języku
asemblera
asemblera
asemblacja
Plik wynikowy
listing
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
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.
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.
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: wskaznik adresowania
Wyodrębnienie składowych przykładowego programu.
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 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
- predefiniowana nazwa komórki lub jednobajtowy adres bezwzględny
Kody maszynowe instrukcji procesora niezbędne do zakodowania
przykładowego programu.
Tabela kodów instrukcji
" 02 LJMP START
LC=0000
" aa
" aa
" B2 START: CPL LED
LC=0100
" a1
" 74 MOV A,#10
LC=0102
" cc
" 12 LCALL DELAY
LC=0104
" aa
" aa
" 80 SJMP START
LC=0107
" aw
" 78 DELAY: MOV R0,#0FFH
LC=0109
" cc
" D8 LOOP: DJNZ R0, LOOP
LC=010B
" aw
" D5 DJNZ ACC, DELAY
LC=010D
" a1
" aw
" 22 RET
LC=0110
Częściowe tłumaczenie na język maszynowy przykładowego programu.
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.
Tabela symboli
" 02 LJMP START
LC=0000
" aa
" aa
" B2 START: CPL LED
LC=0100
" 97
" 74 MOV A,#10
LC=0102
" 0A
" 12 LCALL DELAY
LC=0104
" aa
" aa
" 80 SJMP START
LC=0107
" F7
" 78 DELAY: MOV R0,#0FFH
LC=0109
" FF
" D8 LOOP: DJNZ R0, LOOP
LC=010B
" FE
" D5 DJNZ ACC, DELAY
LC=010D
" E0
" F9
" 22 RET
LC=0110
Dodatkowe tłumaczenie przykładowego programu z podstawieniem wartości
stałych i wartości przesunięć względnych.
" 02 LJMP START
LC=0000
" 01
" 00
" B2 START: CPL LED
LC=0100
" 97
" 74 MOV A,#10
LC=0102
" 0A
" 12 LCALL DELAY
LC=0104
" 01
" 09
" 80 SJMP START
LC=0107
" F7
" 78 DELAY: MOV R0,#0FFH
LC=0109
" FF
" D8 LOOP: DJNZ R0, LOOP
LC=010B
" FE
" D5 DJNZ ACC, DELAY
LC=010D
" E0
" F9
" 22 RET
LC=0110
Finalne tłumaczenie przykładowego programu z podstawieniem wartości stałych,
przesunięć względnych i adresów.
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
Problem odwołań w przód
" Odwołanie w przód: do etykiety, która zdefiniowana jest w
dalszej części programu
SYMTAB
xxx yyy
LED 97H
1
START ???
2
4
1 0097 LED EQU 97H
97H
2 0000: 02 01 00 LJMP START
3 0100: ORG 100H
4 0100: B2 97 START: CPL LED
& & & & & & & & & .
Schemat blokowy działania prostego asemblera jednoprzejściowego cz 1.
START
Next LCŹð0
T N
W 1 kolumnie nazwa
T N
Występuje w
tablicy symboli
BÅ‚Ä…d
Wpisz do tablicy
STOP
T N
II ga kolumna
Druga kolumna
symbol lub liczba?
W tablicy symboli W tablicy symboli przypisz
przypisz symbolowi symbolowi wartość
wartość E90 Licznika
FIN
Schemat blokowy działania prostego asemblera jednoprzejściowego cz.2.
N
N T
W 2 kolumnie
N T
Format instrukcji
N
Dyrektywa
zgodny z jednym z
dopuszczalnych
BÅ‚Ä…d
Wpisz do Licznika
Lokalizacji wartość
występującą za
Określ typ
dyrektywÄ… ORG
BÅ‚Ä…d
adresowania
STOP
Do pliku wynikowego
STOP
wpisz kod instrukcji
określony na podstawie...
FIN
LCŹðLC+1
NEXT
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ę.
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 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 zródłowego.
Struktury danych asemblera
" Tablica kodów instrukcji (OPTAB)
" Tablica symboli (SYMTAB)
" Licznik lokalizacji (LC)
Program
zródłowy
Plik
Plik
Przejście 1 Przejście 2
przejściowy
wynikowy
OPTAB SYMTAB SYMTAB
Główne składowe i główne operacje asemblera


Wyszukiwarka

Podobne podstrony:
PPS 13 W7
PPS 15 W1
PPS 13 W2
PPS 13 W8
PPS 13 W4
SD przykłady do w1 13
ZWC w1 13 2014
Wykład 1 program wykładów W1 13 wprowadzenie
MT W1 Statyka 13
Psychopatologia Kmita w1 12 13
PPS W1
UAS 13 zao
er4p2 5 13

więcej podobnych podstron