Computersysteme. Die DLX-560 Architektur

Ähnliche Dokumente
Die DLX-560 Befehlssatzarchitektur

DLX Befehlsübersicht

Assembler am Beispiel der MIPS Architektur

2. Teilklausur Informatik II

21. Februar Name:. Vorname. Matr.-Nr:. Studiengang

28. März Name:. Vorname. Matr.-Nr:. Studiengang

Mikroprozessortechnik. 03. April 2012

Beispiel: A[300] = h + A[300]

Weitere Arithmetik. Grundlagen der Rechnerarchitektur Assembler 33

RISC-Prozessoren (1)

Datenpfad einer einfachen MIPS CPU

Lösungsvorschlag 10. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Datenpfad einer einfachen MIPS CPU

Grundlagen der Rechnerarchitektur

Datenpfad einer einfachen MIPS CPU

Digitaltechnik und Rechnerstrukturen. 2. Entwurf eines einfachen Prozessors

Technische Informatik 1

DLX-Assembler-Programmierung Kutil, 2010

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

RO-Tutorien 15 und 16

Das Prinzip an einem alltäglichen Beispiel

Lösungsvorschlag 9. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Technische Informatik 1 Übung 5: Eingabe/Ausgabe (Computerübung) Georgia Giannopoulou, ETZ G & 18.

Struktur der CPU (1) Die Adress- und Datenpfad der CPU: Befehl holen. Vorlesung Rechnerarchitektur und Rechnertechnik SS Memory Adress Register

Befehle zur Verarbeitung von Daten ( data processing ):

Programmiersprachen Einführung in C

Stephan Brumme, SST, 2.FS, Matrikelnr

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 8 und Präsenzaufgaben Übung 9

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015


Eine einfache MIPS-Implementierung. Die Speicherzugriffsbefehle load word (lw) und store word (sw)

Heute nur MIPS-Praxis (4 Aufgaben)

DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE

Musterlösungen Technische Informatik 2 (T2) Prof. Dr.-Ing. D. P. F. Möller

Rechnerstrukturen Sommersemester 2003

Prinzipieller Aufbau und Funktionsweise eines Prozessors

5.BMaschinensprache und Assembler

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

Was ist die Performance Ratio?

Die Mikroprogrammebene eines Rechners

Der Toy Rechner Ein einfacher Mikrorechner

Neues vom STRIP Forth-Prozessor

Übungsblatt 10 (Block C 2) (16 Punkte)

Control Beispiel. Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Control

1 Rechnerstrukturen 1: Der Sehr Einfache Computer

Auch hier wieder. Control. RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite. Instruction[31 26] (also: das Opcode Field der Instruktion)

Beispiele von Branch Delay Slot Schedules

Technische Informatik 1 Übung 8 Instruktionsparallelität (Rechenübung) Andreas Tretter 8./9. Dezember Bitte immer eine Reihe freilassen

Assembler (NASM) Crashkurs von Sönke Schmidt

Technische Informatik 1

Name: Vorname: Matr.-Nr.: 4. a) RISC-Architekturen müssen zur Decodierung von Maschinenbefehlen stets ein mikroprogrammierbares Steuerwerk verwenden.

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts

Die ARM-Mikroarchitektur. Acorn RISC Machine ARM. Asm Prak SS03 p.1/13

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Technische Informatik 1 - HS 2017

Von-Neumann-Architektur

Lösungsvorschlag zur 3. Übung

Rechnerstrukturen 1: Der Sehr Einfache Computer

Assembler - Adressierungsarten

DLX-Assembler für Anfänger Kutil, 2004

Kap 4. 4 Die Mikroprogrammebene eines Rechners

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

KOP / FBS - Programmierung

Zusammenfassung der Assemblerbefehle des 8051

Technische Informatik 1 Übung 2 Assembler (Computerübung) Matthias Meyer

Mikroprozessor als universeller digitaler Baustein

Assembler-Programmierung

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Mikrocomputertechnik. Einadressmaschine

Einführung Programmierpraktikum C Michael Zwick

