background image

Podstawy programowania 

systemowego 

Dr inż. Zbigniew Lach 

 

konsultacje: wtorek, 10:15-11:00 

środa, 12:15-13:00 

 

 

background image

Planowanie  produktu 

Projekt. systemu 

Projektowanie  sprzętu 

Projekt. programu 

Zgodność z założeniami? 

STOP 

Projektowanie systemu komputerowego 

background image

System komputerowy 

background image

oprogramowanie systemowe

  

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

 w szczególności: steruje i koordynuje pracę 
komputera zapewniając jego funkcjonalność, zwłaszcza 
możliwość wykonywania programów aplikacyjnych 

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

 pojęcie szersze niż systemy operacyjne 

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 

język niskiego poziomu 

środowisko o limitowanych zasobach  

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

 

wykonania  

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

 

Program systemowy powinien być bardzo 

efektywny i mieć małe narzuty uruchomieniowe

  

background image

 

Język asemblera; cechy i mechanizmy asemblera 

 

Implementacja struktur sterowania programem 

 

Implementacja 

działań arytmetycznych i logicznych 

 

Programowanie proceduralne  

 

Obsługa wejścia wyjścia  

 

Programowanie systemu 

przerwań 

 

Programy relokowalne 

 

Programowanie 

modułowe 

 

 

Elementy sterowania procesami 
  

Program wykładu  

background image

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

(I) 16 kwietnia 

(II) 18 czerwca  

Literatura  podstawowa: 

1. W.  Stanisławski,  D. Raczyński  „Programowanie 

systemowe  mikroprocesorów  rodziny  x86”, PWN 
Warszawa  2010 

2. A. Silberschatz.  P.B. Galwin,  "Podstawy  systemów 

operacyjnych",  WNT  Warszawa  2000  

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

LT&P,  Warszawa  1994 

4. W.  Stallings,  "Organizacja  i architektura  systemu 

komputerowego",  WNT,  Warszawa  2000 

 

background image

Wykład 1 

 

Podstawowe mechanizmy języka 

asemblera 

background image

• 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 

Język  asemblera 

background image

Poziom 

Opis 

Asembler (ASM) 

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

Język Maszynowy (ML) 

 

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

Język  asemblera 

background image

Formalizm  języka  ASM 

symbolicznie zakodowane 

instrukcje procesora 

symbolicznie zakodowany argument 

instrukcji (ETYKIETA) 

symbolicznie zakodowana instrukcja 

procesora (MNEMONIK) 

background image

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  

HLL i ASM w kontekście  programowania systemowego 

background image

Typ 

zastosowań 

HLL 

ASM 

Sterownik 
urządzenia 

Złożone techniki 
programowania 

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

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

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

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

HLL i ASM w kontekście  programowania systemowego 

background image

Specyfika użycia ASM do programowania 

• 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

 

 

HLL i ASM w kontekście  programowania systemowego 

background image

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  ASM 

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  ASM 

background image

Język  asemblera  typowo  rozróżnia  nstępujące 

jednostki leksykalne : 

Formalizm  języka  ASM 

-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 

 

Formalizm  języka  ASM 

background image

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

- operand jest opcjonalny w instrukcji 

 

<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  ASM 

background image

Formalizm  języka  ASM 

symbolicznie zakodowane 

instrukcje procesora 

symbolicznie zakodowany argument 

instrukcji (ETYKIETA) 

symbolicznie zakodowana instrukcja 

procesora (MNEMONIK) 

background image

Cechy języka  ASM 

ML a w konsekwencji ASM 

– nie posiada mechanizmów 

charakterystycznych dla HLL: 

• złożonych  konstrukcji  sterowania  programem  (FOR, 

WHILE, SWITCH) 

• realizacji  bloków  programu,  w  tym  lokalności 

zmiennych 

• relokacji programu 
• modułowej budowy programu 
• … i wielu innych 

realizacja  takich 

mechanizmów  przeniesiona  na 

programistę 

m

ożliwe  wspomaganie  użyciem  zaawansowanych 

mechanizmów asemblera 

background image

Cechy zaawansowanego  ASM 

Rozwiązanie  problemu  wpływu  ograniczeń  ML  na 

cechy ASM 

  

 

• Wprowadzenie  do  języka  ASM 

dyrektyw 

 

-polecenia dla asemblera  

 

-predefiniowane konstrukcje 

• Zastosowanie preprocesingu  

