SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
Història dels microprocessadors Intel 8088/8086
Des de l'aparició dels primers microprocessadors en els inicis de la dècada dels setanta, totes
les àrees científiques i tecnològiques han estat experimentat el seu més accelerat
desenvolupament en la història de la humanitat. El baix cost, confiabilitat i reduït espai dels
sistemes digitals basats en microprocessadors els han possibilitat introduïr-los en aplicacions
que fins a abans d'aquesta dècada es trobaven restringides a sistemes d'alt cost i considerats
d'alta tecnologia. Les indústries de la telecomunicació, automoció, aeronàutica, de
transformació, mèdica i de consum casolà, així com l'educació, banca, i empreses de serveis,
són només algunes de les àrees en les quals l'impacte de l'electrònica digital és més evident, ja
que ho palpem en el nostre actuar quotidià.
CISC
És un abreujament de "Complex Instrution set computer". Es refereix als microprocessadors
tradicionals que operen amb grups grans d'instruccions de processador (llenguatge màquina).
Els microprocessadors INTEL 80xxx estan dins d'aquesta categoria (inclòs el PENTIUM). Els
processadors CISC tenen un Set d'instruccions complexes per naturalesa que requereixen varis
de molts cicles per completar-se.
RISC
És un abreujament de "Reduced Instruction Set Code", a diferència dels CISC, els processadors
RISC tenen un grup o set d'instruccions simples requerint un o pocs cicles d'execució. Aquestes
instruccions poden ser utilitzades més eficientment que la dels processadors CISC amb el
disseny de programari apropiat, resultant en operacions més ràpides.
ELS MICROPROCESSADORS 8086 I 8088
Història del 8086/8088:
Al juny de 1978 Intel va llançar al mercat el primer microprocessador de 16 bits: el 8086. Al
juny de 1979 va aparèixer el 8088 (internament igual que el 8086 però amb bus de dades de 8
bits) i al 1980 els coprocessadors 8087 (matemàtic) i 8089 (d'entrada i sortida). El primer
fabricant que va desenvolupar programari i maquinari per a aquests xips va ser la pròpia Intel.
Reconeixent la necessitat de donar suport a aquests circuits integrats, l'empresa va invertir
gran quantitat de diners en un gran i modern edifici en Santa Clara, Califòrnia, dedicat al
disseny, fabricació i venda dels seus sistemes de desenvolupament que, com es va explicar
anteriorment, són computadores autosuficients amb el maquinari i programari necessari per
desenvolupar programari de microprocessadors.
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
Els sistemes de desenvolupament són factors clau per assegurar les vendes d'una empresa
fabricadores de xips. La immensa majoria de vendes són a altres empreses, les quals usen
aquests xips en aparells electrònics, dissenyats, fabricats i comercialitzats per elles mateixes. A
aquestes empreses se les anomena "fabricants d'equip original", o en anglès, OEM (Original
Equipment Manufacturer).
El disminuir el temps de desenvolupament de maquinari i programari per les OEM és essencial,
ja que el mercat d'aquests productes és molt competitiu. Necessiten suport doncs els mesos
que els pot portar el desenvolupament de les eines apropiades els pot significar pèrdues per
milions de dòlars. A més volen ser els primers fabricants al mercat, amb la qual cosa poden
assegurar-se les vendes en dues àrees importants: a curt termini, ja que al principi la demanda
és molt major que l'oferta, i a llarg termini, ja que el primer producte marca sovint els
estàndards.
D'aquesta manera l'empresa Intel havia desenvolupat una sèrie completa de programari que
s'executava en una microcomputadora basada en el 8085 anomenada "Intellec Microcomputer
Development System".
Els programes incloïen assembladors creuats (aquests són programes que s'executen en un
microprocessador i generen codi de màquina que s'executa en un altre), compiladors de PL/M,
Fortran i Pascal i diversos programes d'ajuda.
A més a més, hi havia un programa traductor anomenat AMB V86 que convertia codi font
8080/8085 a codi font 8086/8088. Si s'observen de aprop tots dos conjunts d'instruccions,
queda clar que la transformació és senzilla si els registres es tradueixen així: A -> AL, B -> CH, C
-> CL, D -> DH, I -> DL, H -> BH i L -> BL. Pot semblar complicat traduir LDAX B (per exemple) ja
que el 8088 no pot utilitzar el registre CX per a adreçament indirecte, no obstant això, es pot
fer amb la següent seqüència: MOV SI, CX; MOV AL,[SI]. Això aprofita el fet que no s'utilitza el
registre SI. Per descomptat el programa resultant és més llarg (en quantitat de bytes)
i de vegades més lent de córrer que en el seu antecessor 8085. Aquest programa de conversió
només servia per no haver de tornar a escriure els programes en una primera etapa. Després
hauria de reescriure's el codi font en assembler per poder obtenir els avantatges de velocitat
ofertes pel 8088.
Després havia de córrer el programa en la iSBC 86/12 Single Board Computer basat en el 8086.
A causa de l'enfarfec que resultava tenir dues plaquetes diferents, l'empresa Godbout
Electronics (també de Califòrnia) va desenvolupar una placa on estaven el 8085 i el 8088, on
s'utilitzava un assemblador creuat proveït per la companyia Microsoft. Sota control de
programari, podien commutar-se els microprocessadors. El sistema operatiu utilitzat era el
CP/M (de Digital Research).
El desenvolupament més notable per a la família 8086/8088 va ser l'elecció de la CPU 8088 per
part d'IBM (International Business Machines) quan en 1981 va entrar en el camp de les
computadores personals.
Aquesta computadora es va desenvolupar sota un projecte amb el nom "Acorn" (Projecte
"Gla") però es va vendre sota un nom menys imaginatiu, però més correcte: "Computadora
Personal IBM", amb un preu inicial entre 1260 dòlars i 3830 dòlars segons la configuració (amb
48KB de memòria RAM i una unitat de discos flexibles amb capacitat de 160KB costava 2235
dòlars).
Aquesta computadora va entrar en competència directa amb les ofertes per Apple (basat en el
6502) i per Radi Shack (basat en el Z-80).
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
ARQUITECTURA DELS PROCESSADORS
8088 I 8086:
El 8086 és un microprocessador de 16 bits, tant pel que fa a la seva estructura com en les seves
connexions externes, mentre que el 8088 és un processador de 8 bits que internament és
gairebé idèntic al 8086. L'única diferència entre tots dos és la grandària del bus de dades
extern. Intel tracta aquesta igualtat interna i desigualtat externa dividint cada processador
8086 i 8088 en dos sub-processadors. O sigui, cadascun consta d'una unitat d'execució (EU:
Execution Unit) i una unitat interfície del bus (BIU: Bus Interface Unit). La unitat d'execució és
l'encarregada de realitzar totes les operacions mentre que la unitat d'interfície del bus és
l'encarregada d'accedir a dades i instruccions del món exterior. Les unitats d'execució són
idèntiques en tots dos microprocessadors, però les unitats d'interfície del bus són diferents en
diverses qüestions, com es desprèn del següent diagrama en blocs:
L'avantatge d'aquesta divisió va ser l'estalvi d'esforç necessari per produir el 8088. Només una
meitat del 8086 (el BIU) va haver de redissenyar-se per produir el 8088.
L'explicació del diagrama en blocs és la següent:
Registres d'ús general del 8086/8088:
Tenen 16 bits cadascun i són vuit:
1) AX = Registre acumulador, dividit en AH i Al (8 bits cadascun).
2) BX = Registre base, dividit en BH i BL.
3) CX = Registre comptador, dividit en CH i CL.
4) DX = Registre de dades, dividit en DH i DL.
5) SP = Capdavanter de pila (no es pot subdividir).
6) BP = Capdavanter base (no es pot subdividir).
7) SI = Capdavanter índex (no es pot subdividir).
8) DIO = Capdavantera destinació (no es pot subdividir).
Qualsevol d'aquests registres pot utilitzar-se com a font o destinació en operacions
aritmètiques i lògiques, la qual cosa no es pot fer amb cap dels sis registres que es veuran més
endavant.
A més a més de l'anterior, cada registre té usos especials:
AX: Usant-ho es produeix (en general) una instrucció que ocupa un byte menys que si
s'utilitzessin altres registres d'ús general. La seva part més baixa, AL, també té aquesta
propietat. L'últim registre esmentat és l'equivalent a l'acumulador dels processadors anteriors
(8080 i 8085). A més hi ha instruccions com DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF;
CBW; IN i OUT que treballen amb AX o amb un dels seus dos bytes (AH o Al).
També s'utilitza aquest registre (juntament amb DX de vegades) en multiplicacions i divisions.
BX: És el registre base de propòsit similar (s'usa per a adreçament indirecte) i és una versió
més potent del parell de registres HL dels processadors anteriors.
CX: S'utilitza com a comptador en bucles (instrucció LOOP), en operacions amb cadenes (usant
el prefix REP) i en desplaçaments i rotacions (usant el registre CL en els dos últims casos).
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
DX: S'utilitza juntament amb el registre AX en multiplicacions i divisions, en la instrucció CWD i
en IN i OUT per a adreçament indirecte de ports (el registre DX indica el nombre de ports
d'entrada/sortida).
SP: Encara que és un registre d'ús general, ha d'utilitzar-se només com a punter de pila, el qual
serveix per emmagatzemar les adreces de tornada de subrutines i les dades temporals
(mitjançant les instruccions PUSH i POP). En introduir (push) un valor en la pila a aquest
registre se li resta dos, mentre que en extreure (pop) un valor de la pila aquest a registre se li
sumeixi dos.
BP: Generalment s'utilitza per realitzar adreçament indirecte dins de la pila.
SI: Serveix com a capdavanter font per a les operacions amb cadenes. També serveix per
realitzar adreçament indirecte.
DIO: Serveix com a capdavantera destinació per a les operacions amb cadenes. També serveix
per realitzar adreçament indirecte.
UNITAT ARITMÈTICA I LÒGICA
És l'encarregada de realitzar les operacions aritmètiques (suma, suma amb "arrossegament",
resta, resta amb "préstec" i comparacions) i lògiques (AND, OR, XOR i TEST). Les operacions
poden ser de 16 bits o de 8 bits.
Indicadors (flags): Hi ha nou indicadors d'un bit en aquest registre de 16 bits. Els quatre bits
més significatius estan indefinits, mentre que hi ha tres bits amb valors determinats: els bits 5 i
3 sempre valen zero i el bit 1 sempre val un (això també ocorria en els processadors anteriors).
Registre d'indicadors (16 bits)Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Flag -- -- -- -- OF DF IF TF
SF ZF 0 AF 0 PF 1 Cf
CF (Carry Flag, bit 0): Si val 1, indica que va haver-hi "arrossegament" (en cas de summa) cap a,
o "préstec" (en cas de resta) des del bit d'ordre més significatiu del resultat. Aquest indicador
és usat per instruccions que sumen o resten nombres que ocupen diversos bytes. Les
instruccions de rotació poden aïllar un bit de la memòria o d'un registre posant-ho en el Cf.
PF (Parity Flag, bit 2): Si val un, el resultat té paritat parell, és a dir, un nombre parell de bits a
1. Aquest indicador es pot utilitzar per detectar errors en transmissions.
AF (Auxiliary carry Flag, bit 4): Si val 1, indica que va haver-hi "arrossegament" o "préstec" del
nibble (quatre bits) menys significatiu al nibble més significatiu. Aquest indicador s'usa amb les
instruccions d'ajust decimal.
ZF (Zero Flag, bit 6): Si aquest indicador val 1, el resultat de l'operació és zero.
SF (Sign Flag, bit 7): Reflecteix el bit més significatiu del resultat. Com els nombres negatius es
representen en la notació de complement a dos, aquest bit representa el signe: 0 si és positiu,
1 si és negatiu.
TF (Trap Flag, bit 8): Si val 1, el processador està en mode pas a pas. D’aquesta manera, la CPU
automàticament genera una interrupció interna després de cada instrucció, permetent
inspeccionar els resultats del programa a mesura que s'executa instrucció per instrucció.
IF (Interrupt Flag, bit 9): Si val 1, la CPU reconeix comandes d'interrupció externes
enmascarables (pel pin INTR). Si val 0, no es reconeixen tals interrupcions. Les interrupcions no
enmascarables i les internes sempre es reconeixen independentment del valor de IF.
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
DF (Direction Flag, bit 10): Si val 1, les instruccions amb cadenes patiran "acte-decrement",
això és, es processaran les cadenes des de les adreces més altes de memòria cap a les més
baixes. Si val 0, hi haurà "acte-increment", la qual cosa vol dir que les cadenes es processaran
de "esquerra a dreta".
OF (Overflow flag, bit 11): Si val 1, va haver-hi un desbordament en una operació aritmètica
amb signe, això és, un dígit significatiu es va perdre a causa que grandària del resultat és major
que la grandària de la destinació.
SISTEMA DE CONTROL DE LA UNITAT D'EXECUCIÓ
És l'encarregat de desxifrar les instruccions que li envia la cua i enviar-li les ordres a la unitat
aritmètica i lògica segons una taula que té emmagatzemada en ROM anomenada CROM
(Control Read Only Memory).
CUA D'INSTRUCCIONS
Emmagatzema les instruccions per ser executades. La cua es carrega quan el bus està
desocupat, d'aquesta manera s'aconsegueix una major eficiència del mateix. La cua del 8086 té
6 bytes i es carrega de dos bytes per vegada (a causa de la grandària del bus de dades), mentre
que el del 8088 té quatre bytes. Aquesta estructura té rendiment òptim quan no es realitzen
salts, ja que en aquest cas caldria buidar la cua (perquè no es van a executar les instruccions
que van després del salt) i tornar-la a carregar amb instruccions que es troben a partir de la
direcció a on se salta.
A causa d'això les instruccions de salt són (després de multiplicacions i divisions) les més lentes
d'aquest microprocessador.
Registres de la unitat d'interfície amb el bus:
El programador pot accedir a cinc registres de 16 bits cadascun, sent quatre d'ells registres de
segment i el restant el punter d'instrucció (IP).
Els registres de segment són:
CS: Registre de segment de codi.
DS: Registre de segment de dades.
ÉS: Registre de segment extra.
SS: Registre de segment de pila.
La utilització d'aquests registres s'explica més endavant, en la secció que tracta l'adreçament a
memòria.
Lògica de control del bus:
La comesa d'aquest bloc és poder unir els blocs anteriorment esmentats amb el món exterior,
és a dir, la memòria i els perifèrics.
El 8088 té un bus de dades extern reduït de 8 bits. La raó per a això era preveure la continuïtat
entre el 8086 i els antics processadors de 8 bits, com el 8080 i el 8085. Tenint la mateixa
grandària del bus (així com similars requeriments de control i temps), el 8088, que és
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
internament un processador de 16 bits, pot reemplaçar als microprocessadors ja nomenats en
un sistema ja existent.
El 8088 té molts senyals en comú amb el 8085, particularment les associades amb la forma en
què les dades i les adreces estan multiplexades, encara que el 8088 no produeix els seus propis
senyals de rellotge com ho fa el 8085 (necessita un xip de suport anomenat 8284, que és
diferent del 8224 que necessitava el microprocessador 8080). El 8088 i el 8085 segueixen el
mateix esquema de compartir els terminals corresponents als 8 bits més baixos del bus
d'adreces amb els 8 bits del bus de dades, de manera que s'estalvien 8 terminals per a altres
funcions del microprocessador. El 8086 comparteix els 16 bits del bus de dades amb els 16 més
baixos del bus d'adreces.
El 8085 i el 8088 poden, de fet, dirigir directament els mateixos xips controladors de perifèrics.
Les recerques de maquinari per a sistemes basats en el 8080 o el 8085 són, en la seva majoria,
aplicables al 8088.
En tot el recentment explicat es va basar l'èxit del 8088.
El 8086/8088 pot connectar-se al circuit de dues formes diferents: la manera màxima i la
manera mínima. La manera queda determinat en posar un determinat terminal (anomenat
MN/MX) a terra o a la tensió d'alimentació.
El 8086/8088 ha d'estar en manera màxima si es desitja treballar en col·laboració amb el
Processador de Dades Numèric 8087 i/o el Processador d'Entrada/Sortida 8089 (d'aquí es
desprèn que en la IBM PC el 8088 està en manera màxima). En aquesta manera el 8086/8088
depèn d'altres xips addicionals com el Controlador de Bus 8288 per generar el conjunt complet
de senyals del bus de control. La manera mínima permet al 8086/8088 treballar d'una forma
més autònoma (per a circuits més senzills) en una manera gairebé idèntica al
microprocessador 8085.
Els 40 pins del 8088 en manera mínima tenen les següents funcions:
1.- GND (Massa)
2.- A14 (Bus d'adreces)
3.- A13 (Bus d'adreces)
4.- A12 (Bus d'adreces)
5.- A11 (Bus d'adreces)
6.- A10 (Bus d'adreces)
7.- A9 (Bus d'adreces)
8.- A8 (Bus d'adreces)
9.- AD7 (Bus d'adreces i dades)
10.- AD6 (Bus d'adreces i dades)
11.- AD5 (Bus d'adreces i dades)
12.- AD4 (Bus d'adreces i dades)
13.- AD3 (Bus d'adreces i dades)
14.- AD2 (Bus d'adreces i dades)
15.- AD1 (Bus d'adreces i dades)
16.- AD0 (Bus d'adreces i dades)
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
17.- NMI (Entrada d'interrupció no enmascarable)
18.- INTR (Entrada d'interrupció enmascarable)
19.- CLK (Entrada de rellotge generada pel 8284)
20.- GND (Massa)
21.- RESET (Per inicialitzar el 8088)
22.- READY (Per sincronitzar perifèrics i memòries lentes)
23.- /TEST
24.- /INTA (El 8088 indica que va reconèixer la interrupció)
25.- ALE (Quan està a 1 indica que surten adreces per AD, en cas contrari, és el bus de dades)
26.- /DONIN (Data enable: quan val zero ha d'habilitar els transceptors 8286 i 8287 (es
connecta al pin de "output enable"), això serveix perquè no es barregin les dades i les adreces).
27.- DT/R (Data transmit/receive: es connecta al pin d'adreça dels xips recentment indicats).
28.- IO/M (Si val 1: operacions amb ports, si val 0: operacions amb la memòria)
29.- /WR (Quan val zero hi ha una escriptura)
30.- HLDA (Hold Acknowledge: el 8088 reconeix el HOLD)
31.- HOLD (Indica que un altre integrat vol ensenyorir-se del control dels busos, generalment
s'usa per DMA o accés directe a memòria).
32.- /RD (Quan val zero hi ha una lectura)
33.- MN/MX (Quan aquesta entrada està en estat alt, el 8088 està en manera mínima, en cas
contrari està en manera màxima)
34.- /SSO (Juntament amb IO/M i DT/R aquesta sortida serveix per determinar estats del 8088)
35.- A19/S6 (Bus d'adreces/bit d'estat)
36.- A18/S5 (Bus d'adreces/bit d'estat)
37.- A17/S4 (Bus d'adreces/bit d'estat)
38.- A16/S3 (Bus d'adreces/bit d'estat)
39.- A15 (Bus d'adreces)
40.- Vcc (+5V)
En manera màxima (quan s'aplica +5V al pin 33) hi ha alguns pins que canvien de significat:
24.- QS1: Estat de la cua d'instruccions (bit 1).
25.- QS0: Estat de la cua d'instruccions (bit 0).
26.- S0: Bit d'estat 0.
27.- S1: Bit d'estat 1.
28.- S2: Bit d'estat 2.
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
29.- /LOCK: Quan val zero indica a altres controladors del bus (altres microprocessadors o un
dispositiu de DMA) que no han de guanyar el control del bus. S'activa posant-se a zero quan
una instrucció té el prefix LOCK.
30.- RQ/GT1: És bidireccional i té la mateixa funció que HOLD/HLDA en manera mínima.
31.- RQ/GT0: Com RQ/GT1 però té major prioritat.
34.- Aquesta sortida sempre està a un.
Per ser aquest microprocessador molt més complex que el 8085, té més bits d'estat que el
recentment esmentat. A títol informatiu es detallen els bits d'estat:
S2
IO/M S1
DT/R S0
/SSO
Significat
1
0
0
0
Accés a codi (instruccions)
1
0
0
1
Lectura de memòria
1
0
1
0
Escriptura a memòria
1
0
1
1
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
Bus passiu (no fa res)
0
1
0
0
Reconeixement d'interrupció
0
1
0
1
Lectura de port d'entrada/sortida
0
1
1
0
Escriptura a port d'I/S
0
1
1
1
Estat de parada (Halt)
QS1
QS0
Significat
0
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
0
No hi ha operació
0
1
Primer byte del codi d'operació
1
0
Es buida la cua d'instruccions
1
1
Següent byte de la instrucció
Maneres d'adreçament del 8086/8088:
Aquests processadors tenen 27 maneres d'adreçament (una quantitat bastant més gran que
els microprocessadors anteriors) o regles per localitzar un operand d'una instrucció.
Tres d'ells són comuns a microprocessadors anteriors: adreçament immediat (l'operand és un
nombre que es troba en la mateixa instrucció), adreçament a registre (l'operand és un registre
del microprocessador) i adreçament inherent (l'operand està implícit en la instrucció, per
exemple, en la multiplicació un dels operands sempre és l'acumulador).
La resta de les maneres serveix per localitzar un operand en memòria. Per facilitar l'explicació
d'aquestes maneres, es poden resumir de la següent manera:
Han de sumar-se quatre quantitats: 1) adreça de segment, 2) adreça base, 3) una quantitat
índex i 4) un desplaçament.
L'adreça de segment s'emmagatzema en el registre de segment (DS, ÉS, SS o CS). En la propera
secció s'indica la forma en què es fa això. Ara com ara n'hi ha prou amb saber que el contingut
del registre de segment es multiplica per 16 abans d'utilitzar-se per obtenir l'adreça real.
El registre de segmentació sempre s'usa per referenciar a memòria.
La base s'emmagatzema en el registre base (BX o BP). L'índex s'emmagatzema en el registre
índex (SI o DIO). Qualsevol d'aquestes dues quantitats, la suma de les dues o cap, poden
utilitzar-se per calcular l'adreça real, però no poden sumar-se dues bases o dos índexs.
Els registres restants (AX, CX, DX i SP) no poden utilitzar-se per a adreçament indirecte. El
programador pot utilitzar tant la base com l'índex per gestionar certes coses, tals com a
matrius de dues dimensions, o estructures internes a altres estructures, esquemes que
s'utilitzen en les pràctiques comunes de programació. La base i l'índex són variables o
dinàmiques, ja que estan emmagatzemades en registres de la CPU. És a dir, poden modificar-
se fàcilment mentre s'executa un programa.
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
A més del segment, base i índex, s'usa un desplaçament de 16 bits, 8 bits o 0 bits (sense
desplaçament). Aquesta és una quantitat estàtica que es fixa al temps d'assemblat (pas de codi
font a codi de màquina) i no pot canviar-se durant l'execució del programa (tret que el
programa s'escrigui sobre si mateix, la qual cosa constitueix una pràctica no aconsellada).
Tot això genera les 24 maneres d'adreçament a memòria que es veuen a continuació:
Registre indirecte: 1) [BX], 2) [DIGUES]. 3) [SI].
Basat: 4) desp8[BX], 5) desp8[BP], 6) desp16[BX], 7) desp16[BP].
Indexat: 8) desp8[SI], 9) desp8[DIGUES], 10) desp16[SI], 11) desp16[DIGUES].
Basat-indexat: 12) [BX+SI], 13) [BX+VAIG DONAR], 14) [BP+SI], 15) [BX+VAIG DONAR].
Basat-indexat amb desplaçament: 16) desp8[BX+SI], 17) desp8[BX+VAIG DONAR], 18)
desp8[BP+SI], 19) desp8[BX+VAIG DONAR], 20) desp16[BX+SI], 21) desp16[BX+VAIG DONAR],
22) desp16[BP+SI], 23) desp16[BX+VAIG DONAR].
Directe: 24) [desp16].
Aquí desp8 indica desplaçament de 8 bits i desp16 indica desplaçament de 16 bits. Altres
combinacions no estan implementades en la CPU i generaran error en voler assemblar, per
exemple, ADD CL,[DX+SI].
L'assemblador genera el tipus de desplaçament més apropiat (0, 8 o 16 bits) depenent del
valor que tingui la constant: si val zero s'utilitza el primer cas, si val entre -128 i 127 s'utilitza el
segon, i en un altre cas s'utilitza el tercer. Noti's que [BP] sense desplaçament no existeix. En
assemblar una instrucció com, per exemple, MOV AL,[BP], es generarà un desplaçament de 8
bits amb valor zero. Aquesta instrucció ocupa tres bytes, mentre que MOV AL,[SI] ocupa dos,
perquè no necessita el desplaçament.
Aquestes maneres d'adreçament produeixen alguns inconvenients en el 8086/8088. La CPU
gasta temps calculant una adreça composta de diverses quantitats. Principalment això es deu
al fet que el càlcul d'adreces està programat en microcodi (dins de la CROM del sistema de
control de la unitat d'execució). En les següents versions (a partir del 80186/80188) aquests
càlculs estan cablejats en la màquina i, per tant, costa molt menys temps el realitzar-los.
Vegem un exemple: MOV AL, ÉS:[BX+SI+6]. En aquest cas l'operand de l'esquerra té
adreçament a registre mentre que el de la dreta indica una posició de memòria. Posant valors
numèrics, suposem que els valors actuals dels registres siguin: ÉS = 3200h, BX = 200h, SI = 38h.
Com es va apuntar més amunt l'adreça real de memòria serà:
ÉS * 10h + BX + SI + 6 = 3200h * 10h + 200h + 38h + 6 = 3223Eh
Estructura de memòria de segmentació: Com s'ha esmentat anteriorment, el 8086/8088 usa
un esquema enginyós anomenat segmentació, per accedir correctament a un megaoctet
complet de memòria, amb referències d'adreces de només 16 bits.
Vegem com funciona. Qualsevol adreça té dues parts, cadascuna de les quals és una quantitat
de 16 bits. Una part és l'adreça de segment i l'altra és l'offset. Al seu torn l'offset es compon de
diverses parts: un desplaçament (un nombre fix), una base (emmagatzemada en el registre
basi) i un índex (emmagatzemat en el registre índex). L'adreça de segment s'emmagatzema en
un dels quatre registres de segment (CS, DS, ÉS, SS). El processador usa aquestes dues
quantitats de 16 bits per calcular l'adreça real de 20 bits, segons la següent fórmula:
Adreça real = 16 * (adreça del segment) + offset
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
Tal com vèiem abans, atès que 16 en decimal és 10 en hexadecimal, multiplicar per aquest
valor és el mateix que córrer el nombre hexadecimal a l'esquerra una posició.
Hi ha dos registres de segment que tenen usos especials: el microprocessador utilitza el
registre CS (amb l'offset emmagatzemat en el punter d'instrucció IP) cada vegada que s'ha
d'accedir a un byte d'instrucció de programa, mentre que les instruccions que utilitzen la pila
(anomenats a procediments, tornades, interrupcions i les instruccions PUSH i POP) sempre
utilitzen el registre de segment SS (amb l'offset emmagatzemat en el registre capdavanter de
pila SP). D'aquí els noms que prenen: CS és el segment de codi mentre que SS és el registre
segment de pila.
Per accedir a dades en la memòria es pot utilitzar qualsevol dels quatre registres de segment,
però un d'ells provoca que la instrucció ocupi un byte menys de memòria: és l'anomenat
segment per defecte, per la qual cosa en tant que sigui possible cal tractar d'usar aquest
segment per adreçar dades. Aquest segment és el DS (registre de segment de dades) para tots
els casos excepte quan s'utilitza el registre base BP. En aquest cas el segment per defecte és
SS.
Si s'utilitza un altre registre, l'assemblador genera un byte de prefix corresponent al segment
abans de la instrucció: CS -> 2Eh, DS -> 3Eh, ÉS -> 26h i SS -> 36h.
L'ús d'aquests diferents segments significa que hi ha àrees de treball separades per al
programa, pila i les dades. Cada àrea té una grandària màxima de 64 KBytes. Atès que hi ha
quatre registres de segment, un de programa (CS), un de pila (SS) i dues de dades (segment de
dades DS i segment extra ÉS) l'àrea de treball pot arribar a 4 * 64 KB = 256 KB en un moment
donat suposant que les àrees no se superposen.
Si el programa i les dades ocupen menys de 64 KB, la qual cosa es fa és fixar els registres de
segment al principi del programa i després s'utilitzen diferents offsets per accedir a diferents
posicions de memòria. En cas contrari necessàriament hauran de canviar-se els registres de
segment en la part del programa que ho requereixi.
Els registres de segment DS, ÉS i SS es carreguen mitjançant les instruccions MOV i POP,
mentre que CS es carrega mitjançant transferències de control (salts, cridades, tornades,
interrupcions) intersegment.
Estructura d'interrupcions del 8086/8088
Hi ha tres classes d'interrupció: per maquinari, per programari i internes (a les dues últimes
també les hi crida "excepcions").
Veurem primerament el cas d'interrupcions per maquinari: Com es va esmentar anteriorment,
el 8086/8088 té dues entrades de petició d'interrupció: NMI i INTR i una de reconeixement
(INTA).
La gran majoria de les fonts d'interrupció es connecten al pin INTR, ja que això permet
emmascarar les interrupcions (el NMI no). Per facilitar aquesta connexió, s'utilitza el circuit
integrat controlador d'interrupcions, que té el codi 8259A. Aquest xip té, entre altres coses,
vuit potes per a sengles fonts d'interrupció (IRQ0 - IRQ7), vuit per al bus de dades (D0 - D7),
una sortida de INTR i una entrada de INTA.
Això permet una connexió directa amb el 8088/8086. En ocórrer una petició d'alguna de les
vuit fonts, el 8259A activa la pota INTR. En acabar d'executar la instrucció en curs, el
microprocessador activa la pota INTA, la qual cosa provoca que el 8259A enviï pel bus de dades
un nombre de vuit bits (de 0 a 255) anomenat tipus d'interrupció (programable per l'usuari
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
durant la inicialització del 8259A), que el 8086/8088 utilitza per saber quin és la font
d'interrupció.
A continuació busca en la taula de vectors d'interrupció l'adreça del manejador d'interrupció
(interrupt handler). Això es fa de la següent manera. Es multiplica el tipus d'interrupció per
quatre, i es prenen els quatre bytes que es troben a partir d’aquesta direcció. Els dos primers
indiquen l'offset i els dos últims el segment del manejador, com es mostra a continuació.
Posició memòria
00
02
04
06
08
0A
0C
0I
10
12
……
3FC
3FE
IP
CS
IP
CS
IP
CS
IP
CS
IP
CS
……
IP
CS
Tipus d'Interrupció
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
00
01
02
03
04
FF
Com es pot observar, la taula ocupa el primer kilobyte de memòria (256 tipus * 4 bytes/tipus =
1024 bytes).
Una vegada que es van posar en la pila els flags, CS i IP (en aquest ordre), la CPU fa IF Les
interrupcions per programari ocorren quan s'executa la instrucció INT tipus. D'aquesta manera
es poden simular interrupcions durant la depuració d'un programa.
El tipus d'interrupció (per poder buscar el vector en la taula) apareix en la mateixa instrucció
com una constant de 8 bits. Molts sistemes operatius (programes que actuen a manera
d'interfície entre els programes dels usuaris (anomenades també "aplicacions") i el maquinari
del sistema) utilitzen aquesta instrucció per a crides a serveis, la qual cosa permet no haver de
conèixer l'adreça absoluta del servei, permetent canvis en el sistema operatiu sense haver de
canviar els programes que ho executen. D'aquesta manera, una de les primeres operacions
que ha de realitzar aquest sistema operatiu és inicialitzar la taula de vectors d'interrupció amb
els valors apropiats.
Existeixen algunes interrupcions predefinides, d'ús exclusiu del microprocessador, per la qual
cosa no és recomanable utilitzar aquests tipus d'interrupció per a interrupcions per maquinari
o programari.
- Tipus 0: Ocorre quan es divideix per zero o el quocient és major que el valor màxim que
permet la destinació.
- Tipus 1: Ocorre després d'executar una instrucció si TF (Trap Flag) val 1. Això permet
l'execució d'un programa pas a pas, la qual cosa és molt útil per a la depuració de programes.
- Tipus 2: Ocorre quan s'activa la pota NMI (interrupció no enmascarable).
- Tipus 3: Existeix una instrucció INT que ocupa només un byte, que és la corresponent a
aquest tipus. En els programes depuradors (debuggers) (tals com Debug, CodeView, Turbo
Debugger, etc.), s'utilitza aquesta instrucció com a punt de parada (per executar un programa
fins a una determinada adreça, fixada per l'usuari del depurador, s'insereix aquesta instrucció
en l'adreça corresponent a la parada i es llança l'execució. Quan el CS:IP apunti a aquesta
adreça s'executarà la INT 3, la qual cosa retornarà el control del processador al depurador). A
causa d'això, si se li ordena al depurador que executi el programa fins a una determinada
adreça en ROM (memòria de només lectura) (per exemple, per veure com funciona una
subrutina emmagatzemada en aquesta memòria), l'execució seguirà sense parar allí (ja que la
instrucció INT 3 no es va poder escriure sobre el programa). En el 80386, amb el seu elaborat
maquinari d'ajuda per a la depuració, es pot posar un punt de parada en ROM.
- Tipus 4: Ocorre quan s'executa la instrucció d'interrupció condicional INTO i el flag OF
(Overflow Flag) val 1.
Els tipus 5 a 31 (1F en hexadecimal) estan reservats per a interrupcions internes (també
anomenats "excepcions") de futurs microprocessadors.
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/
© Roger Casadejús Pérez | Exatienda
Prioritat entre diferents fonts d'interrupció:
1) Error de divisió, INT n (no enmascarable), INTO.
2) NMI (no enmascarable).
3) INTR (enmascarable mitjançant IF).
4) Execució pas a pas (enmascarable mitjançant TF).

