background image

Oprogramowanie 

podstawowe trybu 

rzeczywistego

Cd.: wybrane urządzenia, 

zimny start, struktura 

programu

background image

Co dziś będzie…

Wybrane urządzenia

– CMOS, 
– zegar, 
– generator dźwięku, 
– ekran, 
– klawiatura

• Zimny start i ładowanie
• Struktura .EXE

2

background image

Wybrane urządzenia - CMOS

• Na płycie głównej urządzenia zewnętrzne z 

podtrzymaniem bateryjnym:

– pamięć konfiguracyjna (CMOS)

– Zegar czasu rzeczywistego (licznik impulsów z 

generatora)

• Dostęp do komórki pamięci CMOS:

– O adresie ustawionym w porcie o adresie 70H

– Przez port o adresie 071H w przestrzeni I/O

• Np. odczyt komórki 8 CMOS do AL:

– MOV AL,8

– OUT 70H,AL

– JMP $+2

– IN AL,71H

3

background image

Wybrane urządzenia – 

CMOS

4

background image

Wybrane urządzenia - zegar

• Zegar czasu rzeczywistego generuje sygnał 

przerwania IRQ0

• co 55ms, tzn. 18,2 razy na sekundę

• Jeśli IF=1,  sterownik przerwań generuje 

przerwanie nr 8

• Podprogram obsługi przerwania 

– aktualizuje czterobajtowy licznik w pamięci pod 

adresem 0:46CH (licznik zwiększany o 1 co 55ms)

– zmniejsza o 1 wartość jednobajtowego licznika pod 

adresem 0:440H

– jak wszystkie podprogramy obsługi przerwań 

zewnętrznych:

• MOV AL,20H ; kod EOI (End Of Interrupt)

• OUT 20H,AL ; port sterownika przerwań

5

background image

6

background image

Wybrane urządzenia – 

generator dźwięku

• Blokowanie dźwięku (jak bramka A20, czy 

reset) przez sterownik klawiatury – port 

61H w przestrzeni I/O

• Zera na bitach 0 i 1 – blokują

•  

IN AL,61H

; odczytanie portu 61H...

AND AL,0FCH ; maskowanie speaker'a...
OUT 61H,AL ; zapisanie - wyłączenie speaker'a

Jedynki na bitach 0 i 1 – zezwalają na 

dźwięk

IN AL,61H

; odczytanie portu 61H...

OR AL,3

; odblokowanie...

OUT 61H,AL ; i zapisanie - włączenie

7

background image

8

background image

Wybrane urządzenia – 

generator dźwięku

• Wysokością dźwięku steruje rejestr 

dostępny przez port 42H,  po wpisaniu 

wartości 0B6H do portu 43H

• MOV AL,0B6H ; 

adres...

• OUT 43H,AL

do rejestru 43H;

• MOV AL,DL

wys. dźwięku - mniej znaczący B

• OUT 42H,AL
• MOV AL,DH

wys. dzwieku - bardziej znaczacy

• OUT 42H,AL

9

background image

Wybrane urządzenia - ekran

• W IBM PC pamięć obrazu na karcie graficznej to tzw. 

„wyświetlana pamięć”: dwudostępne urządzenie 

pamiętające.

• Zawartość pamięci obrazu jest cyklicznie odczytywana 

ok. 20 razy na sekundę przez układy wyświetlania, ta 

zawartość steruje obrazem na ekranie.

• Pamięć obrazu może być zapisywana przez procesor – 

jest dostępna w przestrzeni adresowej pamięci 

operacyjnej.

• Tryb graficzny: gdy jednostka informacji w pamięci 

obrazu opisuje jeden punkt na ekranie (pixel)

• Tryb tekstowy (znakowy), gdy opisuje tzw. znak: 

prostokątny obszar na ekranie. Znaki są grupowane w 

wiersze i kolumny.

10

background image

Tryby znakowe

• W trybach znakowych pojedynczym elementem obrazu na 

ekranie jest znak. 

• Znak jest obszarem prostokątnym, który może znajdować się 

na ekranie tylko w jednym ze ściśle określonych położeń: cały 

obraz na ekranie w trybie znakowym składa się z pewnej liczby 

wierszy i kolumn znakowych. 

• Rozmiar pola znaku (w punktach) zależy od typu sterownika, 

zaś liczby kolumn i wierszy zależą od wybranego trybu 

znakowego. 

• Każdy znak w pamięci video kodowany jest w postaci dwóch 

bajtów: pierwszy (o niższym adresie) zawiera kod znaku (ASCII), 