Datapath. Data Register# Register# PC Address instruction. Register#

Praktische Übungen zu Computertechnik 2. Versuchsprotokoll

L3. Datenmanipulation

Technische Informatik II Rechnerarchitektur

Rechnernetze und Organisation

Daniel Betz Wintersemester 2011/12

Technische Informatik 1 Übung 6 Pipelining (Rechenübung) Andreas Tretter 24./25. November 2016

Grundzüge der Informatik II

TECHNISCHE HOCHSCHULE NÜRNBERG GEORG SIMON OHM. Die MARS Umgebung

Rechnern netze und Organisatio on

ALU ALU. ALU-Aufbau. Eine ALU (arithmetisch-logische Einheit) besteht in der Regel aus. Addierer. Logischer Einheit. Shifter

Hier: Soviele Instruktionen wie möglich sollen in einer Zeiteinheit ausgeführt werden. Durchsatz.

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at

Pipelining. Die Pipelining Idee. Grundlagen der Rechnerarchitektur Prozessor 45

Grundbegriffe der Informatik Tutorium 5

Instruktionssatz-Architektur

4. Übung SPS-Programmierung

Rechnergrundlagen SS Vorlesung

PC/XT/AT ASSEMBLER-BUCH

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Teil 2: Rechnerorganisation

Informatik 12 Kapitel 3 - Funktionsweise eines Rechners

Informatik für ET/MT INF1 ET/MT. Rechner Architektur Befehlssätze. Assemblerprogrammierung

Assembler Kontrollstrukturen

, 2014W Übungsgruppen: Mo., Mi.,

Übersicht Shell-Scripten

Use of the LPM (Load Program Memory)

Data Hazards. Grundlagen der Rechnerarchitektur Prozessor 74

Transkript:

Comptersysteme Die DLX-560 Architektr 1

Dr.-Ing. Christoph Starke Lehrsthl für Technische Informatik Institt für Informatik Christian Albrechts Universität z Kiel Tel.: 8805337 E-ail: chst@informatik.ni-kiel.de 2

Die DLX-560 Architektr DLX, asgesprochen dele - Datenformate nd Befehlssatz - Bateile nd Datenpfade - Assemblerprogrammierng Das Verständnis dieser Architektr ist wichtig, sowohl für die Entwicklng von Hardware als ach für die Entwicklng von schneller nd zverlässiger Software. As den vorangegangenen Kapiteln haben wir eine Reihe von Lehren gezogen, die wir jetzt in einer Beispielarchitektr msetzen wollen: Was sind diese Vorgaben? 3

Vorgaben DLX GPR-Architektr, load-store ( =Register-Register) Adressierng: Displacement, Immediate, Indirect schnelle einfache Befehle (load, store, add,...) 8-Bit, 16-Bit, 32-Bit Integer 32-Bit, 64-Bit Floating-point feste Länge des Befehlsformats, wenige Formate indestens 16 GPRs 4

Instrction fetch Instrction decode/ register fetch Eecte/ address calclation emory access Write back 4 Add NPC Zero? Branch taken Cond PC Instrction memory IR Registers A B ALU ALU otpt Data memory LD 16 Sign 32 etend Imm DLX-Datenpfad mit Taktzyklen 5

Register Der Prozessor hat 32 GPRs. Jedes Register ist 32-Bit lang. Sie werden mit R0,..,R31 bezeichnet. R0 hat den Wert 0 nd ist nicht beschreibbar (Schreiben af R0 bewirkt nichts) R31 übernimmt die Rücksprngadresse bei Jmp and Link-Sprüngen Ferner gibt es 32 FP-Register. Jedes ist 32 Bit lang. F0,..,F31 Diese können wahlweise als einzelne Single-Register verwendet werden oder paarweise als Doble-Register F0, F2,...,F30. Zwischen den Registern nterschiedlicher Art gibt es spezielle ove-befehle 6

