Sunteți pe pagina 1din 11

Arhitectura PC

Familia INTEL 8086


8086
Magistrala adrese:
magistrala adrese IO: 16b (cei mai nesemnificativi)
mag adrese: 20b
Registri:
y generali: de date 16b:AX,BX,CX,DX; 8b: AL,AH, etc
de pointer i index: SP, BP, SI, DI
y segment: CS, DS, ES, SS
y pointer de instruciuni: IP (adresa instr. CS:IP)
y indicatori de control i stare: 6 indicatori stare (CF, AF, ZF, SF, OF, PF)
i 3 indicatori de control:
DF=1 la instr pe iruri se folosete decrementarea (de la adrese
mari la adrese mici, de la dreapta la stnga)
TF=1 procesorul execut o instruciune de depanare dup fiecare
instruciune
IF=1 sunt recunoscute cereri de ntrerupere mascabile
Gestionare memorie:
- pn la 1MB
- paginat pe segmente continue de 64kB
Mod adresare
- se folosesc regitri pe 16b
adr_segment: adr_deplasament

adr_segment 2 4 + adr_deplasament

mai multe variante pentru a adresa aceeai locaie


Ex: (H )
F000:FFF0 FFFF:0
FF00:FF0
(F0000+FFF0=FFFF0+0=FF000+FF0)

OBS: 1 paragraf = 16B


Sistem ntreruperi:
y Externe: conex RESET, NMI, INTR
RESET: CSFFFF; IP,DS,ES, SS0
NMI: recunoscut IF
INTR: recunoscute dac IF=1
y Interne (software) INT x

o Exceptii - primesc controlul n anumite situatii, automat


ca rspuns al procesorului la o comportare anormal fara
generare ntrerupere de ctre utilizator
INT 0 mprire la 0 (OF=1)
INT 1 execuie pas cu pas (TF=1)
INT 3 breakpoint poate fi i trap
INT 4 apelat de INT 0
Dac OF=1 se execut INT 4
Dac OF=0, NOP
o Capcana (<trap>) cu rutine specializate, ce pot fi rescrise
de utilizator
Tabela vectori ntreruperi: primul kB de memorie = 256 intrri
Intrare / vector interupere = adr_segment (2B) i adr_depl (2B)
pentru rutina de tratare
Executie instructiune INT x
- Salveaz reg indicatori in stiv
- TF0, IF0
- Salveaz CS n stiv, salveaz IP n stiv
- nscrie CS i IP cu vectorul de ntrerupere de la adresa fizic 4x
Urmeaz salt la rutina de tratare
Rutina se termin cu IRET care asigur refacerea parial a contextului
i revenire corect n program:
Reface reg indicatori salvat n stiv
Reface CS i IP cu valorile salvate n stiv
indicatori
CS
IP
1kB
CS

stiva

Adr_segment (2B)
Adr_deplas (2B)
4x
0

OBS:

IP

Rutina de tratare
intrerupe re x
-----------IRET

Diferit de CALL +RET IP sau far CALL +RET CS i IP

Intreruperi hard: salvare toti registrii refacere completa


context
Partajare vectori intrerupere
!!! Unii vectori de intreruperi nu sunt acesibili programatorului exceptii
-

salveaz vector ntrerupere vechi


scrie noul vector de ntrerupere
daca este cazul, asigura executie servicii vechi
In totalitate: prin apel veche rutina
la sfarsit aplicaie: refacere vector ntrerupere vechi!!!!!
Modifica vector intrerupere

1kB

Rutina noua de tratare


intrerupe re x
Asigurare servicii vechi

Adr_segment (2B)
Adr_deplas (2B)
4x
0

Rutina veche de tratare


intrerupe re x

Probleme reentran!!!
- marcare SC i forare IF=0 pe durata SC!!

80286
mod real 8086 performant programe 8086 acceptate
mod protejat:
(revenire la mod real prin repornire calculator)
o 24 linii adresa, memorie fizica 16MB, memorie virtuala
1GB
o multitasking
o + 2 indicatori

Nested Flag: NF=1 taskul este imbricat

IOPL arat dac unele operaii IO sunt


permise
o mai multe ntreruperi rezervate
o instruciuni suplimentare: PUSHA, POPA pe reg generali

