Digital- och datorteknik Föreläsning #15 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola
Dataväg med pekarregister och stackpekare: I vår sjunde, och slutliga, version av datavägen har vi fått ytterligare tre pekarregister: X, Y och SP. Register X och Y används generellt till att referera till datastrukturer i primärminnet, t ex listor, tabeller eller köer. Stackpekaren, SP, används som referens till en datastruktur, kallad stacken, där temporära variabler och programflödesadresser lagras.
OE X, OE Y och OE SP väljer om innehållet i respektive register skall läggas ut på bussen. FLIS-processorn LD X, LD Y och LD SP väljer om respektive register skall uppdateras eller ej.
Operationer på stacken sker så ofta att man har speciella styrsignaler för att ändra värdet på SP. FLIS-processorn INC SP och DEC SP anger om värdet i SP skall ökas resp. minskas med 1.
g 13 och g 12 anger vilket av pekarregistren X, Y, SP, eller PC som adresserar minnet när g 14 = 0. FLIS-processorn g 14 anger om minnet skall adresseras via TA (g 14 =1) eller via något av de andra pekarregistren (g 14 = 0).
Värdet 0 behövs så ofta i register T att man har en speciell styrsignal CLR T för att nollställa registret. FLIS-processorn Värdet i T adderas alltid till värdet i det pekarregister (X, Y, SP eller PC) som valts med g 13 och g 12.
Programmerarens modell av datorn: Operationer på datavägen ges med hjälp av ett maskinspråk, vilket är en uppsättning maskininstruktioner (binära kodord) som är avsedda att avkodas av datorn. Den, för människan, läsbara representationen av ett maskinspråk kallas assemblerspråk. För att reducera mängden detaljer, och därmed också reducera risken för att införa fel, kan den som programmerar datorn med hjälp av maskinspråk bara direkt referera till en delmängd av datavägens register.
Var lagrar vi instruktionerna? Sett från programmerarens perspektiv: Ett datorprogram består av sekvenser av maskininstruktioner. Maskininstruktionerna lagras i primärminnet, i enlighet med Turings/von Neumanns det lagrade programmets princip. Sett från datavägens perspektiv: Till varje operationskod i en maskininstruktion hör en sekvens av RTN-operationer (styrsignaler). RTN-operationerna lagras i den automatiska styrenheten, och utgör för programmeraren en icke-synlig och icke-modifierbar del av datorns hårdvara.
Den automatiska styrenhetens tre faser: Återställningsfas (RESET): Adressen till programmets första maskininstruktion hämtas från datorns resetvektor (minnescellen på adress FF 16 ) och lagras i PC. Hämtfas (FETCH): En operationskod hämtas (från den minnescell vars adress ligger i PC) och lagras i register I. Utförandefas (EXECUTE): Innehållet i register I (en operationskod) avkodas och den till operationskoden tillhörande sekvensen av RTNoperationer genomlöps. Om styrenheten skall fungera som tänkt måste minnet alltså innehålla 1. adressen till första maskininstruktion i minnescellen på adress FF 16 2. en maskininstruktion i varje minnescell vars adress kan komma att lagras i PC
Den automatiska styrenhetens tre faser: Sekvensnätet som realiserar styrenhetens tre faser har följande tillståndsgraf: RESET Q0 Q1 Q2 Q3 Q4 Q5 Q15 Tillstånd Q 0, Q 1 och Q 2 motsvarar RESET-fasen Tillstånd Q 3 motsvarar FETCH-fasen Tillstånd Q 4 Q 15 reserveras för de sekvenser av RTN-operationer som utförs i EXECUTE-fasen för aktuell maskininstruktion
Den automatiska styrenhetens tre faser: Sekvensnätet som realiserar styrenhetens tre faser har följande tillståndsgraf: Insignal RESET återställer styrenheten. RESET Q0 Q1 Q2 Q3 Q4 Q5 Q15 Det sista tillståndet i en sekvens måste aktivera insignal för att ny instruktion skall hämtas. Tillstånd Q 0, Q 1 och Q 2 motsvarar RESET-fasen Tillstånd Q 3 motsvarar FETCH-fasen Tillstånd Q 4 Q 15 reserveras för de sekvenser av RTN-operationer som utförs i EXECUTE-fasen för aktuell maskininstruktion Varje operationskod motsvarar en sekvens med en viss längd.
Hur genereras styrsignalerna (RTN-operationerna)? Styrsignalerna till datavägen genereras av ett kombinatoriskt nät som har följande insignaler: Tillståndssignalerna i sekvensnätet Innehållet i register I (= nuvarande maskininstruktionens operationskod) Datavägens flaggbitar
CP LD I FLIS-processorn Hur genereras styrsignalerna (RTN-operationerna)? Insignalerna till styrenhetens kombinatoriskt nät genererar i sin tur, via olika avkodare, ett antal interna generatorsignaler. F 8.13 A I b0 b1 b2 b3 b4 b5 b6 b7 I0 I1 I2 I251 I252 I253 I254 I255 I3 I4 Generatorsignalerna kombineras via AND/OR-nät så att en viss styrsignal aktiveras för en viss instruktion I x vid ett visst tillstånd Q y. Styrsignaler kan även aktiveras enbart för en viss kombination av flaggbitar (vid villkorliga hoppinstruktioner). Q m I k & Styrsignal p B Q n I l & AND
Adresseringsmetoder FLIS-processorn En maskininstruktions adresseringmetod ges av instruktionens operationskod, och uttrycker läge ( source & destination ) eller värde för instruktionens operander. Adresseringmetoden påverkar därför # bytes som behövs för att lagra maskininstruktionen i minnet längden (# klockcykler) på den sekvens av tillstånd som maskininstruktionen utnyttjar i styrenhetens EXECUTE-fas
Se sidan 11 i Instruktionslista för FLISP 00 2 10 3 20 5 30 3 40 3 50 3 60 3 70 3 80 3 90 2 A0 3 B0 3 C0 3 D0 3 NOP PSHA BSR STX STX STX STX STX STX LDX LDX LDX LDX LDX 01 4 11 3 21 4 31 3 41 3 51 3 61 3 71 3 81 3 91 2 A1 3 B1 3 C1 3 D1 3 ANDCC PSHX BRA STY STY STY STY STY STY LDY LDY LDY LDY LDY 02 4 ORCC 12 3 PSHY 03 13 3 PSHCC 04 14 3 PULA 05 3 CLRA 06 3 NEGA 07 3 INCA 08 3 DECA 09 2 T 0A 3 COMA 0B 3 LSLA 0C 3 LSRA 0D 3 ROLA 0E 3 RORA 0F 3 ASRA 15 3 PULX 16 3 PULY 17 3 PULCC 18 2 TFR A,C 19 2 TFR C,A 1A 2 TFR X,Y 1B 2 TFR Y,X 1C 2 TFR X,S 1D 2 TFR S,X 1E 2 TFR Y,S 1F 2 TFR S,Y 22 4 BMI 23 4 BPL 24 4 BEQ 25 4 BNE 26 4 BVS 27 4 BVC 28 4 BCS 29 4 BCC 2A 4 BHI 2B 4 BLS 2C 4 BGT 2D 4 BGE 2E 4 BLE 2F 4 BLT 32 3 STSP 33 2 JMP 34 4 JSR 35 3 CLR 36 4 NEG 37 4 INC 38 4 DEC 39 3 TST 3A 4 COM 3B 4 LSL 3C 4 LSR 3D 4 ROL 3E 4 ROR 3F 4 ASR 42 3 STSP 43 2 RTS 44 6 RTI 45 3 CLR 46 4 NEG 47 4 INC 48 4 DEC 49 3 TST 4A 4 COM 4B 4 LSL 4C 4 LSR 4D 4 ROL 4E 4 ROR 4F 4 ASR 52 3 STSP 53 4 JMP 54 5 JSR 55 3 CLR 56 4 NEG 57 4 INC 58 4 DEC 59 3 TST 5A 4 COM 5B 4 LSL 5C 4 LSR 5D 4 ROL 5E 4 ROR 5F 4 ASR 62 3 STSP 63 4 JMP 64 5 JSR 65 3 CLR 66 4 NEG 67 4 INC 68 4 DEC 69 3 TST 6A 4 COM 6B 4 LSL 6C 4 LSR 6D 4 ROL 6E 4 ROR 6F 4 ASR 72 3 STSP 73 4 JMP 74 5 JSR 75 3 CLR 76 4 NEG 77 4 INC 78 4 DEC 79 3 TST 7A 4 COM 7B 4 LSL 7C 4 LSR 7D 4 ROL 7E 4 ROR 7F 4 ASR 82 3 STSP 83 4 JMP 84 5 JSR 85 3 CLR 86 4 NEG 87 4 INC 88 4 DEC 89 3 TST 8A 4 COM 8B 4 LSL 8C 4 LSR 8D 4 ROL 8E 4 ROR 8F 4 ASR 92 2 LDSP 93 4 SBCA 94 4 SUBA 95 4 ADCA 96 4 ADDA 97 3 CMPA 98 3 BITA 99 4 ANDA 9A 4 ORA 9B 4 EORA 9C 3 CMPX 9D 3 CMPY 9E 3 CMPSP A2 3 LDSP A3 5 SBCA A4 5 SUBA A5 5 ADCA A6 5 ADDA A7 4 CMPA A8 4 BITA A9 5 ANDA AA 5 ORA AB 5 EORA AC 4 CMPX AD 4 CMPY AE 4 CMPSP B2 3 LDSP B3 5 SBCA B4 5 SUBA B5 5 ADCA B6 5 ADDA B7 4 CMPA B8 4 BITA B9 5 ANDA BA 5 ORA BB 5 EORA BC 4 CMPX BD 4 CMPY BE 4 LEASP C2 3 LDSP C3 5 SBCA C4 5 SUBA D2 3 LDSP D3 5 SBCA D4 5 SUBA E0 F0 2 E1 3 E2 3 E3 3 E4 3 F1 3 F2 3 F3 3 F4 3 C5 x D5 5 E5 4 F5 4 ADCA ADCA x+ 1 x+ 1 C6 5 D6 5 E6 4 F6 4 ADDA ADDA x- 1 x- 1 C7 4 CMPA C8 4 BITA C9 5 ANDA CA 5 ORA CB 5 EORA CC 4 LEAX CD 4 LEAY CE 4 LEASP D7 4 CMPA D8 4 BITA D9 5 ANDA DA 5 ORA DB 5 EORA DC 4 LEAX DD 4 LEAY DE 4 LEASP E7 4 +x 1 E8 4 -x 1 E9 3 EA 3 EB 4 y+ 1 EC 4 y- 1 ED 4 +y 1 EE 4 -y 1 9F 4 AF 4 BF 4 CF 4 DF EF FF EXG A,C EXG X,Y EXG X,S EXG Y,S F7 4 +x 1 F8 4 -x 1 F9 3 FA 3 FB 4 y+ 1 FC 4 y- 1 FD 4 +y 1 FE 4 -y 1
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) Inherent Information om operandens nya värde anges av själva operationskoden. T ex: CLA 0 A INCA Immediate A + 1 A Operandens värde anges av instruktionens operandinfo. T ex: #$FF FF 16 A
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) Absolute (kallas ibland direct ) Operandens, eller hoppdestinationens, läge i primärminnet (den s k effektivadressen, EA) anges av instruktionens operandinfo. T ex: $FF M(FF 16 ) A Indirect JMP $58 58 16 PC I denna adresseringmod (som dock ej finns på FLISP) anger operandinfo en adress i primärminnet där effektivadressen kan hämtas.
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) PC relative EA utgörs av PC-registrets nuvarande värde plus en offset (i 2-komplementform). Värdet på offset anges av operandinfo. T ex: BRA L1 Egentligen lyder instruktionen: BRA offset där offset = { EA för L1 } { värde i register PC } Genom att ange hoppdestinationen relativt PC-registret kan programkoden placeras på godtycklig plats i minnet, s k positionsoberoende kod.
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) Register indirect EA utgörs av en basadress plus en eventuell offset (i 2- komplementform). Varifrån basadress och offset hämtas anges av instruktionens operationskod och operandinfo. Ett av registren X, Y och SP måste ingå i beräkningen av EA. Dessutom kan en konstant (för X, Y och SP) eller innehållet i register A (för X och Y) ingå.
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) Register indirect (forts.) Ett av registren X, Y och SP måste ingå i beräkningen av EA. Dessutom kan en konstant (för X, Y och SP) eller innehållet i register A (för X och Y) ingå. Exempel: 2,X LDSP A,Y EA = { värde i register X } + 2 ; A M(EA) EA = { värde i register Y } + { värde i register A } ; M(EA) SP LEASP -8,SP EA = { värde i register SP } 8 ; EA SP JMP 0,X EA = { värde i register X } + 0 ; EA PC
Adresseringsmetoder (se Instruktionslista för FLISP sid. 5-8) Register indirect (forts.) Observera att såväl ett register som en konstant kan utgöra basadress. Exempel: $80,X basadress = { konstanten 80 16 } ; offset = { värde i register X } LEAX A,Y basadress = { värde i register A } ; offset = { värde i register Y } LEASP -8,SP basadress = { värde i register SP } ; offset = { konstanten -8 }