210 likes | 379 Views
Tutorium Tech II. Daniel Betz Wintersemester 2011/12. Insgesamt 16 Register von je 16 Bit (=WORD) Breite „Untere“ 8 Register auch als 2 Register mit je 8 Bit (=BYTE) ansprechbar Alle Register sind Bit-adressierbar. Register C166-Familie.
E N D
Tutorium Tech II Daniel BetzWintersemester 2011/12
Insgesamt 16 Register von je 16 Bit (=WORD) Breite • „Untere“ 8 Register auch als 2 Register mit je 8 Bit (=BYTE) ansprechbar • Alle Register sind Bit-adressierbar Register C166-Familie Daniel Betz • daniel.betz@daniel-betz.com
Speichert (u.a.) zusätzliche Ergebnis-Informationen zu ALU-Operationen • C: Übertrag bei Addition und Subtraktion • V: Überlauf der Signed-Darstellung • N: Negatives Ergebnis • Z: Null-Ergebnis Processor Status Word Daniel Betz • daniel.betz@daniel-betz.com
Binäre Operationen • „Überdeckung“ spart Speicher • Erster Operand wird mit Ergebnis überschrieben • Außerdem: Explizite Angabe von 3 Operanden • Eher unwichtig • Unäre Operationen • z.B. Addition auf Akkumulator • Auch nicht so wichtig Befehle Daniel Betz • daniel.betz@daniel-betz.com
Direktoperand: Wert steht direkt im Code • Markiert durch Raute # • Auch für EQU-Konstanten • Register-Adressierung: Register-Zugriffe • Markiert durch Registername, z.B. R1 oder RH2 • Direktadressierung: Variablen-Zugriffe • Für z.B. mit DW oder DB definierte Variablen • Unterstützt „Pointer-Arithmetik“ Adressierung Daniel Betz • daniel.betz@daniel-betz.com
Indirekte Adressierung: Pointer • Für Variablen • Mit der Raute wird statt dem Wert die Adresse verwendet: #Variable • Mit eckigen Klammern wird die Adresse „aufgelöst“: [R0] • Pointer-Arithmetik: Byte-Adressen • Inkrement/Dekrement ähnlich C: [R0+], [R0-], [+R0], [-R0] • Aber Achtung: Sprung von Zielregister abhängig – Byte (1) oder Word (2) • Expliziter Sprung: [R0+#2], [R0-#3] • Explizite Sprünge immer Byte-weise Adressierung Daniel Betz • daniel.betz@daniel-betz.com
MOV: Daten kopieren • PUSH/POP: Register(!) auf Stack legen und von Stack laden • JMP: Springen zu Label • cc_UC: Unbedingt • cc_Z/cc_NZ: Wenn PSW.Z 1/0 • cc_V/cc_NV: Wenn PSW.V 1/0 • cc_N/cc_NN: Wenn PSW.N 1/0 • cc_C/cc_NC: Wenn PSW.C 1/0 • cc_EQ/cc_NE: Wenn gleich/ungleich (nach CMP) • … und viele andere lustige Bedingungen Befehle Daniel Betz • daniel.betz@daniel-betz.com
CMP: Vergleichen • CALL: Unterprogramm aufrufen • Funktioniert im Prinzip wie JMP • RET: Aus Unterprogramm zurückspringen • ADD/ADDC: Addition ohne/mit Carry-Bit • SUB/SUBC: Subtraktion ohne/mit Carry-Bit • AND/OR/XOR: Bitweise Logik • MOV, ADD, ADDC, SUB, SUBC und CMP können durch Anhängen von B (z.B. MOVB oder SUBCB) auch erzwungen Byte-weise arbeiten Befehle Daniel Betz • daniel.betz@daniel-betz.com
EQU: Konstanten, wie #define • Alle Vorkommnisse der Konstante werden beim Übersetzen durch den eigentlichen Wert ersetzt • DB: Erstellt Byte-Variable mit Wert • DW: Erstellt Word-Variable mit Wert • DS: Erstellt Variable mit angegebener Größe ohne Wert Direktiven Daniel Betz • daniel.betz@daniel-betz.com
Aufgaben VHDL, aus Klausuren Daniel Betz • daniel.betz@daniel-betz.com
_negiertes_Signal • Gruppe • Group • 4_gewinnt • mit_Mühe VHDL-BezeichnerSS08 Daniel Betz • daniel.betz@daniel-betz.com
Aufgabe: • 32 Bit breites Register • Schieben bei steigender Taktflanke • Laden von D nach Q bei Lade = 1 • Hinweise: • Schieberichtung ist nach „links“, also von Q(0) in Q(1) usw • SerIn ist das neue Q(0) • & ist der Konkatenations-Operator Shifter Takt SerIn Q(31..0) Lade D(31..0) SchieberegisterSS08 Daniel Betz • daniel.betz@daniel-betz.com
Gegeben: Schieberegister von eben • Aufgabe: Linear rückgekoppeltes Schieberegister • XOR-Modell schreiben • Skizze der Anordnung • VHDL-Modell • Hinweise: • SerIn = (Q(31) XOR Q(23)) XOR Q(11) • Ausgabe ist nur das Bit Q(31) LSFR Takt Q31 Lade D(31..0) Schieber. mit RückkopplungSS08 Daniel Betz • daniel.betz@daniel-betz.com
Aufgabe: VHDL-Strukturmodell • Skizze • Modell • Gegeben: Folgende Bausteine • entity nicht isport(an : IN std_logic;yn :OUTstd_logic);end; • entityund3 isport(au, bu, cu: IN std_logic;yu:OUTstd_logic);end; • entityoder4 isport(ao, bo, co, do : IN std_logic;yo:OUTstd_logic);end; Strukturelles VHDLWS08/09 Daniel Betz • daniel.betz@daniel-betz.com
Aufgaben Assembler, aus Klausuren Daniel Betz • daniel.betz@daniel-betz.com
Der C166 führt folgendes Programm aus:MOV R1,#0xCAFFADDR1,#13569 • Welchen Wert haben die Flags (C, V, N, Z) nach der Ausführung und warum? Flags nach AdditionSS06 Daniel Betz • daniel.betz@daniel-betz.com
Ein 32-Bit-Prozessor kann seine Byte Order zwischen Little Endian und Big Endian umstellen • Die Zahl -123.456.789 wird an der Adresse 0x1000 gespeichert • Gefragt: Das Byte an Adresse 0x1002 für beide Anordnungen EndiannessWS06/07 Daniel Betz • daniel.betz@daniel-betz.com
Der C166 führt folgendes Programm aus:MOVR1,#50000ADDR1,#0x3CB0 • Welchen Wert haben die Flags (C, V, N, Z) nach der Ausführung und warum? Flags nach AdditionWS06/07 Daniel Betz • daniel.betz@daniel-betz.com
Gegeben ist folgender ASM-Code für den C166:INDEX EQU4V1 DW9, 99, 10, 13, 5V2 DW0xbebe, 0xadeMOVR0, #INDEXMOVR1,#V2 + 2 ;?1MOVR2,[R0 + #V1] ;?2MOVR3,[R1] ;?3MOV RH3,RL3 ;?4 • Welche Adressierungsarten werden an den markierten Stellen benutzt? • Angenommen, die Adresse von V1 sei 0x100. Was steht nach Programmende in R0 bis R3? Adressierung und AusführungSS07 Daniel Betz • daniel.betz@daniel-betz.com
Zum Abschluss noch eine Wissensfrage… • Das „F“ in FPGA steht für … und das bedeutet: … FPGA-WissenSS07 Daniel Betz • daniel.betz@daniel-betz.com
Danke für die Aufmerksamkeit Bis nächste Woche! Daniel Betz • daniel.betz@daniel-betz.com