Contenu connexe

En vedette (12)

Ps3 slim al descobert
Ps3 slim al descobertPs3 slim al descobert
Ps3 slim al descobert
 
Presentació de Windows 8
Presentació de Windows 8Presentació de Windows 8
Presentació de Windows 8
 
Presentació de Jail break ios 6 i 6.1
Presentació de Jail break ios 6 i 6.1Presentació de Jail break ios 6 i 6.1
Presentació de Jail break ios 6 i 6.1
 
Estrategies del màrqueting online
Estrategies del màrqueting onlineEstrategies del màrqueting online
Estrategies del màrqueting online
 
Presentació de PHP
Presentació de PHPPresentació de PHP
Presentació de PHP
 
Història i característiques del llenguatge C
Història i característiques del llenguatge CHistòria i característiques del llenguatge C
Història i característiques del llenguatge C
 
Presentació de Hiren's boot 15.2
Presentació de Hiren's boot 15.2Presentació de Hiren's boot 15.2
Presentació de Hiren's boot 15.2
 
Sitemap.xml i robots.txt
Sitemap.xml i robots.txtSitemap.xml i robots.txt
Sitemap.xml i robots.txt
 
Què és i com funciona el pagerank?
Què és i com funciona el pagerank?Què és i com funciona el pagerank?
Què és i com funciona el pagerank?
 
