03 Skoki,przerwania,struktury[pub]

background image

Tryb Real Address Mode

(lub Virtual 8086-Mode)

Cd. Historia: BIOS, DOS,

programy, struktura

programów

background image

Co dziś będzie…

• Powtórzenie wybranych rozkazów

przenoszących sterowanie

• Struktura programu – zagnieżdżane

podprogramy

• Wybrane przerwania BIOS i DOS
• Zimny start i ładowanie
• Struktura .EXE

2

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

3

background image

Rozkazy przenoszące

sterowanie

• Przeniesienie sterowania to zmiana

zawartości licznika rozkazów

Sekwencyjne przeniesienie sterowania – gdy
działa automat zwiększający LR o długość
rozkazu

Niesekwencyjne: brutalne ładowanie LR

• Niesekwencyjne przeniesienia:

Skoki efektywne

Sekwencje przerwań

Sekwencje powrotu (to rodzaj skoków) IRET

4

background image

Rodzaje skoków

• Skoki:

– Bezwarunkowe a warunkowe
– Bezpośrednie/pośrednie
– Bezwzględne/względne
– Efektywne/nieefektywne (to cecha

wykonania skoku, a nie cecha rozkazu skoku)

• Tylko w trybie adresów rzeczywistych

skoki

• Wewnątrzsegmentowe/międzysegmentowe

5

background image

Skoki bezwarunkowe

• Zawsze efektywne
• JMP adres – far lub near
• JMP SHORT adres – względny, krótki
• CALL adres – far lub near
• RET – far lub near (decyduje

dyrektywa PROC lub zapis RETF)

• IRET

6

background image

Rozkazy powodujące

przerwania

• Przerwania wewnętrzne (supervisor

call)

– INT n
– INT 3 (jednobajtowy)
– INTO (warunkowy)

• Przerwania „undefined opcode”
• Przerwania od „błędów”, np.

dzielenia przez 0

7

background image

Powtórka

• Odłożyć

coś

na stos:

– sp  sp-2
– [ss:sp] 

coś

• Zdjąć ze stosu

coś

:

coś

 [ss:sp]

– sp  sp+2

• „wykonanie” skoku:

– cs:ip  argument far
– Ip  argument near

8

background image

Powtórka cd.

• PUSH

coś

– Odłożyć na stos

coś

• POP

coś

– Zdjąć ze stosu

coś

• INT

N

– Żądanie przerwania wewnętrznego do

sterownika

• IRET

– Powrót z przerwania

9

background image

Sekwencja przerwania

N

• Po zakończeniu rozkazu (CS:IP wskazuje

na kolejny rozkaz) pamiętanie stanu
sterowania:

– Odłożyć na stos rejestr F (odpowiednik pushf)
– Odłożyć na stos rejestr CS (push cs)
– Odłożyć na stos rejestr IP (push ip)

• Wymuszenie nowego stanu sterowania:

– IP  [0:4*

N

]

– CS  [0:4*

N

+2]

10

background image

Sekwencja powrotu IRET

• Odtworzenie stanu sterowania ze

stosu

– IP  [ss:sp]
– SP  SP + 2
– CS  [ss:sp]
– SP  SP + 2
– F  [ss:sp]
– SP  SP + 2

11

background image

Podprogramy

• W języku C:

– Int funkcja (int par1, int par2, int par3);

• W asemblerze:

– PUSH par3
– PUSH par2
– PUSH par1
– CALL funkcja
– ADD SP, 6 ; gdy podprogram w konwencji

C)

12

background image

Podprogram

• Początek

– PUSH BP
– MOV BP, SP
– SUB SP, dlugosc_danych_lokalnych

• Wywoływanie parametrów i zmiennych

– MOV AX,[BP+4] ; parametr 1
– MOV DX, [BP-2] ; zmienna 1

• Konwencja: C a Pascal

– RET lub RET 6

13

background image

Programy rezydentne a

shelle

• SEGMENT

– Deklaracje danych podprogramu obsługi

• OBSLUGA

– podprogram obsługi przerwania

• INIT

– część inicjująca programu

• ENDS
• Po zainicjowaniu, w pamięci tylko

OBSLUGA

14

background image

Jak przejąć przerwanie

STARY

LABEL DWORD

CZOFFSET DW ?

CZSEG

DW ?

----------------------------------------------------------------------------------------

• ; pobranie "przechwytywanego" wektora przerwania

MOV AL,NRWKT ; symbol NRWKT to numer wektora

