EDA 45 - Digital och Datorteknik Dagens föreläsning: Assemblerprogrammering för FLEX, Extra material Ext 8 Ur innehållet: Programmerarens bild av FLEX Instruktionsuppsättning Register åtkomliga för programmeraren Datatyper Adresseringssätt Användning av rum 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, X, S, 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 X INDEX REGISTER 7 0 PROGRAM COUNTER 7 0 SP STACK POINTER 3 0 N Z V C CONDITION CODES REGISTER Adresseringssätt Inherent Omedelbar Absolut Register relativ Auto pre- increment/decrement Auto post- increment/decrement -relativ Assemblerprogrammering för FLEX 2
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, X, S, 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 3 Adresseringssätt - FLEX Inherent Omedelbar Absolut Register relativ Auto pre- increment/decrement Auto post- increment/decrement -relativ Assemblerprogrammering för FLEX 4 2
Inherent ering Operandens läge är entydigt given av instruktionen. INCA Increment register A RTS Return from subroutine PSHA Push register A 5 Omedelbar ering Operanden följer omedelbart efter operationskoden. LDAA #8 CMPA #0 Load A immediate Compare contents of A with value + Data 6 3
Absolut ering Operanden finns på den som följer omedelbart efter operationskoden. Data LDAA $0 CMPA $0 Load A from address Compare contents of A with contents of address + Adress 7 Absolut ering Flödeskontroll Operanden är i detta fall den som följer omedelbart efter operationskoden. JMP $20 Jump to address JSR $20 Call subroutine at address + Adress Adress 8 4
Register-relativ ering Operanden finns på den som anges av ett register. Oftast kan en konstant anges, denna adderas till innehållet i registret för beräkningen. X n + Data n LDAA 3,X Load A via register X 9 Komplext eringssätt som utnyttjar något register för beräkning samtidigt som innehållet i registret modifieras av instruktionen.,-x,+x,x-,x+ pre decrement pre increment post decrement post increment Auto pre/postdecrement/increment +/-X+/- 0 5
Auto pre-decrement LDAA,-X X - X (X) A A =? A = Före Efter 50 5 52 X X 22 33 Auto pre-increment LDAA,+X X + X (X) A A =? A = 33 Före Efter 50 5 52 X X 22 33 2 6
Auto post-decrement LDAA,X- (X) A X - X A =? A = 22 Före Efter 50 5 52 X X 22 33 3 Auto post-increment LDAA,X+ (X) A X + X A =? A = 22 Före Efter 50 5 52 X X 22 33 4 7
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 5 Modularisering - subrutiner Huvudprogram JSR Adr Ett stycke kod som återanvänds flera gånger. Man utför hopp till och från en subrutin Adr JSR Adr Subrutin RTS JSR Adr JSR Adr Jump to SubRoutine RTS ReTurn from Subroutine 6 8
JSR/RTS Huvudprogram Adr JSR JSR Adr Jump to SubRoutine S- S M(S) Adr Stack S JSR Adr Adr RTS RTS RTS ReTurn from Subroutine M(S) S+ S 7 Spara/Återställa registerinnehåll PSHA Push register A PSHX Push register X PULA Pull register A PULX Pull register X PSH<reg> Push Register S- S <reg> M(S) PUL<reg> Pull Register M(S) <reg> S+ S Jämför dessa instruktioner med eringssätten pre decrement och post increment. 8 9
Programräknar-relativ (-relativ) Operanden utgörs av en offset som följer omedelbart efter operationskoden. BRA Adr Branch jfr: Jump BSR Adr Branch to subroutine Adressberäkningen sker för +2. Adress = Offset + (+2) + Offset Adress Offset 9 Offsetberäkning, -relativ ering 8 30 Adress Bestäm Offset för de fall Label är Adress2 resp. Adress i vidstående figur. Lösning: Offset = Label - (+2) 3 32 33 34 35 36 5A Offset BRA Label Offset = Adress2 - (+2) = = 72 (33+2) = 3D 37 Offset = Adress - (+2) = = 8 (33+2) = E3 72 Adress2 20 0
EXECUTE BRA <offset> State nr RTN-beskrivning Styrsignaler 0 MA, T OE, LD MA, LD T. M+T+ R MR, f 3, f, g 0, LD R. 2 R OE R, LD, NF Programräknare, som här pekar på offset-byten erar minnet, placeras också i T-registret för kommande offsetberäkning Offseten (M), adderas till offsetens (T), slutligen läggs till, dvs -offseten beräknas från nästa instruktions op-kod, placeras i R Ny (från R) placeras i och EXECUTE-fasen avslutas. Operationskod: 5A, tillståndskodningar: I5A*Q5, I5A*Q6, I5A*Q7 2 Villkorligt programflöde loop A - A A=0? NEJ JA DECA BNE loop if (A=0) Z-flag ; else Z-flag 0; VILLKORSTEST: if (Z-flag=0) +offset; else ( next OP); 22
Villkorstest, EXECUTE BNE <offset> BNE Instruktion: Branch Not Equal BNE Adr RTN: If Z = 0: +Offset Flaggor: Beskrivning: Påverkas ej. Testar Z-flaggans värde. Om Z=0 utförs ett hopp till en Adr = +Offset. Offset räknas från en efter branchinstruktionen, dvs vid uträkningen av hoppen pekar på operationskoden direkt efter branchinstruktionen i minnet. Om Z= utförs inget hopp. Nästa instruktion blir i så fall den direkt efter branchinstruktionen i minnet. State nr RTN-beskrivning Styrsignaler 0 MA, T OE, LD MA, LD T. M+T+ R, + MR, f 3, f, g 0, LD R, Inc. 2 If (Z=0) : R ; OE R, LD =Z, NF. Instruktionsformat:, -rel offset Operationskod: 5E Observera att de två första tillstånden är identiska för samtliga villkorliga BRANCHinstruktioner Programräknare, som här pekar på offset-byten erar minnet, placeras också i T-registret för kommande offsetberäkning Offseten (M), adderas till offsetens (T), slutligen läggs till, dvs -offseten beräknas från nästa instruktions op-kod, placeras i R Ny (från R) placeras i ENDAST om LD aktiverats, dvs Z=0 och EXECUTE-fasen avslutas. Skillnaden i EXECUTE-fasen mellan villkorliga BRANCH-instruktioner är flaggtestet 23 Villkorstest Instruktionsuppsättningen för FLEX-processorn har ett antal villkorliga hoppinstruktioner. De kan indelas i följande tre grupper:. 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. 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 [-28,27]. Flaggor N, V och Z används här. 24 2
Enkla villkor Antag att ett tal P har testats, och flaggorna påverkats av testinstruktionen Instruktion Operation Flaggvillkor BEQ (Branch on Equal) Om P är 0 Z= BNE (Branch if Not Equal) BMI (Branch on Minus) BPL (Branch on Plus) Om P är skilt från 0 Om P är mindre än 0 Om P är större eller lika med 0 Z=0 N= N=0 25 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) BLS (Branch if Lower or Same) Om P är mindre än Q C= Om P är mindre än Q eller P är lika med Q. C= eller Z= 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 26 3
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) Instruktion Operation Flaggvillkor BLT (Branch if Less Than) Om P är mindre än Q N V = BLE (Branch if Less than or Equal) Om P är mindre än Q eller P är lika med Q N V = eller Z= BGT (Branch if Greater Than) Om P är större än Q N V =0 eller Z=0 BGE (Branch if Greater or Equal) Om P är större än Q eller P är lika med Q N V =0 27 FLEXsimulator Minne för program och data Assemblerprogrammering för FLEX 28 4
Periferienheter FLEX och omvärlden Dataväg LD MA Reg MA Adressbuss LD A Reg A LD B Reg B LD T Reg T LD X Reg X IncS S 0 C D Funkt 0 M U 2 X C in ALU U E Flaggor 0 g 2 MUX DecS LD S LD C 3 2 g g 0 Inc Reg R Reg CC LD R LD CC OE A OE B OE R OE CC OE X OE S OE Databuss LD I Reg I 30 st styrsignaler från styrenhet Flaggor Reset Styrbuss Styrenhet Processor MW MR Assemblerprogrammering för FLEX 29 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 Gräns-snitt Gränssnitt Minnessystem Periferienheter Assemblerprogrammering för FLEX 30 5
Parallell utmatning Styrbuss Logik Databuss LD Data Register OE 0 IO Interface (Ut-port) Typisk tillämpning PÅ/AV LED (Light Emitting Diode) AV PÅ Assemblerprogrammering för FLEX 3 Parallell inmatning Typisk tillämpning: Avläs PÅ/AV Styrbuss Databuss 0 5V Logik OE Data Register LD IO Interface (In-port) AV PÅ Assemblerprogrammering för FLEX 32 6
FLEX - Minnesdisposition 00 0 FD A 7 A 6 A 5 A 4 A 3 A 2 A A 0 0 Port Minne för program och data FE 0 Port2 PortEnable = A 7 A 6 A 5 A 4 A 3 A 2 A A 0 Port2Enable = A 7 A 6 A 5 A 4 A 3 A 2 A A 0 FC FD FE FF IO IO RESET Portar Start MemoryEnable = PortEnable & Port2Enable Assemblerprogrammering för FLEX 33 Port - Avkodningslogik MW A 0 A A 2 A 3 A 4 A 5 & & & FD UT FD IN A 6 A 7 MR Assemblerprogrammering för FLEX 34 7
U MINNE Port 2 - Avkodningslogik MW A 0 A A 2 A 3 A 4 A 5 & & & FE UT FE IN A 6 A 7 MR Assemblerprogrammering för FLEX 35 FLEX - Realisering D0 A0 D A D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 MW MR Logik D0 A0 D A D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 MW MR CE D0 LD D OE D2 D3 D4 D5 D6 D7 D0 LD D OE D2 D3 D4 D5 D6 D7 D0 LD D OE D2 D3 D4 D5 D6 D7 D0 LD D OE D2 D3 D4 D5 D6 D7 Adressbuss Port Port 2 Databuss Styrbuss Assemblerprogrammering för FLEX 36 8
Periferikretsar STAA $FD LDAA $FD Assemblerprogrammering för FLEX 37 7-segment NBCD 2 7-segment b 7 b 6 b 5 b 4 b 3 b 2 b b 0 b 7 b 6 b 5 b 4 b 3 b 2 b b 0 Assemblerprogrammering för FLEX 38 9
EXEMPEL Rinnande ljus Raden är en kommentar Assemblerdirektiv ORG (Origin) label symbol för Referens till symbolisk Listfilen skapas vid assembleringen Assemblerprogrammering för FLEX 39 Ytterligare Assemblerdirektiv Assemblerdirektiv EQU (equate) Assemblerdirektiv FCB (form constant byte) Assemblerprogrammering för FLEX 40 20