80386
o date/adres 32b
o memorie fizic 4GB, virtual 64TB
o + registri pe 32 B: extini (EAX, EBX etc)
control i stare,
+ 2 reg segment FS GS
o indicatori: IOPL pe 2b prioriti pentru oper IO
dac nivel priorit per curenta <=IOPL operaia
IO validata
altfel execut o ntrerupere de protecie
+ RF : RF=0 sunt permise ntreruperi de depanare
+ VM: VM=1 mod virtual 8086; VM=0 mod protejat

80486
o cu memorie cash
o cu interfete de magistrale mai rapide

ntreruperi la IBM PC
Software:
INT I mai prioritar ca INT J dac I < J
Exceptii:
INT 0 S/BIOS mprire cu depire
INT 1 S/BIOS trasare pas cu pas
INT 3 S/BIOS - breakpoint
INT 4 S/BIOS - depire OF=1
Hardware:
INT 2 NMI BIOS eroare paritate de memorie sau pentru coprocesor
ACCES NEPERMIS UTILIZATORILOR!!
INT 08H IRQ0_8259_I BIOS ceas de timp real (implicit nemascat
de 8259)
INT 09H IRQ1_8259_I BIOS tastatura (implicit nemascat de 8259)
INT 0AH IRQ2_8259_I - rezervata
INT 0BH IRQ3_8259_I BIOS COM (implicit mascat de 8259)
INT 0CH IRQ4_8259_I BIOS COM (implicit mascat de 8259)
INT 0DH IRQ5_8259_I BIOS LPT, disc
INT 0EH IRQ6_8259_I BIOS disc flexibil

INT 0FH IRQ7_8259_I BIOS LPT


INT 70H IRQ0_8259_II BIOS ceas CMOS
INT 71H IRQ1_8259_II BIOS redirectata spre INT0AH /cascadare
INT 72H IRQ2_8259_II BIOS rezervata
INT 73H IRQ3_8259_II BIOS rezervata
INT 74H IRQ4_8259_II BIOS rezervata
INT 75H IRQ5_8259_II BIOS rezervata
INT 76H IRQ6_8259_II BIOS disc dur
INT 77H IRQ7_8259_II BIOS rezervata
8259_I i 8259_II iniializate de BIOS. Se pot schimba prioritile prin
programare
-> nerecomandat.
OBS:
y In rutina de tratare a unei intreruperi hard se poate genera o intrerupere
soft
(INT 08H INT 1CH)
y SO pot desconsidera sugestiile INTEL
INT 05H INTEL depire limite super/infer intr-un bloc de
date Bound Range Exceed
INT 05H BIOS realizeaz print screen
De aceea cnd depirea este atins print screen

BIOS
= ansamblu de rutine de tratare a unor ntreruperi ce asigur servicii de
baz (pentru un hardware funcional)
= interfat SO hardware

Zona de lucru rezervat:


ncepe de la adresa 0000:0400 H
- rezervarea se face la iniializarea calculatorului
- structura de date este pentru configuraia maxim permisa
- unele date sunt iniializate la pornirea calc
Ex:
0000:0400 H, 2B adresa COM1
0000:0408 H, 2B adresa LPT1
0000:041C H, 2B pointer pozitie curenta in coada tampon a tastaturii
0000:0440 H, 1B contor ce indic ce interval timp mai trebuie meninut
pornit motorul unitii floppy (motor oprit cand contorul este 0)
0000:04F0 H, 16B zon de comunicaie ntre aplicaii

ntreruperi BIOS
5, 8, 9, 10-1C, 4A, 70
1D, 1E, 1F, 41, 46 vectori de ntrerupere ce pointeaza spre tabele BIOS
INT 5H
- tiparete continutul ecranului la imprimant dac se apas Shift +
PrintScreen
INT 08H ceas pentru aplicatii de timp real /implicit nemascata de 8259
IRQ0 _8259I
y Cererea de ntrerupere apare de la canal 0 / 8253
- implicit la fiecare 55msec (de 18.2 ori pe sec)
y Pe programarea implicit 8259 ntreruperea de nivel prioritar
y Rutina de tratare asigur:
Incrementeaz contorul de la adresa 0000:046C H;
dac valoarea acestuia indic scurgerea a 24 ore, atunci
acesta devine 0 i se poziioneaza indicatorul de la adresa
0000:0470
citeste contorul de la adresa 0000:0440
daca valoarea este 0 oprete motorul la floppy i
poziioneaz indicatorul de la 000:043F
altfel decrementeaza contorul
genereaza intrerupere utilizator INT 1CH