zaś drugi bajt (o adresie o 1 większym) zawiera tzw. atrybut, 

określający barwę lub stopień szarości znaku (tzw. kolor 

pierwszoplanowy), barwę lub stopień szarości tła i wskaźnik 

migotania znaku. Migotanie polega na okresowym przełączaniu 

koloru znaku z koloru pierwszoplanowego do koloru tła i 

odwrotnie. Bit sterujący migotaniem może być wykorzystywany 

jako bit sterujący jasnością koloru tła. 

11

background image

Tryby podstawowe

• Tablica trybów pracy sterowników obrazu

Pamięć

• Tryb_  __Rodzaj__   Rozdzielczość    Sterowniki  _____Kolory_______  

obrazu

•  00h Tekstowy 40 x 25

Oprócz MDA16 stopni szarości

B8000

•  01h   Tekstowy  40 x 25

Oprócz MDA16 znak/8 tło     

B8000

•  02h   Tekstowy 80 x 25

Oprócz MDA16 stopni szarości 

B8000

•  03h   Tekstowy 80 x 25

Oprócz MDA    16 znak/8 tło

B8000

•  04h   Graficzny 320 x 200 Oprócz MDA4 B8000

•  05h   Graficzny 320 x 200 Oprócz MDA4 stopnie szarości 

B8000

•  06h   Graficzny 640 x 200 Oprócz MDA   2          

B8000

•  07h   Tekstowy 80 x 25

MDA,EGA,HGC czerń/biel  

B0000

•  0Bh   Zarezerwowany    (wewnętrzny dla EGA)

•  0Ch   Zarezerwowany    (wewnętrzny dla EGA)

•  0Dh   Graficzny 320 x 200 EGA

16 

A0000

•  0Eh   Graficzny 640 x 200 EGA

16  

A0000

•  0Fh   Graficzny 640 x 350 EGA          czerń/biel

A0000

•  10h   Graficzny 640 x 350 EGA

16 A0000

12

background image

Atrybut w trybach 

tekstowych

• CGA i EGA
• bit nr: 7 6 5 4 3 2 1 0

B R G B I

R G B


Kolor  Kolor

tła pierwszego planu (znaku)


migotanie

Intensywność koloru znaku

• R ‑ składowa czerwona barwy (Red);
• G ‑ składowa zielona barwy (Green);
• B ‑ składowa niebieska barwy (Blue).

 

13

background image

Pamięć obrazu

• Obowiązują następujące reguły wyznaczania położenia 

bajtów opisujących znak w pamięci obrazu:

• AdK = 2*LK*Y + 2*X

• AdA = 2*LK*Y + 2*X + 1

• gdzie:

• AdK ‑ adres kodu znaku względem początku strony w 

pamięci obrazu;

• AdA ‑ adres atrybutu znaku względem początku strony 

w pamięci obrazu;

• LK ‑ liczba kolumn w aktualnym trybie, LK   {40,80};

• X ‑ numer kolumny pozycji znaku na ekranie, X   

{0..LK‑1};

• Y ‑ numer wiersza pozycji znaku na ekranie, Y   {0..24}.

14

background image

Przerwanie BIOSu 10H

AH=0 ‑ ustawienie nowego trybu wyświetlania

dane:

AL ‑ nowy tryb wyświetlania; wyniki: nie ma;

AH=1 ‑ ustawienie rozmiaru kursora:
dane: CL (bity 4..0) ‑ numer pierwszej (od góry) linii kursora w polu znaku;

CH (bity 4..0) ‑ numer ostatniej (od góry) linii kursora w polu znaku;
wyniki: nie ma;

AH=2 ‑ ustawienie położenia kursora:

dane:

BH ‑ numer strony; 

DL ‑ nr kolumny; 

DH ‑ nr 

wiersza;
wyniki: nie ma;

AH=3 ‑ odczytanie położenia i rozmiaru kursora:

dane:

BH ‑ numer strony;

wyniki

:DL ‑ nr kolumny, w której znajduje się kursor;

DH ‑ nr wiersza, w którym znajduje się kursor;
CL (bity 4..0) ‑ numer pierwszej (licząc od góry) linii kursora w polu 

znaku;
CH (BITY 4..0) ‑ numer ostatniej (licząc od góry) linii kursora w polu 

znaku;

15

background image

Przerwanie BIOSu 10H cd.

AH=4 ‑ ustawienie numeru (przełączenie) strony wyświetlanej

dane: AL ‑ nowy numer strony do wyświetlania; wyniki: nie 