GIS vodovoda i kanalizacije u JKP "Naissus", Niš
GIS vodovoda i kanalizacije u JKP "Naissus", NišGIS vodovoda i kanalizacije u JKP "Naissus", Niš
GIS vodovoda i kanalizacije u JKP "Naissus", Niš
 
Presentació de Facebook
Presentació de FacebookPresentació de Facebook
Presentació de Facebook
 
Presentació de les novetats i llicències Vmware esxi 5
Presentació de les novetats i llicències Vmware esxi 5Presentació de les novetats i llicències Vmware esxi 5
Presentació de les novetats i llicències Vmware esxi 5
 

Similaire à Història dels microprocessadors intel 8088 i 8086

Presentació Informàtica
Presentació Informàtica Presentació Informàtica
Presentació Informàtica Sanndra16
 
Informàtica projecte
Informàtica projecteInformàtica projecte
Informàtica projectecgclaudia12
 
La informàtica
La informàticaLa informàtica
La informàticafrllamas
 
La informàtica
La informàticaLa informàtica
La informàticafrllamas
 
Sense títol 1
Sense títol 1Sense títol 1
Sense títol 1canetjh
 
Informatica
InformaticaInformatica
Informaticacanetjh
 
Glossari windows/apple
Glossari windows/appleGlossari windows/apple
Glossari windows/appleSergi Fadurdo
 
