Ladda ner presentationen
Presentation laddar. Vänta.
1
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
2
Programmerarens bild av FLEX
Register A ACCUMULATOR A 7 B ACCUMULATOR B X INDEX REGISTER PC PROGRAM COUNTER SP STACK POINTER N Z V C 3 CONDITION CODES REGISTER 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 Adresseringssätt Inherent Omedelbar Absolut Register relativ Auto pre- increment/decrement Auto post- increment/decrement PC-relativ Assemblerprogrammering för FLEX
3
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
4
Adresseringssätt - FLEX
Inherent Omedelbar Absolut Register relativ Auto pre- increment/decrement Auto post- increment/decrement PC-relativ Assemblerprogrammering för FLEX
5
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
6
Omedelbar adressering
OP-kod Data Ökande adress PC PC+1 Operanden följer omedelbart efter operationskoden. Exempel: LDAA #8 ”Load A immediate” CMPA #10 ”Compare contents of A with value” ... Styrenhet med fast kopplad logik
7
Absolut adressering OP-kod Adress Ökande adress PC PC+1 Data Operanden finns på den adress som följer omedelbart efter operationskoden. Exempel: LDAA $10 ”Load A from address” CMPA $10 ”Compare contents of A with contents of address” ... Styrenhet med fast kopplad logik
8
Absolut adressering Flödeskontroll
OP-kod Adress Ökande adress PC PC+1 Operanden är i detta fall den adress som följer omedelbart efter operationskoden. Exempel: JMP $20 ”Jump to address” JSR $20 ”Call subroutine at address” ... Styrenhet med fast kopplad logik
9
Register-relativ adressering
OP-kod n Data Ökande adress PC PC+1 X 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. Exempel: LDAA 3,X ”Load A via register X” ... Styrenhet med fast kopplad logik
10
Auto pre/post- decrement/increment
OP-kod Ökande adress PC +/-X+/- 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 Styrenhet med fast kopplad logik
11
Auto pre-decrement Exempel: LDAA 1,-X ... X - 1→X (X)→A PC OP-kod
Ökande adress Exempel: LDAA 1,-X ... PC OP-kod X - 1→X A = ? A = 11 (X)→A 50 X 11 Före 51 X 22 Efter 52 33 Styrenhet med fast kopplad logik
12
Auto pre-increment Exempel: LDAA 1,+X ... X + 1→X (X)→A PC OP-kod
Ökande adress Exempel: LDAA 1,+X ... PC OP-kod X + 1→X A = ? A = 33 (X)→A 50 11 Före 51 X 22 Efter 52 X 33 Styrenhet med fast kopplad logik
13
Auto post-decrement Exempel: LDAA 1,X- ... (X)→A X - 1→X PC OP-kod
Ökande adress Exempel: LDAA 1,X- ... PC OP-kod (X)→A A = ? X - 1→X A = 22 50 X 11 Före 51 X 22 Efter 52 33 Styrenhet med fast kopplad logik
14
Auto post-increment Exempel: LDAA 1,X+ ... (X)→A X + 1→X PC OP-kod
Ökande adress Exempel: LDAA 1,X+ ... PC OP-kod (X)→A A = ? X + 1→X A = 22 50 11 Före 51 X 22 Efter 52 X 33 Styrenhet med fast kopplad logik
15
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
16
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 RTS ReTurn from Subroutine Styrenhet med fast kopplad logik
17
JSR/RTS Huvudprogram JSR Adr RTS JSR Adr Jump to SubRoutine S-1 S
PC M(S) Adr PC OP-kod Adr JSR RTS PC Huvudprogram Stack PC S JSR Adr RTS RTS ReTurn from Subroutine M(S) PC S+1 S Styrenhet med fast kopplad logik
18
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
19
Programräknar-relativ (PC-relativ)
OP-kod Offset Ökande adress PC PC+1 Adress Operanden utgörs av en offset som följer omedelbart efter operationskoden. Exempel: BRA Adr ”Branch” jfr: ”Jump” BSR Adr ”Branch to subroutine” ... Adressberäkningen sker för PC+2. Adress = Offset + (PC+2) Styrenhet med fast kopplad logik
20
Offsetberäkning, PC-relativ adressering
OP-kod Adress2 Adress1 BRA Label 30 18 31 32 33 34 35 36 37 72 Exempel: Bestäm ”Offset” för de fall ”Label” är ”Adress2” resp. ”Adress1” i vidstående figur. Lösning: Offset = Label - (PC+2) Offset = Adress2 - (PC+2) = = 72 – (33+2) = 3D Offset = Adress1 - (PC+2) = = 18 – (33+2) = E3 Styrenhet med fast kopplad logik
21
EXECUTE – ”BRA <offset>”
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 State nr RTN-beskrivning Styrsignaler PC→MA, PC→T OEPC, LDMA, LDT. 1 M+T+1→R MR, f3, f1, g0, LDR. 2 R→PC OER, LDPC, NF 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
22
Villkorligt programflöde
loop if (A=0) Z-flag ← 1; else Z-flag ← 0; A -1→ A ... DECA BNE loop A=0? JA VILLKORSTEST: if (Z-flag=0) PC ← PC+offset; else (PC ← next OP); NEJ Styrenhet med fast kopplad logik
23
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 State nr RTN-beskrivning Styrsignaler PC→MA, PC→T OEPC, LDMA, LDT. 1 M+T+1→R, PC+1→PC MR, f3, f1, g0, LDR, IncPC. 2 If (Z=0) : R→PC; OER, LDPC=Z’, NF. 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
24
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
25
Enkla villkor Instruktion Operation Flagg-villkor
Antag att ett tal ’P’ har testats, och flaggorna påverkats av testinstruktionen Instruktion Operation Flagg-villkor BEQ (Branch on Equal) Om ’P’ är 0 Z=1 BNE (Branch if Not Equal) Om ’P’ är skilt från 0 Z=0 BMI (Branch on Minus) Om ’P’ är mindre än 0 N=1 BPL (Branch on Plus) Om ’P’ är större eller lika med 0 N=0 Styrenhet med fast kopplad logik
26
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) Instruktion Operation Flaggvillkor BLO (Branch if LOwer) även BCS (Branch if Carry Set) Om ’P’ är mindre än ’Q’ C=1 BLS (Branch if Lower or Same) Om ’P’ är mindre än ’Q’ eller ’P’ är lika med ’Q’. C=1 eller Z=1 BHI (Branch if Higher) Om ’P’ är större än ’Q’ C=0 och Z=0 BHS (Branch if Higher or Same) även BCC (Branch if Carry Clear) Om ’P’ är större än ’Q’ eller ’P’ är lika med ’Q’. C=0 Styrenhet med fast kopplad logik
27
Villkor, tal med tecken Instruktion Operation Flaggvillkor
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) Instruktion Operation Flaggvillkor BLT (Branch if Less Than) Om ’P’ är mindre än ’Q’ NV =1 BLE (Branch if Less than or Equal) Om ’P’ är mindre än ’Q’ eller ’P’ är lika med ’Q’ NV =1 eller Z=1 BGT (Branch if Greater Than) Om ’P’ är större än ’Q’ NV =0 eller Z=0 BGE (Branch if Greater or Equal) Om ’P’ är större än ’Q’ eller ’P’ är lika med ’Q’ NV =0 Förklara här varför inte bara N används ... Styrenhet med fast kopplad logik
28
FLEX- simulator Minne för program och data
Assemblerprogrammering för FLEX
29
FLEX och omvärlden Periferienheter Dataväg Styrenhet Processor
Adressbuss Dataväg CP Reg MA LDMA CP Reg A CP Reg B CP Reg T CP Reg X CP S CP PC LDA LDB LDT LDX IncS IncPC DecS LDPC D E LDS Funkt Flaggor ALU 1 1 M U X Cin g2 1 C 2 U MUX Periferienheter C 3 1 2 CP Reg R CP Reg CC LDR LDCC g1 g0 1 1 1 1 1 OEA OEB OER 1 OECC 1 OEX OES OEPC Ñ Ñ Ñ Ñ Ñ Ñ Ñ Databuss CP Reg I LDI 30 st styrsignaler från styrenhet Flaggor Styrbuss Reset Styrenhet MW CP MR Processor Assemblerprogrammering för FLEX
30
Periferienheter Adressbuss Databuss Styrbuss Periferi-enheter
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
31
Parallell utmatning Typisk tillämpning ”PÅ/AV” ”0” ”1” IO Interface
Styrbuss Databuss ”1” ”0” Typisk tillämpning ”PÅ/AV” IO Interface (Ut-port) LD Logik Data Register OE LED (Light Emitting Diode) AV PÅ Assemblerprogrammering för FLEX
32
Parallell inmatning Typisk tillämpning: Avläs ”PÅ/AV” AV PÅ ”1” ”0” 5V
Styrbuss Databuss ”1” ”0” 5V IO Interface (In-port) OE Logik Data Register LD PÅ AV Assemblerprogrammering för FLEX
33
FLEX - Minnesdisposition
A7 A6 A5 A4 A3 A2 A1 A0 00 01 FD 1 1 1 1 1 1 1 Port1 FE 1 1 1 1 1 1 1 Port2 Minne för program och data Port1Enable = A7A6A5A4A3A2A1’A0 Port2Enable = A7A6A5A4A3A2A1A0’ FC MemoryEnable = Port1Enable’ & Port2Enable’ FD IO Portar FE IO FF RESET Startadress Assemblerprogrammering för FLEX
34
Port 1 - Avkodningslogik
MW A0 & A1 1 & FDUT A2 ”1” A3 A4 & FDIN A5 A6 ”1” A7 MR Assemblerprogrammering för FLEX
35
Port 2 - Avkodningslogik
MW A0 & 1 A1 & FEUT A2 ”1” A3 A4 & FEIN A5 A6 ”1” A7 MR Assemblerprogrammering för FLEX
36
FLEX - Realisering Port 1 Port 2 Adressbuss Databuss Styrbuss
MW MR D A0 D A1 D A2 D A3 D A4 D A5 D A6 D A7 MW MR CE D0 LD D1 OE D2 D3 D4 D5 D6 D7 Logik CPU MINNE Port 1 Port 2 Adressbuss Databuss Styrbuss Assemblerprogrammering för FLEX
37
Periferikretsar STAA $FD LDAA $FD Assemblerprogrammering för FLEX
38
7-segment NBCD → 2×7-segment b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2
Assemblerprogrammering för FLEX
39
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
40
Ytterligare Assemblerdirektiv
Assemblerdirektiv ”EQU” – (equate) Assemblerdirektiv ”FCB” – (form constant byte) Assemblerprogrammering för FLEX
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.