Datentypen 8-Bit Bytes. 16-Bit Halbworte. 32-Bit Worte. Für Integers. All diese entweder als nsigned Integer oder im 2-er Komplement. 32-Bit Singles. 64-Bit Dobles. Im IEEE Standard 754. Laden von Bytes nd Halbworten kann wahlweise mit führenden Nllen (nsigned) oder mit Replikation der Vorzeichenstelle (2-er Komplement) geschehen. 7

Adressierngsarten Displacement nd Immediate Drch geschickte Bentzng von R0 nd 0 können damit vier Adressierngsarten realisiert werden: Displacement: LW R1, 1000(R2); Immediate: LW R1, #1000; Indirect: LW R1, 0(R2); Direct: LW R1, 1000(R0); Displacement ist dabei die mit Abstand wichtigste Adressierngsart 8

Befehlsformate I - Befehl 6 5 5 16 Opcode rs1 rd Immediate R - Befehl 6 Typische Immediate-Befehle (rd rs1 op immediate) Loads nd Stores von Bytes, Worten, Halbworten (rs1 nbentzt) Bedingte Verzweigngen (rs1 : register, rd nbentzt) Jmp register, Jmp and link register (rd = 0, rs1 = destination, immediate = 0) Opcode 5 rs1 5 rs2 5 rd 11 Fnction Register-Register ALU Operationen: rd rs1 fnc rs2 fnc (Fnction) sagt, was gemacht werden soll: Add, Sb,... Read/write af Spezialregistern nd moves J - Befehl 6 Opcode Jmp nd Jmp and link Trap nd Retrn from eception 26 Displacement (wird z PC addiert) 9

Befehle mit Speicherzgriff Befehl Name Bedetng LW R1,30(R2) Load word Regs [R1] 32 em [30+Regs [R2] ] LW R1,1000(R0) Load word Regs [R1] 32 em [1000+0] LB R1,40(R3) Load byte Regs [R1] 32 (em [40+Regs [R3] ] 0 ) 24 # # em[40+regs[r3] ] LBU R1,40(R3) Load byte nsigned Regs [R1] 32 0 24 # # em[40+regs [R3] ] LH R1,40(R3) Load half word Regs [R1] 32 (em[40+regs [R3] ] 0 ) 16 # # em [40+Regs [R3] ] # # em[41+regs [R3] ] LF F0,50(R3) Load float Regs [F0] 32 em [50+Regs [R3] ] LD F0,50(R2) Load doble Regs [F0] # #Regs [F1] 64 em[50+regs [R2] ] SW 500(R4),R3 Store word em [500+Regs [R4] ] 32 Regs [R3] SF 40(R3),F0 Store float em [40+Regs [R3] ] 32 Regs [F0] SD 40(R3),F0 Store doble em[40+regs [R3] ] 32 Regs [F0]; em[44+regs [R3] ] 32 Regs [F1] SH 502(R2),R3 Store half em[502+regs [R2] 16 Regs [R3] 16...31 SB 41(R3),R2 Store byte em[41+regs [R3] ] 8 Regs [R2] 24...31 10

Instrction fetch Instrction decode/ register fetch Eecte/ address calclation emory access Write back 4 Add + NPC Zero? Branch taken Cond PC Instrction memory IR Registers A B ALU + ALU otpt Data memory LD LW R30, 200(R2) 16 Sign 32 etend Imm lmm DLX-Datenpfad mit Taktzyklen 11

Instrction fetch Instrction decode/ register fetch Eecte/ address calclation emory access Write back 4 Add + NPC Zero? Branch taken Cond PC Instrction memory IR Registers A B ALU + ALU otpt Data memory LD SW 200(R3), R28 16 Sign 32 etend Imm lmm DLX-Datenpfad mit Taktzyklen 12

ALU-Befehle Befehl Name Bedetng SUB R1, R2, R3 Sbtract Regs [R1] Regs[R2] Regs[R3] ADDI Rl, R2, #3 Add immediate Regs [Rl] Regs [R2]+3 13

