Intel 8086 og 8088

Intel 8088

Intel 8088 mikroprosessor
Informasjon
Maker
Utgivelsesdato 1979
Seponering 1982
Tekniske data
CPU -klokkefrekvens 5MHz–10MHz
Instruksjonssett x86-16
kobles til
stikkontakt(er)
  • 40-pinners DIP

Intel 8086 og Intel 8088 ( i8086 , offisielt kalt iAPX 86 , og i8088 ) er de første 16 - bits mikroprosessorene designet av Intel . De var starten og de tidlige medlemmene av x86 - arkitekturen . Utviklingsarbeidet for 8086 startet våren 1976 og ble utgitt sommeren 1978. 8088 ble utgitt i 1979.

8086 og 8088 utfører det samme settet med instruksjoner . Internt er de identiske, bortsett fra at 8086 har en 6-byte instruksjonskø og 8088 bare 4. Eksternt skiller de seg ved at 8086 har en 16 - bit databuss og 8088 har bare 8 biter, så 8086 var raskere . På den annen side kan 8088 bruke færre støttende logiske kretser, noe som gjør det mulig å produsere billigere systemer.

8088 var mikroprosessoren som ble brukt til IBMs første personlige datamaskin , IBM PC , som ble utgitt i august 1981. Husk at det meste av maskinvaren på begynnelsen av 1980-tallet var 8-biters og billigere. 16-bits maskinvare var nesten ikke-eksisterende i 1981 og veldig dyrt.

Historikk

Bakgrunn

8088 ble designet i Israel, ved Haifa Intel Laboratory, som et stort antall andre Intel-prosessorer. I 1972 ga Intel ut 8008 , den første 8-bits mikroprosessoren. [ 1 ] 8008 implementerte et sett med instruksjoner designet av Datapoint - selskapet som hadde i tankene å lage programmerbare CRT-terminaler . 8008 viste seg også å være ganske generell. Enheten krevde flere ekstra IC -er for å produsere en fungerende datamaskin, delvis på grunn av den lille 18-pinners "minnepakken", som eliminerte bruken av en separat adressebuss (På den tiden var Intel først og fremst en produsent av DRAM ) . .

To år senere, i 1974, ga Intel ut 8080, [ 2 ] ved å bruke de nye 40-pinners DIL-pakkene som opprinnelig ble utviklet for kalkulator-ICer for å tillate en separat adressebuss . Den hadde et utvidet instruksjonssett som var kompatibelt på kildekodenivå , ikke binær maskinkode , med 8008 og inkluderte også noen 16-biters instruksjoner for å gjøre programmering enklere. 8080-enheten, ofte beskrevet som den første virkelig nyttige mikroprosessoren, ble til slutt erstattet av 8085 , basert på depletion-load NMOS- teknologi (1977) som kunne fungere med en enkelt 5V strømforsyning i stedet for tre forskjellige inngangsspenninger. sjetonger. [ 3 ] Andre velkjente 8-bits mikroprosessorer som dukket opp i løpet av disse årene inkluderer Motorola 6800 (1974), MOS Technology 6502 (1975), Zilog Z80 (1976) og Motorola 6809 (1978), så vel som andre.

Det første x86-designet

8086 - prosjektet startet i mai 1976 og var opprinnelig ment som en midlertidig erstatning for det ambisiøse og forsinkede iAPX 432 - prosjektet . Det var et forsøk på å stjele rampelyset fra mindre bakovervendte 16-biters og 32-bits prosessorer fra andre produsenter (som Motorola , Zilog og National Semiconductor ) samtidig som det motvirket trusselen fra Zilog Z80 , som ble svært vellykket (designet av tidligere Intel-ansatte). Derfor ble både arkitekturen og den fysiske brikken utviklet ganske raskt av en liten gruppe mennesker, og ved å bruke de samme grunnleggende mikroarkitekturelementene og fysiske implementeringsteknikkene som ble brukt for den litt eldre 8085 (og som 8086 også ville fungere som en fortsettelse).

Markedsført som kildekodekompatibel, ble 8086 designet slik at monteringsspråket for 8008, 8080 eller 8085 automatisk kunne konverteres til (suboptimal) ekvivalent 8086-kildekode, med liten eller ingen redigering for hånd. For å gjøre dette mulig, var programmeringsmodellen og instruksjonssettet (løst) basert på 8080. Imidlertid ble 8086-designen utvidet til å støtte full 16-bits prosessering, i stedet for de ganske grunnleggende 16-bits egenskapene. bitene til 8080/ 8085.

Nye instruksjonsklasser ble også lagt til, støtte for signerte heltall, base + offset-adressering og selvrepeterende operasjoner var lik Z80-designet, [ 4 ] men alle ble gjort litt mer generelle i 8086. Instruksjoner som støtter de nestede funksjonene til ALGOL -familien av språk som Pascal og PL/M ble også lagt til . I følge hovedarkitekten Stephen P. Morse var dette et resultat av en mer programvaresentrisk tilnærming til design enn tidligere Intel-prosessorer (designerne hadde erfaring med å jobbe med kompilatorimplementeringer). Andre forbedringer inkluderte instruksjoner for multiplikasjon og deling av mikrokode og en bussstruktur som er bedre egnet for fremtidige koprosessorer (som 8087 og 8089 ) og multiprosessorsystemer .