background image

Dyrektywy asemblera  
• nie odpowiadają instrukcjom ML 
• nie są tłumaczone na ML 
• służą do sterowania pracą asemblera. 

 

-  

ORG  

-  

ABS, REL 

-  

IF, ENDIF 

-  

DB, DW 

Dyrektywy  ASM 

Przykłady  dyrektyw: 

Dyrektywy, podobnie jak mnemoniki, posiadają przypisane zwykle 
kilkuznakowe symbole 

background image

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 

• są identyfikatorami predefiniowanej konstrukcji 

programowej 

 

Dyrektywy  ASM 

background image

   Dyrektywy  ASM 

Rozkazy dla asemblera. 

Wykonywane przez asembler, nie 

tłumaczone na ML. 

Mogą wpływać na wynikowy 

kod, tablicę symboli, plik listingu, 

wewnętrzne parametry 

asemblera. 

background image

Funkcje dyrektyw  ASM 

background image

Funkcje dyrektyw  ASM 

background image

• Polecenia sterujące asemblacją (wykonywane w 

czasie asemblacji) 

– IF-ELSE-ENDIF (IFE, IFDEF, IFNDEF...) 

– Jeden program – wiele wariantów 

 generacja 

innego kodu w zależności od „otoczenia”  

• np. pliku źródłowym zdefiniowano parametr=typ 

procesora 

 

Dyrektywy  ASM – asemblacja  warunkowa 

background image

Przykład: 

 

Dyrektywy  ASM – asemblacja  warunkowa 

background image

Makroinstrukcja – symbol, któremu przypisano fragment 

tekstu programu (w definicji makroinstrukcji) 

 
 

Gdziekolwiek w pliku źródłowym znajdzie się symbol 

zdefiniowanego wcześniej makra, asembler wpisze w jego 

miejsce w pliku źródłowym tekst przypisany do makra 

(makro = zmienna asemblera, która może być używana 

jako “skrót” przypisanego jej tekstu) 

 

 

 

Gdziekolwiek w pliku źródłowym znajdzie się symbol 

zdefiniowanego wcześniej makra, asembler wpisze w jego 

miejsce w pliku źródłowym tekst przypisany do makra (makro 

= zmienna asemblera, która może być używana jako “skrót” 
przypisanego jej tekstu) 

Makroinstrukcje  w ASM 

background image

Makroinstrukcje  w ASM 

background image

Program źródłowy 

Makro procesor 

Asembler 

Kod wynikowy 

 

 
 

 

 
 

Makrodefinicje 

Przetwarzanie makro 

Definicja 

„wklej” 

Program rozwinięty 

Rozpoznaj definicje 

Zachowaj definicje 

Rozpoznaj wywołania makro 

Rozwiń wywołania makro 

Przetwarzanie  programu (preprocesing) 

background image

Gdziekolwiek w pliku źródłowym znajdzie się symbol 

zdefinio

Korzyści stosowania makroinstrukcji: 

 

Redukuje liczbę błędów

 

powodowanych przez programistę. 

 

Umożliwia 

zdefiniowanie często używanych

 w programie 

sekwencji instrukcji. 

 

Wielokrotne użycie tego makra w tekście programu 

źródłowego 

każdorazowo zapewni ten sam rezultat 

 

Skraca się czas przygotowania

 

programu źródłowego, a 

program zyskuje na przejrzystości. 

 

Symbole (etykiety) użyte w makro są lokalne

 

w obrębie 

makro i nie są mylone przez asembler z identycznymi 

symbolami używanymi poza nim. 

Makroinstrukcje  w ASM 

background image

 

ADD_AB_R0R1            MACRO 
 

 

CLC 

   

; zeruj bit przeniesienia 

 

 

ADD A,R0 

; dodaj młodsze bajty 

 

 

ADDC B,R1  

; dod. starsze bajty z uwzględnieniem przen. 

 

 

ENDM     

; koniec makro 

 

 
 

Przykład definicji makra 

Makroinstrukcje  w ASM 

background image

• Sposób definiowania makro 
• Zastępowanie parametrów 
• Lokalność symboli 
• Rozwinięcia powtarzane 

Problemy  makro 

background image

Program źródłowy 

STRG

  

MACRO

 

 

 

 

MOV AX, BX 

 

MOV BX, AX 

 

 

NOP 

 

 

ENDM 

 

STRG 

 

