història dels microprocessadors intel 8088 i 8086

15
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.

Upload: roger-casadejus-perez

Post on 26-Jan-2015

108 views

Category:

Documents


0 download

DESCRIPTION

Història dels microprocessadors intel 8088 i 8086. Més manuals a: http://www.exabyteinformatica.com

TRANSCRIPT

Page 1: Història dels microprocessadors intel 8088 i 8086

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.

Page 2: Història dels microprocessadors intel 8088 i 8086

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).

Page 3: Història dels microprocessadors intel 8088 i 8086

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).

Page 4: Història dels microprocessadors intel 8088 i 8086

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.

Page 5: Història dels microprocessadors intel 8088 i 8086

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

Page 6: Història dels microprocessadors intel 8088 i 8086

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)

Page 7: Història dels microprocessadors intel 8088 i 8086

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.

Page 8: Història dels microprocessadors intel 8088 i 8086

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

Page 9: Història dels microprocessadors intel 8088 i 8086

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

Page 10: Història dels microprocessadors intel 8088 i 8086

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.

Page 11: Història dels microprocessadors intel 8088 i 8086

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

Page 12: Història dels microprocessadors intel 8088 i 8086

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

Page 13: Història dels microprocessadors intel 8088 i 8086

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ó

Page 14: Història dels microprocessadors intel 8088 i 8086

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.

Page 15: Història dels microprocessadors intel 8088 i 8086

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).