Instrction fetch Instrction decode/ register fetch Eecte/ address calclation emory access Write back 4 Add + NPC Zero? Branch taken Cond PC Instrction memory IR Registers A B ALU + ALU otpt Data memory LD ADD R30, R4, R18 16 Sign 32 etend lmm DLX-Datenpfad mit Taktzyklen 14

Weitere Arithmetik- / Logik-Befehle Befehl Name Bedetng SLLI R1,R2,#5 Shift left logical immediate Regs [R1] Regs [R2]<<5 SLT R1, R2, R3 Set less than if (Regs[R2]<Regs[R3]) Regs [R1] 1 else Else Regs [R1] 0 15

Sprngbefehle Befehl Name Bedetng J name Jmp PC name; ((PC+4) - 2 25 ) name < ((PC+4)+2 25 ) JAL name Jmp and link Regs[R31] PC+4; PC name; ( (PC+4) 2 25 ) name < ( (PC+4) +2 25 ) JALR R2 Jmp and link register Regs [R31] PC+4; PC Regs [R2] JR R3 Jmp register PC Regs [R3] BEQZ R4,name Branch eqal zero if (Regs [R4] =0) PC name; ( (PC+4) 2 15 ) name < ( (PC+4) +2 15 ) BNEZ R4,name Branch not eqal zero if (Regs [R4] 0) PC name; ( (PC+4) 2 15 ) < name < ( (PC+4) +2 15 ) 16

Die Synta der PC-relativen Sprngbefehle ist etwas irreführend, da der als Operand eingegebene Parameter als Displacement zm PC z verstehen ist. Tatsächlich müßte die erste Zeile heißen: J offset bedetet PC <--- PC+4 + offset mit -2 25 <= offset < +2 25 Das würde aber heißen, daß man in Assemblerprogrammen die Displacements bei relativen Adressen eplizit angeben mß. Dies macht die Wartng eines solchen Programms nglablich schwierig. Daher erlabt man, daß man Namen für die effektiven Adressen einführt, die man wie Sprngmarken ins Assemblerprogramm schreibt. Ein Precompiler wandelt die Namen in die Offsets m, so daß anschließend die tatsächlichen Offsets verwendet werden können. Für Entwickler nd Leser ist ein solches mit arken geschriebenes Programm leichter verständlich. 17

Instrction fetch Instrction decode/ register fetch Eecte/ address calclation emory access Write back 4 Add + NPC Zero? Branch taken Cond PC Instrction memory IR Registers A B ALU + ALU otpt Data memory LD BEQZ R20, #68 16 Sign 32 etend Imm lmm DLX-Datenpfad mit Taktzyklen 18

Gleitkommabefehle Befehl Name Bedetng ADDS F2, F0, F1 Add single precision floating point nmbers ULTD F4, F0, F2 ltiply doble precision floating point nmbers Regs[F2] Regs[F0] + Regs[F1] Regs[F4]##Regs[F5] Regs[F0]##Regs[F1] * Regs[F2]##Regs[F3] 19

