Tryb Real Address Mode (lub
Virtual 8086-Mode)
Cd. Historia: BIOS, DOS,
programy, struktura programów
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Koniec
Dalej nast
ę
puj
ą
materiały pomocnicze:
ilustracje do rozmieszczenia programów w
pami
ę
ci…
23
Pami
ęć
w real address mode
24
25
Co jest w pami
ę
ci?
26
System i programy w pami
ę
ci
27
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
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
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
Bloki allokacji pami
ę
ci
31
Bloki po załadowaniu TD BAL
32
Blok environment
33
PSP i program
34