Den første revisjonen av instruksjonssettet og høynivåarkitekturen var klar etter omtrent tre måneder, [ 5 ] og siden nesten ingen CAD-verktøy ble brukt, jobbet fire ingeniører og 12 diagrammere samtidig med brikken. [ 6 ] 8086 tok litt over to år fra idé til fungerende produkt, som ble ansett som ganske raskt for et komplekst design i 1976-1978.

8086 ble sekvensert [ 7 ] ved hjelp av en tilfeldig blanding av logikk og mikrokode og ble implementert ved bruk av utarmingslast nMOS- kretser med omtrent 20 000 aktive transistorer (29 000 teller alle ROM- og PLA- steder ). Det ble snart flyttet til en ny raffinert nMOS-produksjonsprosess kalt HMOS (for High Performance MOS) som Intel opprinnelig utviklet for å produsere raske statiske RAM-produkter. [ 8 ] Dette ble fulgt av versjoner av HMOS-II, HMOS-III, og til slutt en helt statisk versjon av CMOS for batteridrevne enheter, produsert ved hjelp av Intels CHMOS- prosesser. [ 9 ] Den originale brikken målte 33 mm² og minimumsstørrelsen var 3,2 µm.

Arkitekturen ble definert av Stephen P. Morse med litt hjelp og assistanse fra Bruce Ravenel (arkitekten til 8087) med å finpusse de endelige revisjonene. Logikkdesignerne Jim McKevitt og John Bayliss var ingeniørene som ledet utviklingsteamet på maskinvarenivå, [ 10 ] og William Pohlma leder for prosjektet. Arven til 8086 lever videre i det grunnleggende instruksjonssettet til dagens personlige datamaskiner og servere; 8086 lånte også ut de to siste sifrene til senere utvidede versjoner av designet, som Intel 286 og Intel 386 , som alle etter hvert skulle bli kjent som x86 -familien . (En annen referanse er at PCI-leverandør-IDen for Intel-enheter er 8086h ! )

Intern struktur

Bussgrensesnittenhet og utførelsesenhet

8086 og 8088 har internt to komponenter, Bus Interface Unit og Execution Unit (BIU) og Execution Unit (EU).

På figuren til høyre er utførelsesenheten nederst og bussgrensesnittenheten øverst. De to er koblet sammen via en intern buss.

Records

i8086- og i8088-registreringene var basert på designen til Intel 8080 og Intel 8085 , og er faktisk kompatible på assembly-språknivå med i8080. Registersettet ligner også på i8080, men utvidet til 16 bits . Både i8086 og i8088 har fire 16 -biters generelle registre , som også kan nås som åtte 8-biters registre , og har fire 16-biters indeksregistre (inkludert stabelpekeren ). Dataregistre brukes noen ganger implisitt av utsagn, noe som gjør det vanskeligere å organisere registrene for bruk med midlertidige verdier.

Prosessorregistrene brukes til å inneholde dataene det jobbes med siden registertilgang er mye raskere enn minnetilgang. Du kan blant annet utføre aritmetiske og logiske operasjoner, sammenligninger. Disse operasjonene kan gjøres med alle registrene unntatt segmentregistrene, IP-en og flaggene.

Generelle formålsregistre
Generelle formålsregistre
Åh TIL AX (akkumulator)
BH BL BX (Base)
CH CL CX (teller)
HD DL DX (data)
indeksposter
JA S urse I ndeks
GAV D estasjon I ndeks
BP Basispeker _ _ _
SP S tack P ointer
Flaggregistrering
- - - - ENTEN D Yo T ja Z - EN - P - C Flagg
Segment poster
CS K ode S egment
DS D ata S egment
DET ER Ekstra segment _ _
H.H S tack S egment
instruksjonspekerregister
IP Instruksjonsmerker _ _ _

De generelle registrene er 16-biters AX, BX, CX og DX. Hver av dem er delt inn i to 8-bits registre, kalt AH og AL, BH og BL, CH og CL, og, DH og DL, H betyr Høy (høy) og L betyr Lav (lav), som indikerer den høye delen eller den nedre delen av det tilsvarende 16-bits registeret (se diagram). Et program kan bruke både 16-bit registre og 8-bit registre. Bortsett fra den generelle bruken av registre for å gjøre aritmetiske og logiske beregninger, er det instruksjoner som bruker disse registrene med en spesiell spesialisert bruk, som følger:

  • AX-register: AX-registeret er akkumulatorregisteret, det brukes til operasjoner som involverer input/output, multiplikasjon og divisjon (de to sistnevnte i forbindelse med DX-registeret)
  • BX-register: BX-registeret er basisregisteret, og er det eneste generelle registeret som kan være en indeks for indeksert adressering.
  • CX-register: CX-registeret er kjent som tellerregisteret. Kan inneholde en verdi for å kontrollere antall ganger en syklus gjentas eller en verdi for bitskift.
  • DX-logg: DX-loggen er dataloggen. I noen operasjoner indikerer dette registeret inngangs-/utgangsportnummeret, og i 16-bits multiplikasjons- og divisjonsoperasjoner brukes det sammen med AX-akkumulatoren.