STRG 

 

 

Program rozwinięty 

  . 

  . 

 

   

MOV AX, BX 

   

MOV BX, AX 

   

NOP 

  .

 

MOV AX, BX 

   

MOV BX, AX 

   

NOP

  . 


Rozwijanie  makro 

background image

Przetwarzanie makrodefinicji w trakcie rozwijania 

ENDM 

ENDM 

ENDM 

........ 

RDBUFF 

........ 
........ 

WRBUFF 

........ 

MACROS         MACRO 

Makrodefinicje zagnieżdżone 

background image

Program źródłowy 

STRG  

MACRO

  

DST, SRC 

   

MOV AX, 

SRC 

   

MOV 

DST

, AX 

   

NOP 

   

ENDM 

  . 
STRG 

DATA1,  DATA2

 

  . 
STRG 

DATA4, DATA5 

Program rozwinięty 

  . 

  . 

   

MOV AX, 

DATA1 

   

MOV 

DATA2

, AX 

   

NOP 

   

MOV AX, 

DATA4 

   

MOV 

DATA5

, AX 

   

NOP 

 


Zastępowanie parametrów  makro 

background image

• Podstawowy asembler – brak symboli lokalnych 

• Makroasembler

 

– jeżeli kopiowałby tekst źródłowy 

bez zmian symbole w tekście makrodefinicji 

nie 

byłyby lokalne

 

• Symbole lokalne

 - makroprocesor nadaje unikalne 

nazwy w czasie wstawiania tekstu makrodefinicji do 
programu 

– Np. 

STRG MACRO 

  X1  EQU  10H   

STRG_1_X1 EQU  10H 

Lokalność symboli  makro 

background image

 

Dyrektywy 

FOR, REPEAT, WHILE 

 
Efekt użycia: skrócenie tekstu programu: 

 

 

 

 

 

 

 

FOR 

parametr, <argument [,argument]...> 

tekst makro 

ENDM 

 

 

REPEAT 

wyrażenie 

tekst makro 

ENDM 

Powtórz makro „wartość 
wyrażenia” razy 

Parametr w tekście – zastąpiony 
kolejnym argumentem z listy 
 

Makro – „wywołania” powtarzane 

background image

 

Dyrektywy 

FOR, REPEAT, WHILE 

 
Efekt użycia: skrócenie tekstu programu: 

 

 

 

 

 

 

 

WHILE 

wyrażenie 

tekst makro 

ENDM 

Powtarzaj tekst makro kiedy wyrażenie 
= TRUE (modyfikacja w makro!) 

Makro – „wywołania” powtarzane 

background image

    Makro a wywołanie  procedury 

  
       

 
 

 

WRREC

  

 

  
       

 

RDREC 

Np. 2-
krotne 

wywołanie 

EXPAND 

  

… 

 
 

  
 

    

Main 

RDBUFF 
 

190a 

190m 

WRBUFF 

 210a 

 210h 

WRBUFF 

 220a 

  220h  

Wywołanie procedury; 
użycie stosu 

Makro 

Main 

RDBUFF 
 

WRBUFF 

Ten sam 
tekst 

wielokrotnie 

RDREC 

WRREC 

WRREC 

Main 

background image

Cechy makroinstrukcji 

Mechanizm 

„przekazywania”  parametrów i lokalność 

wewnętrznych  symboli 

  makroinstrukcja 

może 

służyć jako metoda implementacji bloków programu 

Wada 

rozwiązania: 

mechanizm statyczny 

– bloki mają 

charakter  statyczny,  ustalona 

postać  na  etapie 

generacji programu 

źródłowego 

background image

macro 

 

GETLINE 

PROCESSLINE 

GETLINE 

             

Następny wiersz 

PROCESSLINE 

jest

 

makro

 

                         

ARGTAB 

 
 

 
 

 
 

NAMTAB 

nazwa makro do 
NAMTAB 

Algorytm jednoprzejściowego makroprocesora 

DEFINE 

Kopiuj 
definicję 

makro z 
pliku 
źródłowego 

EXPAND 

Kopiuj 
tekst 

rozwinięcia, 
substytucja 

PROCESSLINE 

jest

 

makrowywołanie 

 

                         

 

RDBUFF 

 

DEFTAB 

RDBUFF 

makrodefinicja 
do DEFTAB 

 

WRBUFF 

 

WRBUFF 

makrodefinicja  z 
DEFTAB