Zilog 80

Från Wiki.linux.se
Version från den 26 augusti 2024 kl. 06.21 av Admin (diskussion | bidrag) (→‎Registeruppsättning)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Z80 är en mikroprocessor som utvecklades av Zilog, Inc. och släpptes för första gången 1976. Z80-processorn var en av de mest populära och inflytelserika mikroprocessorerna på sin tid och användes i en mängd olika datorer och inbäddade system. Här är en ingående beskrivning av Z80-mikroprocessorn:

Arkitektur

Z80 är en 8-bitars CISC (Complex Instruction Set Computer) mikroprocessor med ett 16-bitars adressbuss. Den har en mångsidig instruktionsuppsättning som inkluderar en mängd olika operationer, inklusive aritmetik, logik, hopp och dataöverföring. Den har också flera register, inklusive ett ackumulatorregister (A) och registerpar som kan användas för olika ändamål.

Taktfrekvens

Z80-processorn finns i olika versioner och kunde fungera vid olika klockhastigheter. De ursprungliga Z80-processorer som släpptes på 1970-talet kunde ha klockhastigheter på upp till 2,5 till 4 MHz. Senare versioner hade högre klockhastigheter.

Instruktionsuppsättning

Z80 har en rik instruktionsuppsättning som inkluderar en mängd olika operationer, inklusive aritmetik, logik, skift, hopp, dataöverföring och mycket mer. Instruktionerna är kodade på olika sätt, inklusive en eller två byte, beroende på instruktionstypen.

Registeruppsättning

Z80 har flera användbara register, inklusive ackumulatorregistret (A), generaländamålsregister (B, C, D, E, H, L), samt en stackpekare (SP) och instruktionsräknare (PC). Z80 har också en separat registeruppsättning för de så kallade registerparen (BC, DE, HL), som kan användas för att utföra vissa typer av operationer som exempelvis blocköverföringar.


Z80-processorens Instruktioner

Dataöverföringsinstruktioner

  • LD: Load - Laddar data från en källa till en destination.
  • PUSH: Skjuter ett registerpar på stacken.
  • POP: Plockar ett registerpar från stacken.
  • EX: Exchange - Byter innehåll mellan registerpar eller register och minnesadresser.
  • EXX: Byter innehåll mellan de alternativa registerparen (BC, DE, HL) och deras huvudsakliga registerpar.
  • LDI / LDIR: Laddar en byte från minnet pekat av HL till minnet pekat av DE och inkrementerar HL, DE och minskar BC.
  • LDD / LDDR: Liknande LDI/LDIR men HL och DE dekrementeras istället för inkrementeras.

Aritmetiska instruktioner

  • ADD: Adderar två operander.
  • ADC: Adderar två operander med inkludering av Carry-flaggan.
  • SUB: Subtraherar en operand från en annan.
  • SBC: Subtraherar två operander med inkludering av Carry-flaggan.
  • INC: Inkrementerar ett register eller minne med 1.
  • DEC: Dekrementerar ett register eller minne med 1.
  • DAA: Decimal Adjust Accumulator, används efter en BCD-operation för att justera resultatet till en giltig BCD-siffra.

Logiska instruktioner

  • AND: Utför en logisk AND-operation mellan två operander.
  • OR: Utför en logisk OR-operation mellan två operander.
  • XOR: Utför en logisk XOR-operation mellan två operander.
  • CP: Jämför två operander (motsvarande SUB men utan att spara resultatet).
  • RLC / RLCA: Roterar vänster med eller utan att påverka Carry-flaggan.
  • RRC / RRCA: Roterar höger med eller utan att påverka Carry-flaggan.
  • RL / RLA: Roterar vänster genom Carry.
  • RR / RRA: Roterar höger genom Carry.

Bitmanipuleringsinstruktioner

  • BIT: Testar en specifik bit i ett register eller minne.
  • SET: Sätter en specifik bit i ett register eller minne.
  • RES: Nollställer en specifik bit i ett register eller minne.

Styrinstruktioner

  • JP: Jump - Hoppar till en specifik adress.
  • JR: Jump Relative - Hoppar en relativt specificerad offset från nuvarande position.
  • CALL: Anropar en subrutin.
  • RET: Returnerar från en subrutin.
  • RST: Reset - Hoppar till en fördefinierad adress (liknande CALL, men med fasta adresser).
  • DJNZ: Decrement and Jump if Not Zero - Dekrementerar B-register och hoppar om B inte är noll.

In-/utmatningsinstruktioner

  • IN: Läser data från en I/O-port.
  • OUT: Skriver data till en I/O-port.
  • INI / INIR: Läser data från en I/O-port till minnet och inkrementerar HL.
  • IND / INDR: Läser data från en I/O-port till minnet och dekrementerar HL.
  • OUTI / OTIR: Skriver data från minnet till en I/O-port och inkrementerar HL.
  • OUTD / OTDR: Skriver data från minnet till en I/O-port och dekrementerar HL.

Specialinstruktioner

  • NOP: No Operation - Utför ingen operation, går vidare till nästa instruktion.
  • HALT: Stoppar processorn tills ett avbrott sker.
  • DI: Disable Interrupts - Inaktiverar maskinvaruavbrott.
  • EI: Enable Interrupts - Aktiverar maskinvaruavbrott.
  • IM: Interrupt Mode - Ställer in avbrottsläge (IM 0, IM 1, IM 2).

I/O-portar

Z80-processorn har dedikerade instruktioner för att hantera in- och utmatning via I/O-portar, vilket är användbart för att kommunicera med externa enheter.

Minnessystem

Z80 kan adressera upp till 64 KB (kilobyte) av minne direkt. Den stöder även externa minnesenheter och expansioner.

Användningsområden

Z80 användes i en mängd olika datorer och inbäddade system från 1970-talet och framåt. Några av de mest kända systemen som använde Z80-processorn inkluderar Sinclair ZX Spectrum, Amstrad CPC, och många tidiga persondatorer och arkadspelautomater. Den användes också i industrin och telekommunikationssystem.

Historisk betydelse

Z80-processorn hade en stor inverkan på datorindustrin och var en viktig drivkraft för spridningen av persondatorer på 1980-talet.

Z80-processorn är en klassisk mikroprocessor som har en speciell plats i datorhistorien. Även om den inte längre används i moderna datorer, lever dess arv kvar i många aspekter av datorarkitektur och är fortfarande föremål för intresse bland retrodatorentusiaster och samlare.