MOV AH,35H

; numer funkcji: pobranie wektora nr AL do ES:BX

INT 21H

; przerwanie uslugowe DOS'u

• ; zapamietanie starej wartosci wektora

MOV CZOFFSET,BX

; czesc OFFSET

MOV CZSEG,ES; czesc SEG

• ; teraz ustawienie nowej wartosci wektora - w DS jest juz to samo co w CS

MOV DX,OFFSET OBSLUGA

; czesc OFFSET adresu podprogramu

obslugi

MOV AL,NRWKT ; numer wektora

MOV AH,25H

; funkcja: ustawienie wektora nr AL z DS:DX

INT 21H

; przerwanie uslugowe DOS'u

15

background image

OBSLUGA (np. przerwanie

16H)

• OBSLUGA

PROC FAR

TEST AH,0EFH

; sprawdzenie czy funkcja odczytu (0 lub 10H)

JZ OBSL1

JMP CS:STARY

; STARY to adres podwojnego slowa: skok

miedzysegentowy

;

• OBSL1

LABEL NEAR

PUSHF

CALL CS:STARY ; symulacja sekwencji przerwania (jak po rozkazie

INT):

• ; tu mogą wystąpić różne działania modyfikujące dane wyjściowe z

przerwania

• OK_JUZ

LABEL NEAR

• ; koniec dzialan modyfikujacych

IRET

• ; to koniec podprogramu obslugi (czesci rezydentnej programu)

• OBSLUGA

ENDP

16

background image

Zakończ i pozostań

• ; obliczenie nowej długości programu w DX

MOV DX,OFFSET INIT

; adres poczatkowy fragmentu "do

odrzucenia"

ADD DX,100H ; zwiekszony o dlugosc PSP daje dlugosc pozos-

; tajacego w pamieci fragmentu (w bajtach)

ADD DX,0FH

; teraz przygotowanie do zaokraglenia do

paragrafow

MOV CL,4

; ustawienie licznika przesuniec

SHR DX,CL

; wlasciwe zaokraglenie: dzielenie przez 16