rutina de tratare este implicit IRET


achit ntrerurperea la 8259
INT 09H tastatura /implicit nemascata de 8259 IRQ1 _8259I
y Cererea de ntrerupere apare la fiecare apasare i eliberare de tast
y Pe programarea implicit 8259 ntreruperea de nivel prioritar maxim
dup INT08H
y Rutina de tratare asigur:
Citete cod scan al tastei (din port de adresa 60H);
Determina codul ASCII
Salveaz codul scan i ASCII ntr-o coad circular a
tastaturii
Coda tampon are 32 octei (spaiu pentru 16 taste) ncepnd cu
0000:041E H
Pointerul la poziia curent este la adresa 0000:041C H
La salvare:
OH
OL

cod SCAN cod ASCII


- pentru taste funcionale:
OH
OL
cod ASCII extins 0
Dac au fost apasate tastele ALT, sau CTRL sau Shift sau
INS sau CAPS se actualizeaza octetii de stare de la adresele
0000:0417 si 0000:0418
Aceti octei pot fi citii i cu INT 16H
Dac s-a apsat CTR+ALT+DEL se nscrie 1234H la adresa
0000:0472 i se pred controlul rutinei de iniializare

n toate situaiile se reiniializeaz controlerul de tastatura pentru a se putea


citi tasta urmtoare i se achita intreruperea la 8259 pentru o funcionare
corecta!!!!!.
Porturile 60H si 61H sunt folosite pentru comunicarea cu tastatura
- citire 60H pentru aflare cod scan tasta
- port 61H
D7
D6
D5 D4 D3 D2 D1 D0
= 0 enable
Pentru alte dispozitive
= 1 disable
periferice
Secvena de reiniializare controller tastatura:
- obligatorie
Citete octet_1 de la port 61H

Poziioneaza in octetul citit bitul D7 pe 1 i scrie rezultatul n


port 61H
Scrie octet_1 (nemodificat) la portul 61H
Sugestie rutina proprie de testare daca o tasta a fost apasata:
Citeste port 60H
Verifica daca este codul scan al tastei cautate
Daca da executa serviciile suplimentare dorite
Asigura servicii vechi ale rutinei (apel veche rutina)
- servicii obligatorii: reinitializare controler tastatura i
achitare intrerupere la 8259
INT 10 H servicii video
INT 11H determinarea configuraiei calculatorului
Rutina de tratare asigur nscrierea lui AX cu informaiile luate de la
0000:0410H
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1
D0
Nr
Nr porturi
Nr unit
Mod
=1 : Exista
imprimante
seriale
floppy
video
coprocesor
initial
INT 12H determin dimensiunea memoriei pentru DOS i aplicaii
Valoarea este tiut de la initializare / testul de memorie
Rutina de tratare asigur nscrierea lui AX cu informaiile luate de la
0000:0413H
INT 13H servicii disc pachet de funcii ce permit acces la nivel de
sector
nainte de generarea ntreruperii:
se nscrie AH cu numrul funciei
se nscrie n DL numr unitate
funcia 00H: poziionare la 0 a controlerului de disc + calibrare
funcia 01H: citire stare dup ultima operaie efectuat
(n AL se returneaz un cod de eroare)
funcia 02H: citire sectoare
funcia 03H: scriere sectoare
funcia 04H: verificare sectoare (verificare adresa i sum CRC)
funcia 05H: formatare pist
funcia 06H: formatare pist + poziionare indicator sectoare defecte
funcia 08H: citire parametri unitate (nr. capete, piste, sect/pista)
funcia 0AH: citire sectoare lungi (informaii +cod corecie erori de 4B)

funcia 0BH: scriere sectoare lungi