Instrction type/opcode Instrction meaning Data transfers ove data between registers and memory, or between the integer and FP or special registers; only memory address mode is 16-bit displacement + contents of a GPR LB,LBU,SB Load byte, load byte nsigned, store byte LH, LHU, SH Load half word, load half word nsigned, store half word LW, SW Load word, siore word (to/from integer registers) LF, LD, SF, SD Load SP float, load DP float, store SP float, store DP float OVI2S, OVS2I ove from/to GPR to/from a special register OVF, OVD Copy one FP register or a DP pair to another register or pair OVFP2I,OVI2FP ove 32 bits from/to FP registers to/from integer registers Arithmetic/logical Operations on integer or logical data in GPRs; signed arithmetic trap on overflow ADD, ADDI, ADDU, ADDUI Add, add immediate (all immediates are 16 bits); signed and nsigned SUB, SUBI, SUBU, SUBUI Sbtract, sbtract immediate; signed and nsigned ULT,ULTU,DIV,DIVU ltiply and divide, signed and nsigned; operands mst be FP registers; all operations take and yield 32-bit vales AND,ANDI And, and immediate OR,ORI,XOR,XORI Or, or immediate, eclsive or, eclsive or immediate LHI Load high immediate loads pper half of register with immediate SLL, SRL, SRA, SLLI, SRLI, SRAI Shifts: both immediate (S I) and variable form (S ); shifts are shift left logical, right logical, right arithmetic S_, S_ I Set conditional: _ may be LT, GT, LE, GE, EQ, NE Control Conditional branches and jmps; PC-relative or throgh register BEQZ,BNEZ Branch GPR eqal/not eqal to zero; 16-bit offset from PC+4 BFPT,BFPF Test comparison bit in the FP stats register and branch; 16-bit offset from PC+4 J, JR Jmps: 26-bit offset from PC+4 (J) or target in register (JR) JAL, JALR Jmp and link: save PC+4 in R31, target is PC-relative (JAL) or a register (JALR) TRAP Transfer to operating system at a vectored address RFE Retrn to ser code from an eception; restore ser mode Floating point FP operations on DP and SP formats ADDD,ADDF Add DP. SP nmbers SUBD,SUBF ULTD,ULTF ltiply DP, SP floating point DIVD, DIVF Divide DP, SP floating point CVTF2D, CVTF2I, CVTD2F, CVTD2I, CVTI2F, CVTI2D Convert instrctions: CVT2y converts from type to type y, where and y are I (integer), D (doble precision), or F (single precision). Both operands are FPRs. _D,_ F DP and SP compares: _ = LT, GT, LE, GE, EQ, NE; sets bit in FP stats register 20

α Beispiele für Assembler-Programmierng Sortieren zweier Zahlen A nd B. A steht an Adresse 1000, B an Adresse 1004 Die größere Zahl soll am Ende in 1000 stehen, die kleinere in 1004 Inpt: Natürliche Zahlen A nd B Otpt: A nd B in der Reihenfolge der Größe ethode: A, B einlesen A >= B? nein C = A A = B B= C ja IF A < B Then Endif Otpt A Otpt B C = A A = B B = C } A, B asgeben ω 21

Wir wollen dafür ein Assemblerprogramm schreiben. Wir setzen voras, dass die Operanden A nd B an den Adressen 1000 nd 1004 im Speicher stehen nd das Ergebnis sortiert an denselben Adressen entstehen soll: /Register: /R1, R2: A, B /R3, R4: Hilfsregister Start: LW R1, 1000(R0) /Lade A nach R1 LW R2, 1004(R0) /Lade B nach R2 SLT R3, R2, R1 /Setze R3 (ngleich 0), falls B < A BNEZ R3, Ende /Zahlen bereits in der richtigen Reihenfolge. /Sonst vertasche A nd B drch Ringtasch: ADD R4, R1, R0 /R4 := R1 ADD R1, R2, R0 /R1 := R2 ADD R2, R4, R0 /R2 := R4 SW 1000(R0), R1 /Speichern des aimms SW 1004(R0), R2 /Speichern des inimms Ende: HALT /Ende des Programms Ganz wichtig: Programmbeschreibng, Registerbelegng, Kommentare (nicht generisch) Test mit https://hesersohn.githb.io/dl/ => Vermeidng syntaktischer Fehler 22

α Beispiele für Assembler-Programmierng Berechnng des GGT zweier Zahlen A nd B. A, B einlesen Inpt: Natürliche Zahlen A nd B Otpt: GGT(A,B) ethode: A = B? ja GGT = A While A <> B Do GGT = A If A<B Then B = B-A Else A = A-B EndIf nein A < B? nein A = A-B ja ω B= B-A 24