Records Index

SI- og DI-registrene er tilgjengelige for indeksert adressering og strengoperasjoner.

  • SI-register: 16-biters kildeindeksregisteret er nødvendig for enkelte tegnstrengoperasjoner. SI er assosiert med DS-segmentet.
  • DI-register: Destinasjonsindeksregisteret er også nødvendig for enkelte strengoperasjoner. DI er knyttet til ES-segmentet.
Pointer Records

SP (stabelpeker) og BP (basispeker)-registre er assosiert med SS-registeret og lar systemet få tilgang til data i stabelsegmentet.

  • SP-register: 16-bits stabelpekeren er assosiert med SS-segmentet og gir en offsetverdi som refererer til det gjeldende ordet som behandles på stabelen. Systemet administrerer dette registeret automatisk, selv om programmet kan gjøre visse manipulasjoner med det.
  • BP Register: 16-bits basepekeren gjør det enkelt å referere til parametere i stabelen.
Flaggposter

Det er et 16-bits register , hvorav ni brukes til å indikere maskinens nåværende tilstand og resultatet av behandlingen. Mange aritmetiske og sammenligningsinstruksjoner endrer statusen til flaggene, og basert på dem kan beslutninger tas for å bestemme den påfølgende handlingen.

Tabellen inneholder 16 posisjoner (0 til 15), som er de 16 bitene i flaggregisteret, nummerert fra høyre til venstre. Posisjon 0 vil bli funnet til høyre og posisjon 15 til venstre.

- - - - AV DF HVIS TF SF ZF - AF - FAQ - CF

Flaggbitene er som følger:

  • OF (overløp, overløp): Indikerer overløp av den høyeste ordensbiten etter en aritmetisk operasjon av fortegnede tall (1=overløp eksisterer; 0=overløp eksisterer ikke). For usignerte operasjoner ignoreres dette flagget.
  • DF (adresse): Kontrollerer økningen eller dekrementeringen av SI- og DI-registrene i tegnstrengoperasjoner (1=automatisk dekrementering; 0=økning). DF-flagget kontrolleres av STD- og CLD-instruksjonene.
  • IF (Avbrudd): Styrer utløsningen av avbrudd (1=aktiverer avbrudd; 0=deaktiverer avbrudd). Det ikke-maskerbare avbruddet er det eneste som ikke kan blokkeres av dette flagget. Tilstanden til IF-flagget kontrolleres med STI- og CLI-instruksjonene.
  • TF (felle): Tillater drift av prosessoren i feilsøkingsmodus (trinn for trinn)
  • SF (tegn): Inneholder det resulterende tegnet for en aritmetisk operasjon (0=positivt; 1=negativt).
  • ZF (null): Indikerer resultatet av en aritmetisk eller sammenligningsoperasjon (0=resultat forskjellig fra null; 1=resultat lik null).
  • AF (hjelpebæring): Inneholder overføringen av bit 3. Dette flagget er testet med DAA- og DAS-instruksjonene for å sette verdien til AL etter en BCD -addisjon eller subtraksjon .
  • PF (paritet): Indikerer om antall bits 1, av den minst signifikante byten i en operasjon, er partall (0=antall bits 1 er oddetall; 1=antall bits 1 er partall).
  • CF (carry): Inneholder overføringen av høyordensbiten etter en aritmetisk operasjon; den lagrer også innholdet i den siste biten i en skift- eller roteringsoperasjon.
Segmenter poster

De definerer 64 Kb-områder innenfor 1 Mb-adresseområdet til 8086. Disse områdene kan overlappe helt eller delvis. Det er ikke mulig å få tilgang til en minneplassering som ikke er definert av et segment: om nødvendig må en flyttes.

  • CS-register: DOS lagrer startadressen til et programs kodesegment i CS-registeret. Denne segmentadressen, pluss en forskyvningsverdi i instruksjonspeker (IP) registeret, indikerer adressen til en instruksjon som hentes for utførelse. For vanlige programmeringsformål er det ikke nødvendig å referere til CS-registeret.
  • DS-register: Startadressen til et programdatasegment lagres i DS-registeret. Denne adressen, pluss en offsetverdi i en instruksjon, genererer en referanse til plasseringen av en spesifikk byte i datasegmentet.
  • SS-register: SS-registeret tillater plassering av en stabel i minnet, for midlertidig lagring av adresser og data. DOS lagrer startadressen til et programs stabelsegment i SS-registeret. Denne segmentadressen, pluss en forskyvningsverdi i stabelpekerregisteret (SP), indikerer det gjeldende ordet på stabelen som adresseres. For vanlige programmeringsformål er det ikke nødvendig å referere til SS-registeret.
  • ES-register: Noen strengoperasjoner bruker segment-ekstraregisteret for å håndtere minneadressering. ES-registeret er knyttet til DI (Index)-registeret. Et program som krever bruk av ES-registeret kan initialisere det med en passende segmentadresse.
Instruksjonspekerregister

16-bits IP -registeret inneholder adresseforskyvningen til neste instruksjon som skal utføres. IP-en er assosiert med CS-registeret i den forstand at IP-en indikerer gjeldende instruksjon innenfor kodesegmentet som for tiden utføres i minnet.