funcia 0CH: cutare pist / numai la disc dur
funcia 16H: schimbare stare disc - a fost schimbat floppy de la ultimul
acces la unitate / numai la floppy
Tabele parametri: disc floppy 0000:0078H; disc dur 0000:0104H
INT 14H servicii porturi seriale
desi n zona BIOS este spaiu rezervat pentru 4 porturi COM, numai
2 sunt iniializate implicit la pornirea calc
funcia 00H: iniializare
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 sau 1 (nr port COM)
AL = parametri initializare
returneaza: AX- stare
funcia 01H: emitere caracter
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 sau 1 (nr port COM)
AL = caracter
returneaza: AX=stare
funcia 02H: recepie caracter
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 sau 1 (nr port COM)
returneaza: AL = caracter, AH=stare
funcia 03H: citire stare
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 sau 1 (nr port COM)
returneaza: AX=stare
INT 15H diverse (ex: joystick, determinare disponibil memorie extended)
INT16H interfat tastatura
- folosete informaiile nscrise de INT09H n coada tampon tastatura
sau la octeii de stare tastatura
nainte de generarea ntreruperii: se nscrie AH cu numrul funciei
funcia 00H: ateapt cod tasta apsat i citete codul
funcia 10H: idem pentru taste extinse
funcia 01H: verific dac este un cod disponibil de tasta apasat
returneaz: ZF=0 cod disponibil; n AL cod ASCII, n AH cod scan

ZF=1 cod nedisponibil


funcia 02H: citire stare
AL = shift status bits
0 = right shift key depressed
1 = left shift key depressed
2 = CTRL depressed
3 = ALT depressed
4 = SCROLL LOCK active
5 = NUM LOCK active
6 = CAPS LOCK active
7 = INSERT state active

INT 17H servicii port paralel


funcia 00H: tiprire caracter
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 , 1, 2 (nr port LPT)
AL = caracter de tiprit
returneaza: AH=stare port
funcia 01H: iniializare port
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 , 1, 2 (nr port LPT)
returneaza: AH- stare port
funcia 02H: citire stare port
nainte de generarea ntreruperii:
AH = numrul funciei
DX = 0 , 1, 2 (nr port LPT)
returneaza: AH- stare port
INT 18H, 19H interpretor ROM BASIC pentru ncrcare SO
INT 1AH

- acces la ceas CMOS: actualizat fr intervenia CPU


- acces la contor zona BIOS (tick count): actualizat de 18.2 ori
pe secunda (valori: o ora:65543; 1 zi:1573040) de INT08H

- citire/scriere data (funcii 4/5) sau ora CMOS (funcii 2/3)


- inscriere/anulare alarm:
funcia 6: setare alarma la ora precizat se va executa rutina
utilizator INT 4AH atentie: returneaza cod de eroare daca
ceasul nu este functional!! sau alarma era deja setata
functia 7: reset alarma
pentru modificare ora alarma: reset alarma veche, apoi setare
ora noua
- citeste/scrie contor tick (functii 0/1)
INT 1BH tratare Ctrl +BREAK

- se execut daca se apas CTRL+BREAK


- implicit: IRET; preluata de DOS
INT 1CH rutina ceas utilizator
- generat de INT08H
- implicit: IRET
INT 4AH alarma utilizator
- generat de INT 70H
- implicit: IRET
INT 70H ceas CMOS pe IRQ0-8259II /implicit mascata la 8259 si
CMOS
- cererea de ntrerupere (dupa activare generare periodica in CMOS)
apare de 1024 ori pe s
- dac ora_CMOS = ora_alarma, se genereaza INT 4AH

Tabele de parametri
INT 1DH tabel parametri video
INT 1EH tabel parametri floppy (10B) folosita de INT 13H
Ex: timp salt la alta pista, timp poziionare cap, dimensiune sector, numar
sectoare etc
INT 41H Tabel parametri disc dur (16B) folosita de INT 13H
INT 46H Tabel parametri al doilea disc dur (16B) folosita de INT 13H
INT 1FH Tabel cararactere ASCII set extins
- folosita n mod grafic, coduri 128 255 (pentru coduri 0-127 in
ROM la adresa F000: FA6E H)
- la initializare pointerul este F000:0000, dar caracterele nedipsonibile; pot fi inscrise de SO.
1 caracter = 8B
1 1 1 1 1 1 1 1 margine inferioara pe ecran
1 1 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1
1 1 1 1
1 1
1
margine superioara

S-ar putea să vă placă și