/Programmbeschreibng: /Das Programm liest 2 positive Integerwerte A nd B as den Adressen 1000 bzw. 1004, /berechnet GGT(A,B) nd speichert ihn an Adresse 1008. /Beispiel: GGT(28,12)=4 /Registerbelegng: /R1,R2: A, B /R3: Hilfsregister Start: LW R1, 1000(R0) /Lade A nach R1 LW R2, 1004(R0) /Lade B nach R2 Loop: SEQ R3, R1, R2 /R3 wird gesetzt <=> (A=B) BNEZ R3, Ende /Falls A=B ist A der GGT => Geh zm Ende SLT R3, R1, R2 /Sonst setze R3 <=> (A<B) BNEZ R3, AklB /Falls A<B gehe z AklB SUB R1, R1, R2 /A:=A-B J Loop /Geh zm Anfang der Schleife AklB: SUB R2, R2, R1 /B:=B-A J Loop /Geh zm Anfang der Schleife Ende: SW 1008(R0), R1 /Speichere GGT, der in A steht. Halt /Programmende Ganz wichtig: Programmbeschreibng, Registerbelegng, Kommentare (nicht generisch) Test mit https://hesersohn.githb.io/dl/ => Vermeidng syntaktischer Fehler 25

Weitere Beispiele für Assembler-Programmierng ergen zweier sortierter Listen der Länge 25. Die eine ist ab Adresse 1000 im Speicher, die andere ab Adresse 1100. Die sortierte Gesamtliste S soll ab Adresse 1200 in den Speicher geschrieben werden. Sortiert heißt: Das kleinste Element steht in der Zelle mit der kleinsten Adresse nd von da an afsteigend. Inpt: Zwei sortierte Listen A nd B Otpt: Eine sortierte Gesamtliste S ethode: Das jeweils kleinste Element der einen Liste wird mit dem jeweils kleinsten Element der zweiten Liste verglichen. Das kleinere von beiden wird in die Gesamtliste gespeichert. Ein nees nnmehr kleinstes Element wird as der Liste geladen, as der das eben gespeicherte Element kam. Sobald eine der Listen verbracht ist, speichert man die restlichen Elemente der anderen Liste in der Reihenfolge, in der sie bereits sind. 26

α i, j =0; A i, B j einlesen A i < B j? nein ja A i speichern i = i+1 Nees A i einlesen B j speichern j = j+1 Nees B j einlesen nein i = 25? j = 25? nein ja ja B j speichern j = j+1 Nees B j einlesen A i speichern i = i+1 Nees A i einlesen nein j = 25? ja i = 25? ja nein ω 27

/Programmbeschreibng: /erge 2 afsteigend sortierte Listen A, B der Länge 25 in eine Gesamtliste S. /A beginnt an Adresse 1000, B an 1100, S soll ab 1200 gespeichert werden. /Registerbelegng: /R1,R2,R3: Zeiger af Listen A, B bzw. S /R4,R5: A i, B j /R6: Hilfsregister für Vergleiche START: ADD R1, R0, R0 /Initialisiere Zeiger af Listen A,B,S mit 0 ADD R2, R0, R0 ADD R3, R0, R0 LW R4, 1000(R1) /Lade A i LW R5, 1100(R2) /Lade B j LOOP: SLT R6, R4, R5 /Ist (A i <B j )? BNEZ R6, AkB /Spring ggf. z AkB (A kleiner B) SW 1200(R3), R5 /S k := B j ADDI R3, R3, #4 /Erhöhe Zeiger von S ADDI R2, R2, #4 /Erhöhe Zeiger von B LW R5, 1100(R2) /Lade nächstes B j SLTI R6, R2, #100 /Sind noch weitere Elemente in Liste B? BNEZ R6, LOOP /Springe ggf. z Loop nd vergleiche weiter. /Fortsetzng af der nächsten Folie 28