Minne og porttilgang

Begge mikroprosessorene har en rekke 65536 inngangs-/utgangsadresser som kan nås som 8-biters eller 16-biters porter. I den nedre delen av minnet er det 256 avbruddsvektorer .

Disse prosessorene brukte en 20 - biters adresse som ga dem tilgang til opptil 1 MB minne . De interne registrene var bare 16 bit lange, så det ble utviklet en mekanisme ved å bruke segmentregistre for å få tilgang til megabyten med minne. 8086 og 8088 hadde fire 16-bits segmentregistre (CS, DS, ES og SS). I stedet for å levere de manglende 4 bitene for å adressere de 20 bitene, som de fleste segmenterte prosessorer, flytter 8086 og 8088 innholdet i segmentregisteret 4 biter til venstre og legger det til en 16-bits minneadresse. fra indeksregistre (BX , SI, DI, BP, SP, IP) og eventuelt en konstant, resultatet er den effektive adressen. Dette anses ofte som dårlig design, selv om det kan være akseptabelt, og til og med nyttig i assemblerspråk . Motsatt forårsaker det forvirring når pekere brukes mye (som i C-språket ), fordi det er mulig for to pekere med forskjellige verdier å peke til samme minneadresse. Dette segmentskjemaet ble endret i Intel 80286 og senere i Intel 80386 .

Segmentering

Det var også fire 16-bits segmentregistre som tillot 8086 og 8088 å få tilgang til en megabyte med minne på en uvanlig måte. I stedet for å sette sammen segmentregisteret med adresseregisteret, som i de fleste prosessorer hvis adresseplass overskred registerstørrelsen, forskjøv 8086 og 8088 16-bits segmentet bare fire biter til venstre før de la til en 16-bits offset (16× segment + offset), som produserer en 20-bits ekstern (effektiv eller fysisk) adresse fra 32-bits segment:offset-paret. Følgelig kan hver ekstern adresse refereres til med 2 12 = 4096 forskjellige segment:offset-par. 16-byte-separasjonen mellom segmentbasene (på grunn av 4-bits offset) ble kalt et avsnitt . Selv om det ble betraktet som tungvint og tungvint av mange programmerere, hadde denne ordningen også fordeler; et lite program (mindre enn 64 KB) kan lastes inn med en fast forskyvning (som 0) i sitt eget segment, og unngår behovet for flytting , med maksimalt 15 byte bortkastet justering.

Kompilatorene for 8086-familien støttet vanligvis to typer pekere , nær og fjern. Nærpekere var 16-bits forskyvninger implisitt assosiert med koden eller datasegmentet til programmet og kunne derfor bare brukes innenfor deler av et program som er små nok til å passe inn i et segment. Fjernpekere var 32-bits segment:offset-par som ble løst til 20-biters eksterne adresser. Noen kompilatorer støttet også enorme pekere, som var som fjernpekere, bortsett fra at pekeraritmetikk på en enorm peker behandlet den som en 20-bits lineær peker, mens pekeraritmetikk på en enorm peker viklet rundt) innenfor 16-biters offset uten å berøre segmentet del av adressen.

For å unngå behovet for å spesifisere nær og fjern for en rekke pekere, datastrukturer og funksjoner, støtter kompilatorer også "minnemodeller" som spesifiserer standard pekerstørrelser. De bittesmå (64K maksimum), små (128K maksimum), kompakte (data > 64K), medium (kode > 64K), store (kode og data > 64K) modellene) og enorme (individuelle matriser > 64K), dekket nærpeker kombinasjoner. langt og stort for kode og data. Den lille modellen betydde at kode og data ble delt i et enkelt segment, akkurat som de fleste 8-bits baserte prosessorer, og kunne brukes til å bygge .com-filer for eksempel. Forhåndskompilerte biblioteker kom ofte i flere versjoner kompilert for forskjellige minnemodeller.

I følge Morse og andre vurderte designerne faktisk å bruke en 8-bits offset (i stedet for 4 bits), for å lage et fysisk adresseområde på 16 MB. Men siden dette ville ha tvunget segmenter til å starte ved 256-byte grenser, og rundt 1976 ble 1 MB ansett som for stor for en mikroprosessor, ble ideen skrotet. Dessuten var det ikke nok pinner tilgjengelig i en billig 40-pinners pakke. [ 11 ]

I prinsippet kunne x86-seriens adresserom ha blitt utvidet i senere prosessorer, noe som øker verdien av offset, så lenge applikasjoner fikk sine segmenter fra operativsystemet og ikke gjorde antagelser om ekvivalensen til forskjellige segment:offset-par. [ 12 ] I praksis var bruken av "store" pekere og lignende mekanismer utbredt og flat 32-bits adressering ble mulig, med 32-bit offset-registrene i 80386 som til slutt utvidet rekkeviddegrensen adresser på en mer generell måte.

Portere gammel programvare

