400 likes | 527 Views
EDA 451 - Digital och Datorteknik Dagens föreläsning: Assemblerprogrammering för FLEX, Extra material ”Ext 18” Ur innehållet: Programmerarens bild av FLEX Instruktionsuppsättning Register åtkomliga för programmeraren Datatyper Adresseringssätt Användning av adressrum
E N D
EDA 451 - Digital och Datorteknik • Dagens föreläsning: • Assemblerprogrammering för FLEX, • Extra material ”Ext 18” • Ur innehållet: • Programmerarens bild av FLEX • Instruktionsuppsättning • Register åtkomliga för programmeraren • Datatyper • Adresseringssätt • Användning av adressrum • Minne för program och data • In- och ut- matning Assemblerprogrammering för FLEX
Programmerarens bild av FLEX • Instruktioner • Load/Store • LDAA, LDAB, LDX, LDS, LEAX, LEAS • STAA, STAB, STX, STS • Data movement • TFR regS,regD • Program (Flow) control • JMP, JSR, BRA, BSR, B(condition) • Integer arithmetic/test • ADDA, ADDB, ADCA, ADCB, SUBA, SUBB, SBCA, SBCB, • CLRA, CLRB, CLR, NEGA, NEGB, NEG, • DECA, DECB, DEX, DEC, INCA, INCB, INX, INC, • CMPA, CMPB, CPX, CPS, BITA, BITB • Logical operations • ANDA, ANDB, ORAA, ORAB, ANDCC, ORCC, EORA, EORB, COMA, COMB, COM • Shift/rotate • ASLA, ASLB, ASL, ROLA, ROLB, ROL • Stack operations • PSHA, PSHB, PSHC, PSHX, PULA, PULB, PULC, PULX Register 7 0 A ACCUMULATOR A 7 0 B ACCUMULATOR B 7 0 • Adresseringssätt • Inherent • Omedelbar • Absolut • Register relativ • Auto pre- increment/decrement • Auto post- increment/decrement • PC-relativ X INDEX REGISTER 7 0 PC PROGRAM COUNTER 7 0 SP STACK POINTER 3 0 N Z V C CONDITION CODES REGISTER Assemblerprogrammering för FLEX
Operationer - FLEX • Load/Store • LDAA, LDAB, LDX, LDS, LEAX, LEAS • STAA, STAB, STX, STS • Data movement • TFR regS,regD • Program (Flow) control • JMP, JSR, BRA, BSR, B(condition) • Integer arithmetic/test • ADDA, ADDB, ADCA, ADCB, SUBA, SUBB, SBCA, SBCB, • CLRA, CLRB, CLR, NEGA, NEGB, NEG, • DECA, DECB, DEX, DEC, INCA, INCB, INX, INC, • CMPA, CMPB, CPX, CPS, BITA, BITB • Logical operations • ANDA, ANDB, ORAA, ORAB, ANDCC, ORCC, EORA, EORB, COMA, COMB, COM • Shift/rotate • ASLA, ASLB, ASL, ROLA, ROLB, ROL • Stack operations • PSHA, PSHB, PSHC, PSHX, PULA, PULB, PULC, PULX Assemblerprogrammering för FLEX
Adresseringssätt - FLEX • Inherent • Omedelbar • Absolut • Register relativ • Auto pre- increment/decrement • Auto post- increment/decrement • PC-relativ Assemblerprogrammering för FLEX
Inherent adressering Ökande adress Operandens läge är entydigt given av instruktionen. Exempel: INCA ”Increment register A” RTS ”Return from subroutine” PSHA ”Push register A” ... PC OP-kod Styrenhet med fast kopplad logik
Omedelbar adressering Ökande adress Operanden följer omedelbart efter operationskoden. Exempel: LDAA #8 ”Load A immediate” CMPA #10 ”Compare contents of A with value” ... OP-kod PC Data PC+1 Styrenhet med fast kopplad logik
Absolut adressering Ökande adress Operanden finns på den adress som följer omedelbart efter operationskoden. Data Exempel: LDAA $10 ”Load A from address” CMPA $10 ”Compare contents of A with contents of address” ... OP-kod PC Adress PC+1 Styrenhet med fast kopplad logik
Absolut adressering Flödeskontroll Ökande adress Operanden är i detta fall den adress som följer omedelbart efter operationskoden. OP-kod PC Adress PC+1 Exempel: JMP $20 ”Jump to address” JSR $20 ”Call subroutine at address” ... OP-kod Adress Styrenhet med fast kopplad logik
Register-relativ adressering Ökande adress Operanden finns på den adress som anges av ett register. Oftast kan en konstant anges, denna adderas till innehållet i registret för adressberäkningen. X n Data OP-kod PC n PC+1 Exempel: LDAA 3,X ”Load A via register X” ... Styrenhet med fast kopplad logik
Auto pre/post- decrement/increment Ökande adress Komplext adresseringssätt som utnyttjar något register för adressberäkning samtidigt som innehållet i registret modifieras av instruktionen. 1,-X pre decrement 1,+X pre increment 1,X- post decrement 1,X+ post increment OP-kod PC +/-X+/- Styrenhet med fast kopplad logik
Auto pre-decrement Ökande adress Exempel: LDAA 1,-X ... PC OP-kod X - 1→X A = ? A = 11 (X)→A 50 11 X Före X 22 51 Efter 52 33 Styrenhet med fast kopplad logik
Auto pre-increment Ökande adress Exempel: LDAA 1,+X ... PC OP-kod X + 1→X A = ? A = 33 (X)→A 50 11 Före X 22 51 Efter 52 X 33 Styrenhet med fast kopplad logik
Auto post-decrement Ökande adress Exempel: LDAA 1,X- ... PC OP-kod (X)→A A = ? X - 1→X A = 22 50 11 X Före X 22 51 Efter 52 33 Styrenhet med fast kopplad logik
Auto post-increment Ökande adress Exempel: LDAA 1,X+ ... PC OP-kod (X)→A A = ? X + 1→X A = 22 50 11 Före X 22 51 Efter 52 X 33 Styrenhet med fast kopplad logik
Stack, stackpekare och stackoperationer Stack: En del av minnet som vi utnyttjar för tillfällig undanlagring. Stackpekare: Speciellt register för stackoperationer. Användning av minnet Programkod Data Register S, Stackpekare Stack Styrenhet med fast kopplad logik
Modularisering - subrutiner Huvudprogram Ett stycke kod som ”återanvänds” flera gånger. Man utför hopp ”till” och ”från” en subrutin JSR Adr Adr Subrutin JSR Adr RTS JSR Adr JSR Adr Jump to SubRoutine RTSReTurn from Subroutine Styrenhet med fast kopplad logik
JSR/RTS • JSR Adr Jump to SubRoutine • S-1 S • PC M(S) • Adr PC Huvudprogram OP-kod JSR PC Adr Stack PC S JSR Adr Adr OP-kod RTS RTS ReTurn from Subroutine M(S) PC S+1 S OP-kod RTS Styrenhet med fast kopplad logik
Spara/Återställa registerinnehåll • PSH<reg> Push Register • S-1 S • <reg> M(S) Exempel: PSHA ”Push register A” PSHX ”Push register X” PULA ”Pull register A” PULX ”Pull register X” ... • PUL<reg> Pull Register • M(S) <reg> • S+1 S Jämför dessa instruktioner med adresseringssätten ”pre decrement” och post increment”. Styrenhet med fast kopplad logik
Programräknar-relativ (PC-relativ) Ökande adress Operanden utgörs av en offset som följer omedelbart efter operationskoden. OP-kod PC Offset PC+1 Exempel: BRA Adr ”Branch” jfr: ”Jump” BSR Adr ”Branch to subroutine” ... Offset Adressberäkningen sker för PC+2. Adress = Offset + (PC+2) OP-kod Adress Styrenhet med fast kopplad logik
Offsetberäkning, PC-relativ adressering 18 OP-kod Adress1 30 31 Exempel: Bestäm ”Offset” för de fall ”Label” är ”Adress2” resp. ”Adress1” i vidstående figur. 32 33 5A BRA Label 34 Offset Lösning: Offset = Label - (PC+2) 35 36 Offset = Adress2 - (PC+2) = = 72 – (33+2) = 3D 37 Offset = Adress1 - (PC+2) = = 18 – (33+2) = E3 72 OP-kod Adress2 Styrenhet med fast kopplad logik
Programräknare , som här pekar på offset-byten adresserar minnet, placeras också i T-registret för kommande offsetberäkning EXECUTE – ”BRA <offset>” Offseten (M), adderas till offsetens adress(T), slutligen läggs 1 till, dvs PC-offseten beräknas från nästa instruktions op-kod, placeras i R Ny adress (från R) placeras i PC och EXECUTE-fasen avslutas. Operationskod: 5A, tillståndskodningar: I5A*Q5, I5A*Q6, I5A*Q7 Styrenhet med fast kopplad logik
Villkorligt programflöde loop if (A=0) Z-flag ← 1; else Z-flag ← 0; A -1→ A ... DECA BNE loop ... JA A=0? VILLKORSTEST: if (Z-flag=0) PC ← PC+offset; else (PC ← next OP); NEJ Styrenhet med fast kopplad logik
Villkorstest, EXECUTE – ”BNE <offset>” BNE Branch Not Equal Instruktion: BNE Adr RTN: If Z = 0: PC+Offset PC Flaggor: Påverkas ej.Beskrivning: Testar Z-flaggans värde. Om Z=0 utförs ett hopp till adressen Adr = PC+Offset. Offset räknas från adressen efter branchinstruktionen, dvs vid uträkningen av hoppadressen pekar PC på operationskoden direkt efter branchinstruktionen i minnet. Om Z=1 utförs inget hopp. Nästa instruktion blir i så fall den direkt efter branchinstruktionen i minnet. Instruktionsformat: OP-kod, PC-rel offset Operationskod: 5E Observera att de två första tillstånden är identiska för samtliga villkorliga BRANCH-instruktioner Programräknare, som här pekar på offset-byten adresserar minnet, placeras också i T-registret för kommande offsetberäkning Offseten (M), adderas till offsetens adress(T), slutligen läggs 1 till, dvs PC-offseten beräknas från nästa instruktions op-kod, placeras i R Ny adress (från R) placeras i PC ENDAST om LDPC aktiverats, dvs Z=0 och EXECUTE-fasen avslutas. Skillnaden i EXECUTE-fasen mellan villkorliga BRANCH-instruktioner är flaggtestet Styrenhet med fast kopplad logik
Villkorstest • Instruktionsuppsättningen för FLEX-processorn har ett antal • villkorliga hoppinstruktioner. De kan indelas i följande tre grupper:1. Enkla villkor. • Test av ett 8-bitars tal. Vid de enkla villkorliga hoppen testas innehållet i en av flaggvipporna N, Z, V eller C och hoppet utförs om villkoret är uppfyllt, dvs den aktuella flaggvippans värde, är 0 resp 1. • 2. Villkor för tal utan inbyggt tecken. • Jämförelse mellan två 8-bitars tal som tillhör intervallet [0, 255]. • Flaggor C och Z används här. • 3. Villkor för tal med inbyggt tecken. (2-komplementform) • Jämförelse mellan två 8-bitars tal som tillhör intervallet [-128,127]. • Flaggor N, V och Z används här. Styrenhet med fast kopplad logik
Enkla villkor Antag att ett tal ’P’ har testats, och flaggorna påverkats av testinstruktionen Styrenhet med fast kopplad logik
Villkor, tal utan tecken Vi tolkar ’P’ och ’Q’ som tal utan tecken. Antag att en jämförelse utförts enligt ’P’ – ’Q’ → (Z,C), (flaggorna Z och C påverkats av instruktionen) Styrenhet med fast kopplad logik
Villkor, tal med tecken Vi tolkar’P’ och ’Q’ som tal med tecken. Antag att en jämförelse utförts enligt ’P’ – ’Q’ → (N,Z,V), (flaggorna påverkats av instruktionen) Styrenhet med fast kopplad logik
FLEX- simulator Minne för program och data Assemblerprogrammering för FLEX
FLEX och omvärlden Adressbuss Dataväg CP Reg MA LDMA CP CP CP CP CP CP Reg A Reg T Reg X Reg B S PC LDB LDT LDX LDA IncS IncPC LDPC DecS D E LDS Funkt Flaggor 0 0 ALU MUX 1 1 0 1 Cin g2 C 2 U MUX Periferienheter C 3 1 2 CP CP Reg R Reg CC LDR LDCC g1 g0 1 1 1 1 1 1 1 OEA OEB OER OECC OEX OES OEPC Ñ Ñ Ñ Ñ Ñ Ñ Ñ Databuss CP Reg I LDI 30 st styrsignaler från styrenhet • Flaggor Styrbuss Reset MW Styrenhet CP MR Processor Assemblerprogrammering för FLEX
Periferienheter Enhet som ansluts till centralenhetens buss-system kallas ”periferienhet”. För varje periferienhet finns ett gränssnitt för in- och ut-matning (IO-interface) Adressbuss Databuss Styrbuss Periferi-enheter Minnes-system Gräns-snitt Gränssnitt Assemblerprogrammering för FLEX
Parallell utmatning Databuss Styrbuss ”0” ”1” Typisk tillämpning ”PÅ/AV” IO Interface (Ut-port) LD Logik Data Register OE LED (Light Emitting Diode) AV PÅ Assemblerprogrammering för FLEX
Parallell inmatning Typisk tillämpning: Avläs ”PÅ/AV” Databuss Styrbuss 5V ”1” ”0” IO Interface (In-port) OE Logik Data Register LD PÅ AV Assemblerprogrammering för FLEX
FLEX - Minnesdisposition A7 A6 A5 A4 A3 A2 A1 A0 00 01 FD 1 1 1 1 1 1 0 1 Port1 FE 1 1 1 1 1 1 1 0 Port2 Minne för program och data Port1Enable = A7A6A5A4A3A2A1’A0 Port2Enable = A7A6A5A4A3A2A1A0’ FC MemoryEnable = Port1Enable’ & Port2Enable’ Portar FD IO FE IO Startadress FF RESET Assemblerprogrammering för FLEX
Port 1 - Avkodningslogik MW & A0 A1 1 & FDUT A2 ”1” A3 A4 & FDIN A5 A6 ”1” A7 MR Assemblerprogrammering för FLEX
Port 2 - Avkodningslogik MW & A0 1 A1 & FEUT A2 ”1” A3 A4 & FEIN A5 A6 ”1” A7 MR Assemblerprogrammering för FLEX
FLEX - Realisering D0 A0 D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 MW MR Logik D0 LD D1 OE D2 D3 D4 D5 D6 D7 D0 LD D1 OE D2 D3 D4 D5 D6 D7 D0 LD D1 OE D2 D3 D4 D5 D6 D7 D0 LD D1 OE D2 D3 D4 D5 D6 D7 CPU MINNE D0 A0 D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 MW MR CE Port 2 Port 1 Adressbuss Databuss Styrbuss Assemblerprogrammering för FLEX
Periferikretsar STAA $FD LDAA $FD Assemblerprogrammering för FLEX
7-segment NBCD → 2×7-segment b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0 Assemblerprogrammering för FLEX
EXEMPEL – ”Rinnande ljus” Assemblerdirektiv ”ORG” – (Origin) Raden är en kommentar ”label” symbol för adress Listfilen skapas vid assembleringen Referens till symbolisk adress Assemblerprogrammering för FLEX
Ytterligare Assemblerdirektiv Assemblerdirektiv ”EQU” – (equate) Assemblerdirektiv ”FCB” – (form constant byte) Assemblerprogrammering för FLEX