ARAUS: SW 1200(R3), R4 /Ab hier wird Rest von A herasgeschrieben ADDI R3, R3, #4 /Erhöhe Zeiger von S ADDI R1, R1, #4 /Erhöhe Zeiger von A LW R4, 1000(R1) /Lade nächstes Ai SLTI R6, R1, #100 /Sind noch weitere Elemente in Liste A? BNEZ R6, ARAUS /Springe ggf. z ARAUS. J ENDE /Sonst springe zm Ende AkB: SW 1200(R3), R4 /S k := A i ADDI R3, R3, #4 /Erhöhe Zeiger von S ADDI R1, R1, #4 /Erhöhe Zeiger von A LW R4, 1000(R1) /Lade nächstes A i SLTI R6, R1, #100 /Sind noch weitere Elemente in Liste A? BNEZ R6, LOOP /Springe ggf. z Loop nd vergleiche weiter. BRAUS: SW 1200(R3), R5 /Ab hier wird Rest von B herasgeschrieben ADDI R3, R3, #4 /Erhöhe Zeiger von S ADDI R2, R2, #4 /Erhöhe Zeiger von B LW R5, 1100(R2) /Lade nächstes B j SLTI R6, R2, #100 /Sind noch weitere Elemente in Liste B? BNEZ R6, BRAUS /Springe ggf. z BRAUS. Ende: HALT 29

Leitfaden für die Bearbeitng von Programmierafgaben Nehmen Sie sich die Zeit, die Afgabe gründlich z lesen. Kleine Beispiele überlegen nd afschreiben, die nterschiedliche Fälle abdecken. Welche Zahlenformate sind geeignet? Welche Grenzfälle gibt es? Welche Probleme können aftreten (z.b. Über-, Unterlaf, Rndngsfehler, Division drch 0)? Entwerfen Sie einen Algorithms nd optimieren Sie diesen (also nicht gleich Code schreiben). Kleine Code-Stücke schreiben nd testen. Programm gt kommentieren nd beschreiben (ach dabei entdeckt man oft noch Fehler). Programm anhand der kleinen Beispiele schrittweise drchlafen lassen. Zm Schlss ach größere Beispiele testen. In der Klasr dürfen Sie das Hüser-Tool nicht verwenden. Sie sollten deshalb genügend üben, damit Sie ach ohne die Hilfen des Hüser-Tools (möglichst) fehlerfreien Code schreiben können. 30

Testen einer Zahl af Primalität Die z testende Zahl steht im Speicher an Adresse 1000. Das Programm prüft, ob die Zahl eine Primzahl ist nd soll gegebenenfalls eine 1 an Adresse 1004 schreiben, anderenfalls eine 0. 31

α R1 einlesen R3 = R1-2 R4= R1 Asreichende Programmbeschreibng? Programmbeschreibng bitte selbst ergänzen! R4 = R1 R3 = R3-1 R3<2? nein R4 > R3? ja nein R4 = R3? ja nein R4= R4-R3 0 speichern 1 speichern ω 32

Register: R1 : Af Primalität z prüfende Zahl R2 : Konstante 2 R3 : Drchläft alle kleineren Zahlen nd prüft ob sie R1 teilen R4 : Kopie von R1 für Teilbarkeitstest R5: Hilfsregister START: ADDI R2, R0, #2 / Initialisieren von R2 mit 2 LW R1, 1000(R0) / Laden der z testenden Zahl ADD R4, R0, R1 / Kopieren von R1 SUBI R3, R4,#2 / Erster Teilerkandidat LOOP1: SLT R5, R3, R2 / Ist R3 kleiner als 2? BNEZ R5, PRIZAHL / R1 hat keine nichttrivialen Teiler LOOP2: SGT R5, R4,R3 / ist R4>R3? BEQZ R5, GLEICHTEST / wenn nicht, mss R4=R3 geprüft werden SUB R4, R4, R3 / R4 m R3 verringern J LOOP2 / Nächster Drchlaf der inneren Schleife GLEICHTEST: SEQ R5, R4, R3 / Ist R3 gleich R4 BNEZ R5, NICHTPRI / Dann teilt R3 die Zahl in R1 ADD R4, R0, R1 / Setzten von R4 af rsprünglichen Wert SUBI R3, R3,#1 / verringern von R3 m 1 J LOOP1 / neer Test af Teilbarkeit PRIZAHL: ADDI R5, R0, #1 / Erzegen einer 1 in R5 SW 1004(R0), R5 / Schreiben der 1 in 1004 J ENDE / ENDE NICHTPRI: SW 1004(R0), R0 / Schreiben der 0 nach 1004 ENDE: HALT 33