Små programmer kan ignorere segmentering og bare bruke den flate 16-biters adressen. Dette gjorde det mulig å portere 8-bits programvare ganske enkelt til 8086 og 8088. Forfatterne av MS-DOS utnyttet dette ved å tilby et applikasjonsprogrammeringsgrensesnitt veldig likt det til CP/M , i tillegg til å inkludere det enklere kjørbare filformatet .com, identisk med CP/M. Dette var viktig da 8086/8088 og MS-DOS var nye, fordi det tillot mange eksisterende CP/M (og andre) applikasjoner å bli lett tilgjengelige, noe som i stor grad letter aksept av den nye plattformen.

Adresse til den første kjørbare instruksjonen: FFFF:0

8088- og 8086-prosessorene, ved maskinvaredesign, utførte sin første instruksjon på adressen FFFF:0 (16 byte under taket på 1 MB minnekapasitet med sine 20 adressebiter). I dette området må det være en ROM for å kunne utføre instruksjonene når du slår på eller omstarter datamaskinen (eller enheten). Når det gjelder IBM PC , var IBM PC ROM BIOS i det området , og den første instruksjonen den utførte var et hopp (JMP) til begynnelsen av Power On Self Test (POST)-koden, der det var kode å sjekke CPU og gjennomgå og initialisere de forskjellige maskinvarekomponentene og BIOS til selve datamaskinen, og på slutten ble Boot Strap Loader utført , som startet Bootstrap . [ 13 ] x86- linjemikroprosessorene har arvet denne minneadressen (FFFF:0) for den første kjørbare instruksjonen.

Adresseringsmoduser

8086- og 8088-prosessorene hadde følgende adresseringsmoduser :

  • Underforstått . Dataene er implisitt i selve instruksjonen. For eksempel STC, STDog STI, (Angi bære, Angi retning og Angi avbrudd) slår på det tilsvarende flagget som er angitt i selve instruksjonen. CBW(Konverter byte til Word) utvider tegnbiten til register AL til AX. Verken AL eller AX er spesifisert, siden instruksjonen CBWimplisitt fungerer på dem.
  • Umiddelbar . Dataene som skal betjenes er umiddelbart etter op-koden til instruksjonen. Eh,MOV AX, 5
  • Register . Dataene er i et andre register. Eks. MOV AX, BX. Her ligger dataene i BX-registeret
  • Direkte . Adressen til dataene er i adressefeltet til opkoden. Eks. MOV AX, [100h]. Her flyttes (kopieres) innholdet i adressene 100h og 101h til AX-registeret. I dette tilfellet flyttes to byte siden AX er 16 biter. Hvis det var MOV BL, [100h], ville bare én byte blitt flyttet siden BL er et 8-bits register.
  • Indirekte . Dataene spesifiseres av en kombinasjon av indeks- og basisregistre, og det kan være en forskyvning
    • grunnlag . Et basisregister (BX eller BP) har adressen hvorfra dataene skal hentes. f.eksMOV AX, [BX]
    • Indeks . Et indeksregister (SI eller DI) har adressen hvorfra dataene skal hentes. f.eksMOV AX, [SI]
    • Base + Offset . Dataene vil bli hentet fra adressen pekt på av summen av et basisregister pluss en offset. f.eksMOV AX, [BP + 7]
    • Indeks + Offset . Dataene vil bli hentet fra adressen pekt på av summen av et indeksregister pluss en offset. f.eksMOV AX, [DI + 7]
    • Base + Indeks . Dataene vil bli hentet fra adressen pekt på av summen av et basisregister pluss et indeksregister. f.eksMOV AX, [BX + SI]
    • Base + Indeks + Offset . Dataene vil bli hentet fra adressen pekt på av summen av et basisregister, pluss et indeksregister, pluss en offset. f.eksMOV AX, [BX + SI + 9]

Fester

8086 og 8088 pinner. Adressebusslinjene vises i rødt, databusslinjene i blått og kontrollbusslinjene i grønt. Kraftbusslinjene er sett i svart. Disse prosessorene multiplekser adressebussen med data- og kontrollbussen. I 8086 kan du se pinnene 2 til 16 og pinnene 35 til 39 med dobbel funksjonalitet, i et bestemt øyeblikk transporterer den adressen og i et annet øyeblikk kommer dataene inn eller ut (eller informasjon fra noen linjer på kontrollbussen kommer ut).

På 8088 er pinnene 9 til 16 delt mellom adresse- og databussen, og pinnene 35 til 38 mellom adresse- og kontrollbussene.

8086 pinouts +--\_/--+ GND 1| |40 Vdc (+5V) <-- A14 <-> D14 2| |39 A15 --> D15 <-> <-- A13 <-> D13 3| |38 A16 --> S3 --> <-- A12 <-> D12 4| |37 A17 --> S4 --> <-- A11 <-> D11 5| |36 A18 --> S5 --> <-- A10 <-> D10 6| |35 A19 --> S6 --> <-- A9 <-> D9 7| |34 !BHE/S7 --> <-- A8 <-> D8 8| |33 MN/!MX <-- <-- A7 <-> D7 9| Intel |32 !RD --> <-- A6 <-> D6 10| 8086 |31 HOLD, !RQ/!GTO <-> <-- A5 <-> D5 11| |30 HLDA, !RQ/!GT1 <-> <-- A4 <-> D4 12| |29 !WR, !LOCK --> <-- A3 <-> D3 13| |28 M/!IO, !S2 --> <-- A2 <-> D2 14| |27 DT/!R, !S1 --> <-- A1 <-> D1 15| |26 !DEN, !S0 --> <-- A0 <-> D0 16| |25 ALE, QS0 --> --> NMI 17| |24 !INTA, QS1 --> -->ENTER 18| |23 !TEST <-- -->CLK 19| |22 KLAR <-- GND 20| |21 RESET <-- +-------+ 8088 pinouts