(przesunie-

; cie logiczne o 4 pozycje w prawo

• ; zakonczenie z pozostaniem w pamieci

MOV AL,0

; kod powrotu, rowny 0

MOV AH,31H

; funkcja: koncz i pozostaw

; w pamieci DX nietykalnych paragrafow

INT 21H

; przerwanie uslugowe DOS'u

• ; i to juz koniec programu

17

background image

Przerwania – przegląd

Mikroprocesorowe

o numerach 0 i 1; do przerwań

mikroprocesorowych zaliczyć można też przerwania o

numerach 3 i 4. Przez przerwania mikroprocesorowe

rozumie się takie przerwania, których cechy

szczególne zależą głównie od mikroprocesora.

• 0 – dzielenie przez 0

– MOV BX,0
– DIV BX

• 1 – single step (flaga TF)

• 2 – przerwanie niemaskowalne (NMI) [zewnętrzne?]

• 3 – breakpoint (INT 3)
• 4 – przerwanie przy nadmiarze (INTO)

18

background image

Przerwania

Sprzętowe

(zewnętrzne) o numerach 2, 8, 9,

11‑15 (0BH‑0FH). Przerwania sprzętowe wynikają

z organizacji IBM PC i nie można ich zmienić.

Przerwania te obsługiwane są przez BIOS lub

podprogramy zawarte na kartach rozszerzeń.

BIOS'u

o numerach 5, 16‑28 (10H‑1AH) i 72

(48H), oprócz 24 (18H).

• Tzw.

adresowe BIOS'u

o numerach 27, 28 i 29

(1BH, 1DH i 1EH). W rzeczywistości są to adresy

danych (FAR) specjalnych BIOS'u ‑ pewnych tablic

pomocniczych. Nie są to adresy

podprogramów obsługi.

19

background image

Przerwania główne DOSu

Główne DOS'u

o numerach 32, 33, 37‑39

(20H, 21H, 25H‑27H). Szczególnie ważne są

przerwania:

33 (21H): tzw. przerwanie osłonowe lub

usługowe ‑ stanowi żądanie wykonania

przez DOS jednej z funkcji usługowych

o numerze zadanym w rejestrze AH;

– 32 (20H): żądanie normalnego zakończenia

pracy programu użytkowego;

– 39 (27H): żądanie zakończenia pracy

programu użytkowego z pozostaniem w

miejscu (z przesunięciem początku TPA wg

zawartości rejestru DX).

20

background image

Przerwania (?) adresowe

DOSu

• Tzw.

adresowe DOS'u

o numerach 34, 35 i 36 (22H, 23H i 24H). Można

powiedzieć, że o ile pozostałe przerwania programowe wywoływane są przez

program użytkownika, a obsługiwane przez oprogramowanie systemowe (BIOS

lub DOS), to dla omawianych przerwań rzecz się ma dokładnie odwrotnie:

przerwania te wywoływana są przez DOS, a mogą być obsługiwane przez

program użytkownika

, jeśli ustawi on odpowiednio wektory przerwań.

Przerwania są wywoływane:

– 35 (23H): po naciśnięciu kombinacji klawiszy Ctrl‑Break (^C); jeśli

użytkownik ustawi ten wektor, to zostanie on odtworzony po zakończeniu

pracy programu;

– 36 (24H): po wystąpieniu błędu krytycznego ‑ tzn. takiego, po którym

normalne kontynuowanie programu nie jest możliwe; jeśli użytkownik ustawi

ten wektor, to zostanie on odtworzony po zakończeniu pracy programu;

– 34 (22H): jeśli w programie wystąpi przerwanie 32 (20H ‑ normalne

zakończenie programu), lub 39 (27H ‑ zakończenie z pozostaniem w

miejscu) sterowanie zostanie przekazane pod adres międzysegmentowy

określony tym wektorem, lecz nie będzie to wejście do procedury obsługi

przerwania tylko normalny skok; omawiane "przerwanie" adresowe

wykorzystywane jest przez tzw. nakładki na DOS (np. Norton Commander),

tzn. programy powołujące do pracy inne programy pod swoją kontrolą; jeśli

użytkownik zmieni ten wektor, to musi go odtworzyć przed

zakończeniem pracy programu.

21

background image

Przerwania inne

• Zarezerwowane (na potrzeby wewnętrzne

DOS'u) o numerach 40‑95 (28H‑5FH).

• Użytkownika (do dowolnego wykorzystania

w programach użytkowych) o numerach

96‑103 (60H‑67H).

• Niewykorzystywane o numerach 104‑127

(68H‑7FH) i 241‑255 (0F1H‑0FFH).

• Interpretera języka BASIC o numerach 24 i

128‑240 (18H i 80H‑0F0H).

22

background image

Koniec

Dalej następują materiały pomocnicze:

ilustracje do rozmieszczenia
programów w pamięci…

23

background image

Pamięć w real address

mode

24

background image

25

background image

Co jest w pamięci?

26

background image

System i programy w

pamięci

27

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

28

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)

29

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

30

background image

Bloki allokacji pamięci

31

background image

Bloki po załadowaniu TD

BAL

32

background image

Blok environment

33

background image

PSP i program

34


Document Outline


Wyszukiwarka

Podobne podstrony:
03 Skoki,przerwania,struktury[pub]
03-E-czas-przerw
03 E czas przerwid 4598
Wzor-22 Skorowidz dzialek 31 03 03, geodezja, rok III, Projektowanie Struktur Terenowych, Sprawko nr
Wzor-08 Protokol badania KW 31 03 03-SAGOWSKI, geodezja, rok III, Projektowanie Struktur Terenowych
7 Struktura osadu (16 03 2011)
03 Interakcje stosunki spoleczne organizacja struktura spoleczna, studia, wprowadzenie do socjologii
03 struktury algebraiczne
Wzor-01 Wykaz podmiotow (spis alf.) 31 03 03, geodezja, rok III, Projektowanie Struktur Terenowych,
03 www STRUKTURY organizacyjne
Finanse Publiczne barabara szlabowska, Pojęcie, zakres i struktura prawa finansów publicznych - pyta
03 Struktury maszyn z magnesami trwałymi
Wzor-08 Protokol badania KW 31 03 03-wspolwlasnosc, geodezja, rok III, Projektowanie Struktur Teren
Wzor-08 Protokol badania KW 31 03 03-BONS, geodezja, rok III, Projektowanie Struktur Terenowych, Sp
Wzor-08 Protokol badania KW 31 03 03-GMINA, geodezja, rok III, Projektowanie Struktur Terenowych, S
Wzor-02 Wykaz osob jedn.org.i org.(s.alf.) 31 03 03, geodezja, rok III, Projektowanie Struktur Teren

więcej podobnych podstron