ma;

AH=8 ‑ odczytanie znaku i atrybutu z pozycji wskazywanej przez 

kursor:
dane: BH ‑ numer strony; wyniki: AL ‑ kod znaku; AH ‑ atrybut;

AH=9 -  zapisanie znaku i atrybutu wielokrotnie na pozycji 

wskazywanej przez kursor:
dane: BH ‑ nr strony; AL ‑ kod znaku; BL ‑ atrybut; CX ‑ liczba 

powtórzeń znaku;
wyniki: nie ma;

AH=10 (0AH) ‑ zapisanie znaku wielokrotnie na pozycji 

wskazywanej przez kursor:
dane: BH ‑ nr strony; AL ‑ kod znaku; CX ‑ liczba powtórzeń 

znaku;
wyniki: nie ma;

16

background image

Przerwanie BIOSu 10H cd.

AH=14 (0EH) ‑ zapisanie znaku na ekranie na 

polucji kursora i przesunięcie kursora (tzw. zapis w 

trybie TTY):
dane: AL ‑ kod znaku do zapisania; BL ‑ kolor tła 

(gdy tryb graficzny); BH ‑ numer strony;
wyniki: nie ma;

AH=15 (0FH) ‑ pobranie aktualnego trybu video:

dane: nie ma;
wyniki:

AL ‑ tryb video;

AH ‑ liczba kolumn na stronie;
BH ‑ numer strony wyświetlanej.

17

background image

Funkcja 9 DOSu

AH=9 przy wywołaniu przerwania INT 33 

(21H) ‑ wyprowadzenie łańcucha znaków 

ograniczonego znakiem $ (dolara):
dane:

DS:DX ‑ adres początku łańcucha 

znaków;
wyniki: nie ma;

łańcuch znaków powinien być zakończony 

znakiem $ (dolara), który nie będzie 

wysyłany na ekran. Nie ma sposobu 

wyświetlenia znaku dolara za pomocą tej 

funkcji.

18

background image

Wybrane urządzenia - 

klawiatura

19

background image

Przerwania klawiatury 1

• Przerwanie sprzętowe 9: po kazdym 

wciśnięciu, zwolnieniu i przekroczeniu 
interwału przytrzymywania klawisza; 
porty sterownika klawiatury od 60H 
poczynając

• BIOS odczytuje numer (kod skanowania) 

klawisza, dokonuje konwersji na ASCII i 
umieszcza te dwa bajty w buforze 
pierścieniowym (FIFO) klawiatury

20

background image

Przerwania klawiatury 2

• Przerwanie usługowe BIOS nr 22 (16H), bez „echa”, funkcje:

• AH=0 – 

pobranie

 znaku z bufora klawiatury: ASCII  AL, scan 

code  AH

• AH=1 – sprawdzenie bufora (NIE „wyjmuje” znaku z bufora):

– Jeśli bufor jest pusty, to 1ZF, jeśli nie, to 0ZF i 

odczyt

 (bez 

kasowania w buforze) jak przy funkcji 0

•  AH=2 – odczyt bajtu stanu klawiszy specjalnych „shift”

– 7stan Insert (związany z klawiszem Ins)

– 6stan CapsLock

– 5stan NumLock

– 4stan ScrollLock

– 3Alt

– 2Ctrl

– 1lewy klawisz Shift

– 0prawy klawisz Shift

• AH = 10H, 11H, 12H to odpowiedniki 0, 1 i 2 dla „nowych” 

klawiatur

21

background image

Przerwania klawiatury 3

• Przerwanie 21H DOS, funkcja AH=10H 

„wejście buforowe z klawiatury”

– AH=10H
– DS:DX – adres pola buforowego
– Pierwszy znak pola (ds:dx) powinien 

zawierać długość pola

– Wynik: ds:[dx+1] – liczba znaków 

wprowadzonych (do Enter lub końca bufora)

– Od ds:(dx+2) wprowadzone znaki

22

background image

Jak startuje 80x86 (także 

Pantium, czy np. pierwszy z 

rdzeni Core 2 Duo)

 Przestrzenie adresowe dostrzegane przez programistę:

 Pamięci: 1M + 64K – 16 = 0FFFF0H+0FFFFH = 10FFEFH [B]

 I/O: 64KB

 Urządzeń pamięci głównej – w zależności od zestawu, np.: 

2GB

 Pamięci karty graficznej – w zależności od typu, np. 1GB

 Przestrzenie niedostępne bezpośrednio, np.:

 Pamięci konfiguracyjnej (CMOS)

 Dysków…

 Niedostrzegalne dla programisty - różnego rodzaju 