Bortsett fra den eksterne databussen, som er redusert til 8 biter, er forskjellen med 8086 minimal.

+--\_/--+ GND 1| |40 Vdc (+5V) <-- A14 2| |39 A15 --> <-- A13 3| |38 A16 --> S3 --> <-- A12 4| |37 A17 --> S4 --> <-- A11 5| |36 A18 --> S5 --> <-- A10 6| |35 A19 --> S6 --> <-- A9 7| |34 !SSO .... HØY , --> <-- A8 8| |33 MN/!MX <-- <-> D7 <-- A7 9| Intel |32 !RD --> <-> D6 <-- A6 10| 8088 |31 HOLD .... !RQ/!GTO <-> <-> D5 <-- A5 11| |30 HLDA .... !RQ/!GT1 <-> <-> D4 <-- A4 12| |29 !WR ..... !LOOK --> <-> D3 <-- A3 13| |28 M/!IO ... !S2 --> <-> D2 <-- A2 14| |27 DT/!R ... !S1 --> <-> D1 <-- A1 15| |26 !DEN .... !S0 --> <-> D0 <-- A0 16| |25 ALE ..... QS0 --> --> NMI 17| |24 !INTA ... QS1 --> -->ENTER 18| |23 !TEST <-- -->CLK 19| |22 KLAR <-- GND 20| |21 RESET <-- +-------+

Ytelse

Selv om den ble noe overskygget av andre designvalg på denne brikken, begrenset den multipleksede bussen ytelsen litt; overføringer av 16-biters eller 8-biters mengder ble utført i minnetilgangssykluser på fire klokkesykluser, som sammenlignet med typiske moderne 8-bits CPUer, var raskere med 16-bits mengder, men tregere med 16-bits mengder. Siden instruksjoner varierte fra én til seks byte, ble henting og utførelse utført samtidig (som de fortsatt er i dagens x86-prosessorer): Bus Interface Unit matet instruksjonsstrømmen til Bus Interface Unit. Utførelse gjennom en forhåndshentingskø på 6 byte for 8086 og 4 byte for 8088 (en løst koblet form for rørledning ), som fremskynder operasjoner på registre og med de umiddelbare operandene , mens minneoperasjoner dessverre ble tregere; fire år senere ble dette ytelsesproblemet løst med 80186 , 80188 og 80286 .

Imidlertid kom 8086 og 8088 med en full 16-bits arkitektur, med en ALU i full bredde , noe som betyr at 16-bits aritmetiske instruksjoner nå kunne utføres i en enkelt syklus av ALU, i stedet for to sykluser med bære som brukes av 8080 og 8085 , noe som fremskynder slike instruksjoner betraktelig. Den hadde også bedre ytelse med 16-biters logiske operasjoner. Kombinert med ortogonaliseringen av operasjoner kontra operandtyper og adresseringsmoduser , så vel som andre forbedringer, gjorde det ytelsesøkningen i forhold til 8080 eller 8085 ganske betydelig, til tross for tilfeller der eldre brikker kunne være mer effektive.

Utførelsestider for typiske instruksjoner
(i klokkesykluser) [ 14 ]
Instruksjon Registrering-Registrering Umiddelbar registrering Register-Minne Minne-Register Minne-umiddelbar
MOV to 4 8+EA 9+EA 10+EA
aluminium 3 4 9+AE, 16+EA, 17+EA
JMP Registrer => 11; Etikett => 15; Tilstand, etikett => 16
heltalls multiplikasjon 70~160 (avhengig av dataoperand og størrelse) pluss EA
signert heltallsdivisjon 80~190 (avhengig av dataoperand og størrelse) pluss EA
  • EA = tid for å beregne den effektive adressen (EA), fra 5 til 12 sykluser på 8086 og opptil 19 på 8088.
  • Tider er best tilfelle, avhengig av forhåndshentingstilstand, instruksjonsjustering og andre faktorer.

Som det fremgår av disse tabellene, var operasjoner på registre og umiddelbare operander raske (mellom 2 og 4 sykluser), mens instruksjoner med minneoperander og JMP-er (hopp ubetinget) var absolutt sakte; hops tok flere sykluser enn de enklere 8080 og 8085. 8088 (brukt i IBM PC) ble ytterligere hemmet av sin smalere 8-bits databuss. Årsakene til at de fleste minnerelaterte instruksjonene var trege var tredelt:

  • Løst koblede lese (hente) og utføre enheter er effektive for instruksjonsforhåndshenting, men ikke for hopp (JMP) og tilfeldig datatilgang (uten bruk av spesielle tiltak).
  • En dedikert adderer for adresseberegning ble ikke gitt; mikrokoderutinene måtte bruke hoved-ALU for dette (selv om det var en dedikert adderer for segment + offset).
  • Adresse- og databussene ble multiplekset , noe som tvang en litt lengre busssyklus (33~50%) enn typiske moderne 8-bits prosessorer.