Mmix M1 Uf2 Apunts
Mmix M1 Uf2 ApuntsMmix M1 Uf2 Apunts
Mmix M1 Uf2 Apuntsscercos1
 
Que es la informatica
Que es la informaticaQue es la informatica
Que es la informaticaSoraya Delfa
 
Que es la informatica
Que es la informaticaQue es la informatica
Que es la informaticaSoraya Delfa
 
Full Resum Informatica
Full Resum InformaticaFull Resum Informatica
Full Resum Informaticacanetjh
 
Full Resum Informatica
Full Resum InformaticaFull Resum Informatica
Full Resum Informaticacanetjh
 
PARTS CPU
PARTS CPUPARTS CPU
PARTS CPUticitec
 
Supercomputador Nec SX9
Supercomputador Nec SX9Supercomputador Nec SX9
Supercomputador Nec SX9Andreu Bassols
 
Full resum (d'on provè la informàtica) din a3
Full resum (d'on provè la informàtica) din a3Full resum (d'on provè la informàtica) din a3
Full resum (d'on provè la informàtica) din a3frllamas
 

Similaire à Història dels microprocessadors intel 8088 i 8086 (20)

Informàtica projecte
Informàtica projecteInformàtica projecte
Informàtica projecte
 
La informàtica
La informàticaLa informàtica
La informàtica
 
Presentació Informàtica
Presentació Informàtica Presentació Informàtica
Presentació Informàtica
 
Informàtica projecte
Informàtica projecteInformàtica projecte
Informàtica projecte
 
La informàtica
La informàticaLa informàtica
La informàtica
 
La informàtica
La informàticaLa informàtica
La informàtica
 
La informàtica
La informàticaLa informàtica
La informàtica
 
Sense títol 1
Sense títol 1Sense títol 1
Sense títol 1
 
Informatica
InformaticaInformatica
Informatica
 
Informatica marc 1
Informatica marc 1Informatica marc 1
Informatica marc 1
 
Software
SoftwareSoftware
Software
 
Glossari windows/apple
Glossari windows/appleGlossari windows/apple
Glossari windows/apple
 
Mmix M1 Uf2 Apunts
Mmix M1 Uf2 ApuntsMmix M1 Uf2 Apunts
Mmix M1 Uf2 Apunts
 
Que es la informatica
Que es la informaticaQue es la informatica
Que es la informatica
 
Que es la informatica
Que es la informaticaQue es la informatica
Que es la informatica
 
Full Resum Informatica
Full Resum InformaticaFull Resum Informatica
Full Resum Informatica
 
Full Resum Informatica
Full Resum InformaticaFull Resum Informatica
Full Resum Informatica
 
PARTS CPU
PARTS CPUPARTS CPU
PARTS CPU
 
Supercomputador Nec SX9
Supercomputador Nec SX9Supercomputador Nec SX9
Supercomputador Nec SX9
 
Full resum (d'on provè la informàtica) din a3
Full resum (d'on provè la informàtica) din a3Full resum (d'on provè la informàtica) din a3
Full resum (d'on provè la informàtica) din a3
 

Plus de Roger Casadejús Pérez

Presentació de Wordpress fins a la 3.5.1
Presentació de Wordpress fins a la 3.5.1Presentació de Wordpress fins a la 3.5.1
Presentació de Wordpress fins a la 3.5.1Roger Casadejús Pérez
 

Plus de Roger Casadejús Pérez (20)

Presentació de Wordpress fins a la 3.5.1
Presentació de Wordpress fins a la 3.5.1Presentació de Wordpress fins a la 3.5.1
Presentació de Wordpress fins a la 3.5.1
 
Presentació de Twitter
Presentació de TwitterPresentació de Twitter
Presentació de Twitter
 
Presentació del protocol TCP/IP
Presentació del protocol TCP/IPPresentació del protocol TCP/IP
Presentació del protocol TCP/IP
 
Presentació de la història de Google
Presentació de la història de GooglePresentació de la història de Google
Presentació de la història de Google
 
Presentació de Virtual box
Presentació de Virtual boxPresentació de Virtual box
Presentació de Virtual box
 
Presentació històrica del VHS
Presentació històrica del VHSPresentació històrica del VHS
Presentació històrica del VHS
 
Presentació de Playstation 3
Presentació de Playstation 3Presentació de Playstation 3
Presentació de Playstation 3
 
Què és W3C?
Què és W3C?Què és W3C?
Què és W3C?
 
Seo: Com triomfar en els buscadors?
Seo: Com triomfar en els buscadors?Seo: Com triomfar en els buscadors?
Seo: Com triomfar en els buscadors?
 
Dues tecniques SEO de programació web
Dues tecniques SEO de programació webDues tecniques SEO de programació web
Dues tecniques SEO de programació web
 
Url amigables
Url amigablesUrl amigables
Url amigables
 
Zona DMZ
Zona DMZZona DMZ
Zona DMZ
 
Presentació de spoofing
Presentació de spoofingPresentació de spoofing
Presentació de spoofing
 
IP brick
IP brickIP brick
IP brick
 
Presentació de Smoothwall
Presentació de SmoothwallPresentació de Smoothwall
Presentació de Smoothwall
 
Presentació històrica de Visual.NET
Presentació històrica de Visual.NETPresentació històrica de Visual.NET
Presentació històrica de Visual.NET
 
Presentació de MySQL
Presentació de MySQLPresentació de MySQL
Presentació de MySQL
 
Presentació de Javascript
Presentació de JavascriptPresentació de Javascript
Presentació de Javascript
 
Presentació Ajax
Presentació AjaxPresentació Ajax
Presentació Ajax
 
Presentació de HTML 5
Presentació de HTML 5Presentació de HTML 5
Presentació de HTML 5
 

Història dels microprocessadors intel 8088 i 8086

  • 1. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Història dels microprocessadors Intel 8088/8086 Des de l'aparició dels primers microprocessadors en els inicis de la dècada dels setanta, totes les àrees científiques i tecnològiques han estat experimentat el seu més accelerat desenvolupament en la història de la humanitat. El baix cost, confiabilitat i reduït espai dels sistemes digitals basats en microprocessadors els han possibilitat introduïr-los en aplicacions que fins a abans d'aquesta dècada es trobaven restringides a sistemes d'alt cost i considerats d'alta tecnologia. Les indústries de la telecomunicació, automoció, aeronàutica, de transformació, mèdica i de consum casolà, així com l'educació, banca, i empreses de serveis, són només algunes de les àrees en les quals l'impacte de l'electrònica digital és més evident, ja que ho palpem en el nostre actuar quotidià. CISC És un abreujament de "Complex Instrution set computer". Es refereix als microprocessadors tradicionals que operen amb grups grans d'instruccions de processador (llenguatge màquina). Els microprocessadors INTEL 80xxx estan dins d'aquesta categoria (inclòs el PENTIUM). Els processadors CISC tenen un Set d'instruccions complexes per naturalesa que requereixen varis de molts cicles per completar-se. RISC És un abreujament de "Reduced Instruction Set Code", a diferència dels CISC, els processadors RISC tenen un grup o set d'instruccions simples requerint un o pocs cicles d'execució. Aquestes instruccions poden ser utilitzades més eficientment que la dels processadors CISC amb el disseny de programari apropiat, resultant en operacions més ràpides. ELS MICROPROCESSADORS 8086 I 8088 Història del 8086/8088: Al juny de 1978 Intel va llançar al mercat el primer microprocessador de 16 bits: el 8086. Al juny de 1979 va aparèixer el 8088 (internament igual que el 8086 però amb bus de dades de 8 bits) i al 1980 els coprocessadors 8087 (matemàtic) i 8089 (d'entrada i sortida). El primer fabricant que va desenvolupar programari i maquinari per a aquests xips va ser la pròpia Intel. Reconeixent la necessitat de donar suport a aquests circuits integrats, l'empresa va invertir gran quantitat de diners en un gran i modern edifici en Santa Clara, Califòrnia, dedicat al disseny, fabricació i venda dels seus sistemes de desenvolupament que, com es va explicar anteriorment, són computadores autosuficients amb el maquinari i programari necessari per desenvolupar programari de microprocessadors.
  • 2. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Els sistemes de desenvolupament són factors clau per assegurar les vendes d'una empresa fabricadores de xips. La immensa majoria de vendes són a altres empreses, les quals usen aquests xips en aparells electrònics, dissenyats, fabricats i comercialitzats per elles mateixes. A aquestes empreses se les anomena "fabricants d'equip original", o en anglès, OEM (Original Equipment Manufacturer). El disminuir el temps de desenvolupament de maquinari i programari per les OEM és essencial, ja que el mercat d'aquests productes és molt competitiu. Necessiten suport doncs els mesos que els pot portar el desenvolupament de les eines apropiades els pot significar pèrdues per milions de dòlars. A més volen ser els primers fabricants al mercat, amb la qual cosa poden assegurar-se les vendes en dues àrees importants: a curt termini, ja que al principi la demanda és molt major que l'oferta, i a llarg termini, ja que el primer producte marca sovint els estàndards. D'aquesta manera l'empresa Intel havia desenvolupat una sèrie completa de programari que s'executava en una microcomputadora basada en el 8085 anomenada "Intellec Microcomputer Development System". Els programes incloïen assembladors creuats (aquests són programes que s'executen en un microprocessador i generen codi de màquina que s'executa en un altre), compiladors de PL/M, Fortran i Pascal i diversos programes d'ajuda. A més a més, hi havia un programa traductor anomenat AMB V86 que convertia codi font 8080/8085 a codi font 8086/8088. Si s'observen de aprop tots dos conjunts d'instruccions, queda clar que la transformació és senzilla si els registres es tradueixen així: A -> AL, B -> CH, C -> CL, D -> DH, I -> DL, H -> BH i L -> BL. Pot semblar complicat traduir LDAX B (per exemple) ja que el 8088 no pot utilitzar el registre CX per a adreçament indirecte, no obstant això, es pot fer amb la següent seqüència: MOV SI, CX; MOV AL,[SI]. Això aprofita el fet que no s'utilitza el registre SI. Per descomptat el programa resultant és més llarg (en quantitat de bytes) i de vegades més lent de córrer que en el seu antecessor 8085. Aquest programa de conversió només servia per no haver de tornar a escriure els programes en una primera etapa. Després hauria de reescriure's el codi font en assembler per poder obtenir els avantatges de velocitat ofertes pel 8088. Després havia de córrer el programa en la iSBC 86/12 Single Board Computer basat en el 8086. A causa de l'enfarfec que resultava tenir dues plaquetes diferents, l'empresa Godbout Electronics (també de Califòrnia) va desenvolupar una placa on estaven el 8085 i el 8088, on s'utilitzava un assemblador creuat proveït per la companyia Microsoft. Sota control de programari, podien commutar-se els microprocessadors. El sistema operatiu utilitzat era el CP/M (de Digital Research). El desenvolupament més notable per a la família 8086/8088 va ser l'elecció de la CPU 8088 per part d'IBM (International Business Machines) quan en 1981 va entrar en el camp de les computadores personals. Aquesta computadora es va desenvolupar sota un projecte amb el nom "Acorn" (Projecte "Gla") però es va vendre sota un nom menys imaginatiu, però més correcte: "Computadora Personal IBM", amb un preu inicial entre 1260 dòlars i 3830 dòlars segons la configuració (amb 48KB de memòria RAM i una unitat de discos flexibles amb capacitat de 160KB costava 2235 dòlars). Aquesta computadora va entrar en competència directa amb les ofertes per Apple (basat en el 6502) i per Radi Shack (basat en el Z-80).
  • 3. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda ARQUITECTURA DELS PROCESSADORS 8088 I 8086: El 8086 és un microprocessador de 16 bits, tant pel que fa a la seva estructura com en les seves connexions externes, mentre que el 8088 és un processador de 8 bits que internament és gairebé idèntic al 8086. L'única diferència entre tots dos és la grandària del bus de dades extern. Intel tracta aquesta igualtat interna i desigualtat externa dividint cada processador 8086 i 8088 en dos sub-processadors. O sigui, cadascun consta d'una unitat d'execució (EU: Execution Unit) i una unitat interfície del bus (BIU: Bus Interface Unit). La unitat d'execució és l'encarregada de realitzar totes les operacions mentre que la unitat d'interfície del bus és l'encarregada d'accedir a dades i instruccions del món exterior. Les unitats d'execució són idèntiques en tots dos microprocessadors, però les unitats d'interfície del bus són diferents en diverses qüestions, com es desprèn del següent diagrama en blocs: L'avantatge d'aquesta divisió va ser l'estalvi d'esforç necessari per produir el 8088. Només una meitat del 8086 (el BIU) va haver de redissenyar-se per produir el 8088. L'explicació del diagrama en blocs és la següent: Registres d'ús general del 8086/8088: Tenen 16 bits cadascun i són vuit: 1) AX = Registre acumulador, dividit en AH i Al (8 bits cadascun). 2) BX = Registre base, dividit en BH i BL. 3) CX = Registre comptador, dividit en CH i CL. 4) DX = Registre de dades, dividit en DH i DL. 5) SP = Capdavanter de pila (no es pot subdividir). 6) BP = Capdavanter base (no es pot subdividir). 7) SI = Capdavanter índex (no es pot subdividir). 8) DIO = Capdavantera destinació (no es pot subdividir). Qualsevol d'aquests registres pot utilitzar-se com a font o destinació en operacions aritmètiques i lògiques, la qual cosa no es pot fer amb cap dels sis registres que es veuran més endavant. A més a més de l'anterior, cada registre té usos especials: AX: Usant-ho es produeix (en general) una instrucció que ocupa un byte menys que si s'utilitzessin altres registres d'ús general. La seva part més baixa, AL, també té aquesta propietat. L'últim registre esmentat és l'equivalent a l'acumulador dels processadors anteriors (8080 i 8085). A més hi ha instruccions com DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN i OUT que treballen amb AX o amb un dels seus dos bytes (AH o Al). També s'utilitza aquest registre (juntament amb DX de vegades) en multiplicacions i divisions. BX: És el registre base de propòsit similar (s'usa per a adreçament indirecte) i és una versió més potent del parell de registres HL dels processadors anteriors. CX: S'utilitza com a comptador en bucles (instrucció LOOP), en operacions amb cadenes (usant el prefix REP) i en desplaçaments i rotacions (usant el registre CL en els dos últims casos).
  • 4. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda DX: S'utilitza juntament amb el registre AX en multiplicacions i divisions, en la instrucció CWD i en IN i OUT per a adreçament indirecte de ports (el registre DX indica el nombre de ports d'entrada/sortida). SP: Encara que és un registre d'ús general, ha d'utilitzar-se només com a punter de pila, el qual serveix per emmagatzemar les adreces de tornada de subrutines i les dades temporals (mitjançant les instruccions PUSH i POP). En introduir (push) un valor en la pila a aquest registre se li resta dos, mentre que en extreure (pop) un valor de la pila aquest a registre se li sumeixi dos. BP: Generalment s'utilitza per realitzar adreçament indirecte dins de la pila. SI: Serveix com a capdavanter font per a les operacions amb cadenes. També serveix per realitzar adreçament indirecte. DIO: Serveix com a capdavantera destinació per a les operacions amb cadenes. També serveix per realitzar adreçament indirecte. UNITAT ARITMÈTICA I LÒGICA És l'encarregada de realitzar les operacions aritmètiques (suma, suma amb "arrossegament", resta, resta amb "préstec" i comparacions) i lògiques (AND, OR, XOR i TEST). Les operacions poden ser de 16 bits o de 8 bits. Indicadors (flags): Hi ha nou indicadors d'un bit en aquest registre de 16 bits. Els quatre bits més significatius estan indefinits, mentre que hi ha tres bits amb valors determinats: els bits 5 i 3 sempre valen zero i el bit 1 sempre val un (això també ocorria en els processadors anteriors). Registre d'indicadors (16 bits)Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Flag -- -- -- -- OF DF IF TF SF ZF 0 AF 0 PF 1 Cf CF (Carry Flag, bit 0): Si val 1, indica que va haver-hi "arrossegament" (en cas de summa) cap a, o "préstec" (en cas de resta) des del bit d'ordre més significatiu del resultat. Aquest indicador és usat per instruccions que sumen o resten nombres que ocupen diversos bytes. Les instruccions de rotació poden aïllar un bit de la memòria o d'un registre posant-ho en el Cf. PF (Parity Flag, bit 2): Si val un, el resultat té paritat parell, és a dir, un nombre parell de bits a 1. Aquest indicador es pot utilitzar per detectar errors en transmissions. AF (Auxiliary carry Flag, bit 4): Si val 1, indica que va haver-hi "arrossegament" o "préstec" del nibble (quatre bits) menys significatiu al nibble més significatiu. Aquest indicador s'usa amb les instruccions d'ajust decimal. ZF (Zero Flag, bit 6): Si aquest indicador val 1, el resultat de l'operació és zero. SF (Sign Flag, bit 7): Reflecteix el bit més significatiu del resultat. Com els nombres negatius es representen en la notació de complement a dos, aquest bit representa el signe: 0 si és positiu, 1 si és negatiu. TF (Trap Flag, bit 8): Si val 1, el processador està en mode pas a pas. D’aquesta manera, la CPU automàticament genera una interrupció interna després de cada instrucció, permetent inspeccionar els resultats del programa a mesura que s'executa instrucció per instrucció. IF (Interrupt Flag, bit 9): Si val 1, la CPU reconeix comandes d'interrupció externes enmascarables (pel pin INTR). Si val 0, no es reconeixen tals interrupcions. Les interrupcions no enmascarables i les internes sempre es reconeixen independentment del valor de IF.
  • 5. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda DF (Direction Flag, bit 10): Si val 1, les instruccions amb cadenes patiran "acte-decrement", això és, es processaran les cadenes des de les adreces més altes de memòria cap a les més baixes. Si val 0, hi haurà "acte-increment", la qual cosa vol dir que les cadenes es processaran de "esquerra a dreta". OF (Overflow flag, bit 11): Si val 1, va haver-hi un desbordament en una operació aritmètica amb signe, això és, un dígit significatiu es va perdre a causa que grandària del resultat és major que la grandària de la destinació. SISTEMA DE CONTROL DE LA UNITAT D'EXECUCIÓ És l'encarregat de desxifrar les instruccions que li envia la cua i enviar-li les ordres a la unitat aritmètica i lògica segons una taula que té emmagatzemada en ROM anomenada CROM (Control Read Only Memory). CUA D'INSTRUCCIONS Emmagatzema les instruccions per ser executades. La cua es carrega quan el bus està desocupat, d'aquesta manera s'aconsegueix una major eficiència del mateix. La cua del 8086 té 6 bytes i es carrega de dos bytes per vegada (a causa de la grandària del bus de dades), mentre que el del 8088 té quatre bytes. Aquesta estructura té rendiment òptim quan no es realitzen salts, ja que en aquest cas caldria buidar la cua (perquè no es van a executar les instruccions que van després del salt) i tornar-la a carregar amb instruccions que es troben a partir de la direcció a on se salta. A causa d'això les instruccions de salt són (després de multiplicacions i divisions) les més lentes d'aquest microprocessador. Registres de la unitat d'interfície amb el bus: El programador pot accedir a cinc registres de 16 bits cadascun, sent quatre d'ells registres de segment i el restant el punter d'instrucció (IP). Els registres de segment són: CS: Registre de segment de codi. DS: Registre de segment de dades. ÉS: Registre de segment extra. SS: Registre de segment de pila. La utilització d'aquests registres s'explica més endavant, en la secció que tracta l'adreçament a memòria. Lògica de control del bus: La comesa d'aquest bloc és poder unir els blocs anteriorment esmentats amb el món exterior, és a dir, la memòria i els perifèrics. El 8088 té un bus de dades extern reduït de 8 bits. La raó per a això era preveure la continuïtat entre el 8086 i els antics processadors de 8 bits, com el 8080 i el 8085. Tenint la mateixa grandària del bus (així com similars requeriments de control i temps), el 8088, que és
  • 6. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda internament un processador de 16 bits, pot reemplaçar als microprocessadors ja nomenats en un sistema ja existent. El 8088 té molts senyals en comú amb el 8085, particularment les associades amb la forma en què les dades i les adreces estan multiplexades, encara que el 8088 no produeix els seus propis senyals de rellotge com ho fa el 8085 (necessita un xip de suport anomenat 8284, que és diferent del 8224 que necessitava el microprocessador 8080). El 8088 i el 8085 segueixen el mateix esquema de compartir els terminals corresponents als 8 bits més baixos del bus d'adreces amb els 8 bits del bus de dades, de manera que s'estalvien 8 terminals per a altres funcions del microprocessador. El 8086 comparteix els 16 bits del bus de dades amb els 16 més baixos del bus d'adreces. El 8085 i el 8088 poden, de fet, dirigir directament els mateixos xips controladors de perifèrics. Les recerques de maquinari per a sistemes basats en el 8080 o el 8085 són, en la seva majoria, aplicables al 8088. En tot el recentment explicat es va basar l'èxit del 8088. El 8086/8088 pot connectar-se al circuit de dues formes diferents: la manera màxima i la manera mínima. La manera queda determinat en posar un determinat terminal (anomenat MN/MX) a terra o a la tensió d'alimentació. El 8086/8088 ha d'estar en manera màxima si es desitja treballar en col·laboració amb el Processador de Dades Numèric 8087 i/o el Processador d'Entrada/Sortida 8089 (d'aquí es desprèn que en la IBM PC el 8088 està en manera màxima). En aquesta manera el 8086/8088 depèn d'altres xips addicionals com el Controlador de Bus 8288 per generar el conjunt complet de senyals del bus de control. La manera mínima permet al 8086/8088 treballar d'una forma més autònoma (per a circuits més senzills) en una manera gairebé idèntica al microprocessador 8085. Els 40 pins del 8088 en manera mínima tenen les següents funcions: 1.- GND (Massa) 2.- A14 (Bus d'adreces) 3.- A13 (Bus d'adreces) 4.- A12 (Bus d'adreces) 5.- A11 (Bus d'adreces) 6.- A10 (Bus d'adreces) 7.- A9 (Bus d'adreces) 8.- A8 (Bus d'adreces) 9.- AD7 (Bus d'adreces i dades) 10.- AD6 (Bus d'adreces i dades) 11.- AD5 (Bus d'adreces i dades) 12.- AD4 (Bus d'adreces i dades) 13.- AD3 (Bus d'adreces i dades) 14.- AD2 (Bus d'adreces i dades) 15.- AD1 (Bus d'adreces i dades) 16.- AD0 (Bus d'adreces i dades)
  • 7. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda 17.- NMI (Entrada d'interrupció no enmascarable) 18.- INTR (Entrada d'interrupció enmascarable) 19.- CLK (Entrada de rellotge generada pel 8284) 20.- GND (Massa) 21.- RESET (Per inicialitzar el 8088) 22.- READY (Per sincronitzar perifèrics i memòries lentes) 23.- /TEST 24.- /INTA (El 8088 indica que va reconèixer la interrupció) 25.- ALE (Quan està a 1 indica que surten adreces per AD, en cas contrari, és el bus de dades) 26.- /DONIN (Data enable: quan val zero ha d'habilitar els transceptors 8286 i 8287 (es connecta al pin de "output enable"), això serveix perquè no es barregin les dades i les adreces). 27.- DT/R (Data transmit/receive: es connecta al pin d'adreça dels xips recentment indicats). 28.- IO/M (Si val 1: operacions amb ports, si val 0: operacions amb la memòria) 29.- /WR (Quan val zero hi ha una escriptura) 30.- HLDA (Hold Acknowledge: el 8088 reconeix el HOLD) 31.- HOLD (Indica que un altre integrat vol ensenyorir-se del control dels busos, generalment s'usa per DMA o accés directe a memòria). 32.- /RD (Quan val zero hi ha una lectura) 33.- MN/MX (Quan aquesta entrada està en estat alt, el 8088 està en manera mínima, en cas contrari està en manera màxima) 34.- /SSO (Juntament amb IO/M i DT/R aquesta sortida serveix per determinar estats del 8088) 35.- A19/S6 (Bus d'adreces/bit d'estat) 36.- A18/S5 (Bus d'adreces/bit d'estat) 37.- A17/S4 (Bus d'adreces/bit d'estat) 38.- A16/S3 (Bus d'adreces/bit d'estat) 39.- A15 (Bus d'adreces) 40.- Vcc (+5V) En manera màxima (quan s'aplica +5V al pin 33) hi ha alguns pins que canvien de significat: 24.- QS1: Estat de la cua d'instruccions (bit 1). 25.- QS0: Estat de la cua d'instruccions (bit 0). 26.- S0: Bit d'estat 0. 27.- S1: Bit d'estat 1. 28.- S2: Bit d'estat 2.
  • 8. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda 29.- /LOCK: Quan val zero indica a altres controladors del bus (altres microprocessadors o un dispositiu de DMA) que no han de guanyar el control del bus. S'activa posant-se a zero quan una instrucció té el prefix LOCK. 30.- RQ/GT1: És bidireccional i té la mateixa funció que HOLD/HLDA en manera mínima. 31.- RQ/GT0: Com RQ/GT1 però té major prioritat. 34.- Aquesta sortida sempre està a un. Per ser aquest microprocessador molt més complex que el 8085, té més bits d'estat que el recentment esmentat. A títol informatiu es detallen els bits d'estat: S2 IO/M S1 DT/R S0 /SSO Significat 1 0 0 0 Accés a codi (instruccions) 1 0 0 1 Lectura de memòria 1 0 1 0 Escriptura a memòria 1 0 1 1
  • 9. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Bus passiu (no fa res) 0 1 0 0 Reconeixement d'interrupció 0 1 0 1 Lectura de port d'entrada/sortida 0 1 1 0 Escriptura a port d'I/S 0 1 1 1 Estat de parada (Halt) QS1 QS0 Significat 0
  • 10. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda 0 No hi ha operació 0 1 Primer byte del codi d'operació 1 0 Es buida la cua d'instruccions 1 1 Següent byte de la instrucció Maneres d'adreçament del 8086/8088: Aquests processadors tenen 27 maneres d'adreçament (una quantitat bastant més gran que els microprocessadors anteriors) o regles per localitzar un operand d'una instrucció. Tres d'ells són comuns a microprocessadors anteriors: adreçament immediat (l'operand és un nombre que es troba en la mateixa instrucció), adreçament a registre (l'operand és un registre del microprocessador) i adreçament inherent (l'operand està implícit en la instrucció, per exemple, en la multiplicació un dels operands sempre és l'acumulador). La resta de les maneres serveix per localitzar un operand en memòria. Per facilitar l'explicació d'aquestes maneres, es poden resumir de la següent manera: Han de sumar-se quatre quantitats: 1) adreça de segment, 2) adreça base, 3) una quantitat índex i 4) un desplaçament. L'adreça de segment s'emmagatzema en el registre de segment (DS, ÉS, SS o CS). En la propera secció s'indica la forma en què es fa això. Ara com ara n'hi ha prou amb saber que el contingut del registre de segment es multiplica per 16 abans d'utilitzar-se per obtenir l'adreça real. El registre de segmentació sempre s'usa per referenciar a memòria. La base s'emmagatzema en el registre base (BX o BP). L'índex s'emmagatzema en el registre índex (SI o DIO). Qualsevol d'aquestes dues quantitats, la suma de les dues o cap, poden utilitzar-se per calcular l'adreça real, però no poden sumar-se dues bases o dos índexs. Els registres restants (AX, CX, DX i SP) no poden utilitzar-se per a adreçament indirecte. El programador pot utilitzar tant la base com l'índex per gestionar certes coses, tals com a matrius de dues dimensions, o estructures internes a altres estructures, esquemes que s'utilitzen en les pràctiques comunes de programació. La base i l'índex són variables o dinàmiques, ja que estan emmagatzemades en registres de la CPU. És a dir, poden modificar- se fàcilment mentre s'executa un programa.
  • 11. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda A més del segment, base i índex, s'usa un desplaçament de 16 bits, 8 bits o 0 bits (sense desplaçament). Aquesta és una quantitat estàtica que es fixa al temps d'assemblat (pas de codi font a codi de màquina) i no pot canviar-se durant l'execució del programa (tret que el programa s'escrigui sobre si mateix, la qual cosa constitueix una pràctica no aconsellada). Tot això genera les 24 maneres d'adreçament a memòria que es veuen a continuació: Registre indirecte: 1) [BX], 2) [DIGUES]. 3) [SI]. Basat: 4) desp8[BX], 5) desp8[BP], 6) desp16[BX], 7) desp16[BP]. Indexat: 8) desp8[SI], 9) desp8[DIGUES], 10) desp16[SI], 11) desp16[DIGUES]. Basat-indexat: 12) [BX+SI], 13) [BX+VAIG DONAR], 14) [BP+SI], 15) [BX+VAIG DONAR]. Basat-indexat amb desplaçament: 16) desp8[BX+SI], 17) desp8[BX+VAIG DONAR], 18) desp8[BP+SI], 19) desp8[BX+VAIG DONAR], 20) desp16[BX+SI], 21) desp16[BX+VAIG DONAR], 22) desp16[BP+SI], 23) desp16[BX+VAIG DONAR]. Directe: 24) [desp16]. Aquí desp8 indica desplaçament de 8 bits i desp16 indica desplaçament de 16 bits. Altres combinacions no estan implementades en la CPU i generaran error en voler assemblar, per exemple, ADD CL,[DX+SI]. L'assemblador genera el tipus de desplaçament més apropiat (0, 8 o 16 bits) depenent del valor que tingui la constant: si val zero s'utilitza el primer cas, si val entre -128 i 127 s'utilitza el segon, i en un altre cas s'utilitza el tercer. Noti's que [BP] sense desplaçament no existeix. En assemblar una instrucció com, per exemple, MOV AL,[BP], es generarà un desplaçament de 8 bits amb valor zero. Aquesta instrucció ocupa tres bytes, mentre que MOV AL,[SI] ocupa dos, perquè no necessita el desplaçament. Aquestes maneres d'adreçament produeixen alguns inconvenients en el 8086/8088. La CPU gasta temps calculant una adreça composta de diverses quantitats. Principalment això es deu al fet que el càlcul d'adreces està programat en microcodi (dins de la CROM del sistema de control de la unitat d'execució). En les següents versions (a partir del 80186/80188) aquests càlculs estan cablejats en la màquina i, per tant, costa molt menys temps el realitzar-los. Vegem un exemple: MOV AL, ÉS:[BX+SI+6]. En aquest cas l'operand de l'esquerra té adreçament a registre mentre que el de la dreta indica una posició de memòria. Posant valors numèrics, suposem que els valors actuals dels registres siguin: ÉS = 3200h, BX = 200h, SI = 38h. Com es va apuntar més amunt l'adreça real de memòria serà: ÉS * 10h + BX + SI + 6 = 3200h * 10h + 200h + 38h + 6 = 3223Eh Estructura de memòria de segmentació: Com s'ha esmentat anteriorment, el 8086/8088 usa un esquema enginyós anomenat segmentació, per accedir correctament a un megaoctet complet de memòria, amb referències d'adreces de només 16 bits. Vegem com funciona. Qualsevol adreça té dues parts, cadascuna de les quals és una quantitat de 16 bits. Una part és l'adreça de segment i l'altra és l'offset. Al seu torn l'offset es compon de diverses parts: un desplaçament (un nombre fix), una base (emmagatzemada en el registre basi) i un índex (emmagatzemat en el registre índex). L'adreça de segment s'emmagatzema en un dels quatre registres de segment (CS, DS, ÉS, SS). El processador usa aquestes dues quantitats de 16 bits per calcular l'adreça real de 20 bits, segons la següent fórmula: Adreça real = 16 * (adreça del segment) + offset
  • 12. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Tal com vèiem abans, atès que 16 en decimal és 10 en hexadecimal, multiplicar per aquest valor és el mateix que córrer el nombre hexadecimal a l'esquerra una posició. Hi ha dos registres de segment que tenen usos especials: el microprocessador utilitza el registre CS (amb l'offset emmagatzemat en el punter d'instrucció IP) cada vegada que s'ha d'accedir a un byte d'instrucció de programa, mentre que les instruccions que utilitzen la pila (anomenats a procediments, tornades, interrupcions i les instruccions PUSH i POP) sempre utilitzen el registre de segment SS (amb l'offset emmagatzemat en el registre capdavanter de pila SP). D'aquí els noms que prenen: CS és el segment de codi mentre que SS és el registre segment de pila. Per accedir a dades en la memòria es pot utilitzar qualsevol dels quatre registres de segment, però un d'ells provoca que la instrucció ocupi un byte menys de memòria: és l'anomenat segment per defecte, per la qual cosa en tant que sigui possible cal tractar d'usar aquest segment per adreçar dades. Aquest segment és el DS (registre de segment de dades) para tots els casos excepte quan s'utilitza el registre base BP. En aquest cas el segment per defecte és SS. Si s'utilitza un altre registre, l'assemblador genera un byte de prefix corresponent al segment abans de la instrucció: CS -> 2Eh, DS -> 3Eh, ÉS -> 26h i SS -> 36h. L'ús d'aquests diferents segments significa que hi ha àrees de treball separades per al programa, pila i les dades. Cada àrea té una grandària màxima de 64 KBytes. Atès que hi ha quatre registres de segment, un de programa (CS), un de pila (SS) i dues de dades (segment de dades DS i segment extra ÉS) l'àrea de treball pot arribar a 4 * 64 KB = 256 KB en un moment donat suposant que les àrees no se superposen. Si el programa i les dades ocupen menys de 64 KB, la qual cosa es fa és fixar els registres de segment al principi del programa i després s'utilitzen diferents offsets per accedir a diferents posicions de memòria. En cas contrari necessàriament hauran de canviar-se els registres de segment en la part del programa que ho requereixi. Els registres de segment DS, ÉS i SS es carreguen mitjançant les instruccions MOV i POP, mentre que CS es carrega mitjançant transferències de control (salts, cridades, tornades, interrupcions) intersegment. Estructura d'interrupcions del 8086/8088 Hi ha tres classes d'interrupció: per maquinari, per programari i internes (a les dues últimes també les hi crida "excepcions"). Veurem primerament el cas d'interrupcions per maquinari: Com es va esmentar anteriorment, el 8086/8088 té dues entrades de petició d'interrupció: NMI i INTR i una de reconeixement (INTA). La gran majoria de les fonts d'interrupció es connecten al pin INTR, ja que això permet emmascarar les interrupcions (el NMI no). Per facilitar aquesta connexió, s'utilitza el circuit integrat controlador d'interrupcions, que té el codi 8259A. Aquest xip té, entre altres coses, vuit potes per a sengles fonts d'interrupció (IRQ0 - IRQ7), vuit per al bus de dades (D0 - D7), una sortida de INTR i una entrada de INTA. Això permet una connexió directa amb el 8088/8086. En ocórrer una petició d'alguna de les vuit fonts, el 8259A activa la pota INTR. En acabar d'executar la instrucció en curs, el microprocessador activa la pota INTA, la qual cosa provoca que el 8259A enviï pel bus de dades un nombre de vuit bits (de 0 a 255) anomenat tipus d'interrupció (programable per l'usuari
  • 13. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda durant la inicialització del 8259A), que el 8086/8088 utilitza per saber quin és la font d'interrupció. A continuació busca en la taula de vectors d'interrupció l'adreça del manejador d'interrupció (interrupt handler). Això es fa de la següent manera. Es multiplica el tipus d'interrupció per quatre, i es prenen els quatre bytes que es troben a partir d’aquesta direcció. Els dos primers indiquen l'offset i els dos últims el segment del manejador, com es mostra a continuació. Posició memòria 00 02 04 06 08 0A 0C 0I 10 12 …… 3FC 3FE IP CS IP CS IP CS IP CS IP CS …… IP CS Tipus d'Interrupció
  • 14. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda 00 01 02 03 04 FF Com es pot observar, la taula ocupa el primer kilobyte de memòria (256 tipus * 4 bytes/tipus = 1024 bytes). Una vegada que es van posar en la pila els flags, CS i IP (en aquest ordre), la CPU fa IF Les interrupcions per programari ocorren quan s'executa la instrucció INT tipus. D'aquesta manera es poden simular interrupcions durant la depuració d'un programa. El tipus d'interrupció (per poder buscar el vector en la taula) apareix en la mateixa instrucció com una constant de 8 bits. Molts sistemes operatius (programes que actuen a manera d'interfície entre els programes dels usuaris (anomenades també "aplicacions") i el maquinari del sistema) utilitzen aquesta instrucció per a crides a serveis, la qual cosa permet no haver de conèixer l'adreça absoluta del servei, permetent canvis en el sistema operatiu sense haver de canviar els programes que ho executen. D'aquesta manera, una de les primeres operacions que ha de realitzar aquest sistema operatiu és inicialitzar la taula de vectors d'interrupció amb els valors apropiats. Existeixen algunes interrupcions predefinides, d'ús exclusiu del microprocessador, per la qual cosa no és recomanable utilitzar aquests tipus d'interrupció per a interrupcions per maquinari o programari. - Tipus 0: Ocorre quan es divideix per zero o el quocient és major que el valor màxim que permet la destinació. - Tipus 1: Ocorre després d'executar una instrucció si TF (Trap Flag) val 1. Això permet l'execució d'un programa pas a pas, la qual cosa és molt útil per a la depuració de programes. - Tipus 2: Ocorre quan s'activa la pota NMI (interrupció no enmascarable). - Tipus 3: Existeix una instrucció INT que ocupa només un byte, que és la corresponent a aquest tipus. En els programes depuradors (debuggers) (tals com Debug, CodeView, Turbo Debugger, etc.), s'utilitza aquesta instrucció com a punt de parada (per executar un programa fins a una determinada adreça, fixada per l'usuari del depurador, s'insereix aquesta instrucció en l'adreça corresponent a la parada i es llança l'execució. Quan el CS:IP apunti a aquesta adreça s'executarà la INT 3, la qual cosa retornarà el control del processador al depurador). A causa d'això, si se li ordena al depurador que executi el programa fins a una determinada adreça en ROM (memòria de només lectura) (per exemple, per veure com funciona una subrutina emmagatzemada en aquesta memòria), l'execució seguirà sense parar allí (ja que la instrucció INT 3 no es va poder escriure sobre el programa). En el 80386, amb el seu elaborat maquinari d'ajuda per a la depuració, es pot posar un punt de parada en ROM. - Tipus 4: Ocorre quan s'executa la instrucció d'interrupció condicional INTO i el flag OF (Overflow Flag) val 1. Els tipus 5 a 31 (1F en hexadecimal) estan reservats per a interrupcions internes (també anomenats "excepcions") de futurs microprocessadors.
  • 15. Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Prioritat entre diferents fonts d'interrupció: 1) Error de divisió, INT n (no enmascarable), INTO. 2) NMI (no enmascarable). 3) INTR (enmascarable mitjançant IF). 4) Execució pas a pas (enmascarable mitjançant TF).