bufory:

 Caches procesora: I i II poziom

 Bufory dysków

23

background image

Pamięć w real address 

mode

24

background image

Jak startuje system? Zimny 

start

• POST: (Power‑On‑Self Test), w którym:

• inicjowanie wszystkich podzespołów płyty głównej i test poprawności ich pracy;

• ustawienie wektorów przerwań BIOS'u, pozostałe wektory ustawiane na "puste" 

podprogramy obsługi (IRET);

• Ustalenie i zapamiętanie konfiguracji;

• dołączenie oprogramowania z kart rozszerzeń: obszar od 0A0000H sprawdzany 

co 256 B, czy nie zawiera 55AAH ‑ jeśli tak, to CALL FAR PTR xxx:3 (gdzie xxx to 

sprawdzany adres); tam program inicjujący:

– inicjalizacja podzespołów karty, 

– sprawdzenie ich sprawności i 

– ustawienie odpowiednich wektorów przerwań;

• próba odczytania z mechanizmu dyskowego A: pierwszego sektora ze ścieżki 

zerowej (boot record), zawierającego prosty program ładujący; w razie 

powodzenia ładowania sterowanie jest przekazywane do tego programu;

• w razie niepowodzenia próby odczytu z dysku A: dokonywana jest identyczna 

próba odczytu i uruchomienia bootstrap’u z dysku C:

• w razie niepowodzenia odczytu z C: próba uruchomienia interpretera języka 

BASIC;

• w razie niepowodzenia wypisanie komunikatu (na monitorze) z żądaniem 

włożenia do mechanizmu A: dyskietki systemowej a następnie oczekiwanie na 

spełnienie tego żądania.

25

background image

Start DOSu

• Ładowanie pierwszego sektora i CALL 

do tego obszaru (MBR lub boot record).

• Poszukiwanie i ładowanie:

– IBMBIO.COM i IBMDOS.COM (IBM)
– IO.SYS i MSDOS.SYS (Microsoft)

• Dodatki według CONFIG.SYS
• Ładowanie COMMAND.COM
• Pierwszy batch: AUTOEXEC.BAT

26

background image

27

background image

Co jest w pamięci?

28

background image

System i programy w 

pamięci

29

background image

Moduł ładowalny .EXE (DOS)

EXE header
00   word  "MZ" - Link file .EXE signature (Mark Zbikowski?)
02   word  length of image mod 512

04   word  size of file in 512 byte pages

06   word  number of relocation items following header
08   word  size of header in 16 byte paragraphs, used to locate the 

beginning of the load module

0A   word  min # of paragraphs needed to run program
0C   word  max # of paragraphs the program would like
0E   word  offset in load module of stack segment (in paras)
10   word  initial SP value to be loaded
12   word  negative checksum of pgm used while by EXEC loads pgm
14   word  program entry point, (initial IP value)
16   word  offset in load module of the code segment (in paras)
18   word  offset in .EXE file of first relocation item
1A   word  overlay number (0 for root program)
RELOCATION TABLE
IMAGE

30

background image

Moduł ładowalny .EXE, cd.

• - relocation table and the program load module follow the header

• - relocation entries are 32 bit values representing the offset into 

the load module needing patched

• - once the relocatable item is found, the CS register is added to 

the value found at the calculated offset

•  
Registers at load time of the EXE file are as follows:

• AX: contains number of characters in command tail, or 0

• BX:CX

32 bit value indicating the load module memory size

• DX zero

• SS:SP

set to stack segment if defined else,  SS=CS and 

SP=0 or top of memory.

• DS set to segment address of EXE header

• ES set to segment address of EXE header

• CS:IP 

far address of program entry point, (label on 

"END„ statement of program)

31

background image

Moduł wykonywalny

• PSP – Program Segment Prefix
• Blok opisu otoczenia ENVIRONMENT

– por. komendę SET

• Image a postać .COM

• Organizacja wielu programów w pamięci
• Bloki allokacji pamięci
• UMB – Upper Memory Blocks

32

background image

Bloki allokacji pamięci

33

background image

Bloki po załadowaniu TD 

BAL

34

background image

Blok environment

35

background image

PSP i program

36

background image

Rozkazy, które trzeba znać

– ADD, SUB, CMP
– NOT, AND, OR, XOR, TEST
– INC, DEC
– PUSH, POP
– IN, OUT
– JMP, CALL, RET
– Jxx, JCXZ, LOOP
– INT, IRET

37


Document Outline