Imidlertid ble minnetilgangsytelsen drastisk forbedret med Intels neste generasjons brikker. 80186 , 80188 og 80286 hadde dedikert maskinvare for adresseberegning , og sparte mange sykluser, og 80286 hadde også separate (ikke-multipleksede) adresse- og databusser.

Støttebrikker

8086/8088 bruker noen støttende IC-er laget av Intel:

Funksjonaliteten til de fleste av disse støttebrikkene fortsetter å eksistere i datamaskiner med x86 - arkitektur frem til i dag, bare at de har vært integrert i lang tid og ikke lenger er individuelle brikker og nå er en del av datamaskinens brikkesett (de fleste er integrert på sørbroen) . ).

Numerisk koprosessor

8086/8088 hadde ingen flyttallinstruksjoner , og å utføre operasjoner på reelle tall krevde biblioteker med flyttallprogramvarerutiner. Datamaskiner med 8086/8088 hadde vanligvis en 40-pinners sokkel som en valgfri matematisk koprosessor kunne plugges inn for mye raskere maskinvare/mikrokodebasert flytepunktsfunksjon. Intel 8087 var standard matematisk koprosessor for 8086 og 8088, og opererte på 80-bits tall internt. Produsenter som Cyrix (8087-kompatibel) og Weitek (ikke-8087-kompatibel) kom til slutt opp med en flytende-punkt-koprosessor med høy ytelse som konkurrerte med 8087, samt den påfølgende høyere ytelsen Intel 80387 .

Chipversjoner

Opprinnelig var klokkefrekvensen begrenset til 5 MHz (IBM-PC-en brukte 4,77 MHz, 4/3 av standard NTSC -fargefrekvens ) , men de siste HMOS- versjonene ble spesifisert for 10 MHz. HMOS-III- og CMOS -versjonene de ble laget for lang tid (i hvert fall en tid på 1990-tallet) for innebygde systemer , selv om deres etterfølgere, 80186/80188 ( som inkluderer noen on-chip periferiutstyr), har vært mer populær for innebygd bruk.

Derivater og kloner

Kompatible, og i mange tilfeller forbedrede, versjoner ble produsert av Fujitsu , Harris / Intersil , OKI , Siemens AG , Texas Instruments , NEC , Mitsubishi og AMD . For eksempel var NEC V20- og NEC V30-paret maskinvarekompatible med henholdsvis 8088 og 8086, men inkorporerte 80186-instruksjonssettet sammen med noen (men ikke alle) av 80186-hastighetsforbedringene, og ga bare bytte ut brikken, muligheten til å øke instruksjonssettet og behandlingshastigheten uten at produsentene må endre designene sine. Slike relativt enkle og laveffekts 8086/8088-kompatible CMOS-prosessorer brukes fortsatt i innebygde systemer.

Sovjetunionens elektronikkindustri var i stand til å gjenskape 8086 med industrispionasje og reverse engineering . den resulterende brikken, K1810BM86, var binær og pin-kompatibel med 8086, men var ikke mekanisk kompatibel fordi den brukte metriske målinger.

8088 og 8086 var de respektive kjernene til de PC-kompatible stasjonære datamaskinene, ES1840 og ES1841 , laget av sovjeterne. Imidlertid hadde disse datamaskinene betydelige maskinvareforskjeller fra deres sanne prototyper, og adresse-/databusskretsene ble designet uavhengig av Intel-produkter. ES1841 var den første PC - en som støttet dynamisk bussdimensjonering (US-patent nr. 4 831 514). Senere ble noen av prinsippene til ES1841 tatt i bruk i PS/2 (US patent nr. 5 548 786) og noen andre maskiner (britisk patentsøknad publikasjon nr. GB-A-2211325, publisert 28. juni 1989).

Mikrodatamaskiner som brukte i8086 eller i8088

IBM PC og XT

Den originale IBM PC -en var den mest innflytelsesrike mikrodatamaskinen som brukte 8088. Den brukte en klokkefrekvens på 4,77 MHz (4/3 av fargeutbruddshastigheten til NTSC ). Noen av IBMs ingeniører og andre ansatte ønsket å bruke IBM 801 -prosessoren , noen ville ha foretrukket den nyere Motorola 68000 , [ 15 ] mens andre argumenterte for en liten, enkel mikroprosessor lik det som hadde blitt brukt i tidligere personlige datamaskiner (som f.eks. TRS-80 eller Apple II ). [ 16 ] Imidlertid hadde IBM allerede en historie med å bruke Intel-brikker i produktene sine og hadde også skaffet seg rettighetene til å produsere 8086-familien. [ 17 ] En annen faktor var at 8088 tillot datamaskinen å være basert på en modifisert design av 8085 , ettersom den enkelt kan grensesnitt med de fleste nMOS -brikker med 8-bits databusser, dvs. eksisterende og modne komponenter, og derfor billig. Dette inkluderte IC-er opprinnelig ment for støtte og perifere funksjoner rundt 8085 og lignende prosessorer (ikke utelukkende fra Intel) som allerede var godt kjent for mange ingeniører, noe som reduserte kostnadene ytterligere. [ 18 ]

Den umiddelbare etterfølgeren til IBM PC, IBM XT , brukte 8088. Den hadde en veldig lik arkitektur som PCen, og la bare tre utvidelsesspor til PCens fem, en harddisk, ekstra RAM på hovedkortet og en strømforsyning av kraft med større kapasitet; og eliminere kassettgrensesnittet.

Etterkommere av 8088 inkluderer 80188 , 80186 , 80286 , 80386 , 80486 , Pentium og senere programvarekompatible prosessorer, som er i bruk i dag.

Kloner

De fleste kloner av IBM PC og XT brukte Intel 8088 som kjørte på 4,77 MHz eller høyere. Noen kjørte på 8, 10 og til og med 12 MHz.

Andre

Av mikrodatamaskinene som brukte 8086 har vi følgende:

  • Den første kommersielle 8086-baserte mikrodatamaskinen var Mycron 2000.
  • IBM Displaywriter tekstbehandler . [ referanse nødvendig ]
  • Wang Professional Computer, produsert av Wang Laboratories
  • AT&T 6300 PC ( bygget av Olivetti )
  • NEC PC-9801 (bygget av NEC )
  • Den første Compaq Deskpro brukte en 8086 som kjørte på 7,14 MHz, men var i stand til å kjøre utvidelseskort designet for 4,77 MHz IBM XT .
  • FLT86 er et veletablert treningssystem for 8086 CPU, som fortsatt produseres av Flite Electronics International Limited i Southampton , England .
  • IBM PS/2 - modellene 25 og 30 ble bygget med en 8 MHz 8086
  • Tandy 1000 SL-serien
  • Amstrad PC1512 , PC1640, PC2086, PC3086 og PC5086 brukte 8086 ved 8 MHz.
  • Fram til 2002 brukte NASA fortsatt den originale 8086 CPU på Space Shuttle Discovery bakkevedlikeholdssettet , for å forhindre programvareregresjon som kan være et resultat av oppgradering eller bytte til ufullkomne kloner. [ 19 ]

Se også

Forgjengere

Etterfølgere

Referanser

  1. ↑ ved hjelp av pMOS -logikk for forbedring (krever 14V, oppnår TTL-kompatibilitet ved å ha V CC ved +5V og VDD ved -9V )
  2. ved bruk av umettet forbedringsbelastning nMOS - logikk (krever en høyere portspenning for lasttransistorportene)
  3. gjort mulig med uttømmingsbelastning nMOS-logikk (8085 ble senere laget ved hjelp av HMOS-behandling, akkurat som 8086)
  4. Fødsel av en standard: Intel 8086-mikroprosessoren. For 30 år siden lanserte Intel 8086-prosessoren, og introduserte x86-arkitekturen som ligger til grunn for hver PC-Windows-, Mac- eller Linux-produsert i dag , PC World, 17. juni 2008
  5. Rev.0 av instruksjonssettet og arkitekturen var klar på omtrent 3 måneder, ifølge Morse.
  6. Ved å bruke rubylith , lystavler, linjaler, elektriske viskelær og en digitizer (ifølge Jenny Hernandez, medlem av 8086-designteamet, i en uttalelse på Intels nettside for dens 25-årsdag).
  7. 8086 brukte mindre mikrokode enn mange konkurrerende design, for eksempel MC68000 og andre
  8. Raske statiske RAM-er i MOS-teknologi (like raske som bipolare RAM-er) var et viktig produkt for Intel i denne perioden.
  9. CHMOS er intels navn for CMOS-kretser produsert ved hjelp av prosesseringstrinn som ligner veldig på HMOS .
  10. Andre medlemmer av designteamet var Peter A. Stoll og Jenny Hernandez.
  11. Intel 8008 til 8086 av Stephen P. Morse et al.
  12. Noen 80186 kloner endret skiftverdien, men ble aldri ofte brukt på stasjonære datamaskiner.
  13. IBM PC Technical Reference Manual (delnummer 6025008), side A-80 og A-5
  14. Referansehåndbok for Microsoft Macro Assembler 5.0 . Microsoft Corporation. 1987. «Tidspunkter og kodinger i denne håndboken brukes med tillatelse fra Intel og kommer fra følgende publikasjoner: Intel Corporation. iAPX 86, 88, 186 og 188 brukerhåndbok, programmeringsreferanse, Santa Clara, California. 1986. »  (Tilsvarende for iAPX 286, 80386, 80387.)
  15. Senere brukt for IBM Instruments 9000 Laboratory Computer
  16. Det gikk noen rykter om at (den da lille) Microsoft på en eller annen måte klarte å overtale IBM til å bruke 8088, fordi den hadde flere og bedre 16-bits evner enn de fleste andre "8-bits" CPUer.
  17. I bytte for å gi Intel rettighetene til bobleminnedesignene . Men på grunn av hard konkurranse fra japanske produsenter som var i stand til å underby kostnadene, forlot Intel snart dette markedet og endret fokus til mikroprosessorer.
  18. 68000-komponenter var ikke allment tilgjengelige på den tiden, selv om de kunne bruke Motorola 6800- komponenter til en viss grad.
  19. For Old Parts, NASA Boldly Goes... på eBay , 12. mai 2002

Eksterne lenker