Sie sind auf Seite 1von 11

TI 2 - 1.

Aufgabenblatt - Lsungen o
Thorben Meier & Heiko Donat & Victor Dorneanu 29. April 2010

1. Aufgabe
a) Dierence Engine Die Dierenzmaschine war ein mit einer Kurbel betriebener, mechanischer Computer, der 1822 von Charles Babbage realisiert wurde. Sie konnte lediglich Additionen im Dezimalsystem durchfhren bzw. komplexere u Rechnungen zum Teil auf Additionen zurckzufhren. u u b) Relais Ein Relais ist ein auf einem Elektromagneten (Spule) basierender elektrischer Schalter. Wird der Steuerstromkreis geschlossen so knnen mittels eine Ankers, der auf das Magnetfeld reagiert, mehrere Arbeitsso tromkreise geschlossen werden. c) EPROM Ein erasable programmable read-only memory besitzt eine Matrix aus MOSFET-Tansistoren, die jeweils ein Bit speichern knnen. Durch UV-Licht lassen sich die Transistoren Programmieren bzw. Lschen. o o d) Core Ein Prozessorkern ist das Herz jeder CPU, wobei viele CPU heutzutage mehrere Kerne besitzen. Jeder Kern besteht aus einer Arithmetisch-logischen Einheit (ALU), einem Register so wie einer Anbindung an den Speicher. e) ALU Die arithmetic logic unit ist ein elektronisches Rechenwerk, dass 3 Grundoperationen auf Binrzahlen a ausfhren kann: Addition (arithmetisch), NOT und AND (logisch). Aus diesem Grundoperationen lassen u sich verschiedene andere Operationen zusammensetzten, z.B. Subtraktion, Multiplikation, OR, EXOR usw. f) ISA Die Industry Standard Architecture ist ein Computerbussystem mit dem es mglich ist Audiokarten, o I/O-Gerte und andere Erweiterungen an einen Computer anzuschlieen. Seit der Entwicklung des PCIa Busses hat nahezu kein moderner Computer mehr einen ISA-Anschluss. g) Benchmark Ein Benchmark ist ein leistungsbezogener Vergleich zwischen verschiedenen Computersystemen bzw. Programmiersprachen, in dem komplexe Berechnung ausgefhrt und bentigte Zeit gemessen werden und u o

anderen Systemen (meist dem marktfhrenden System) gegenbergestellt werden. u u h) Turing-Maschine Die Turing-Maschine wurde von Alan Turing entwickelt um eine Klasse von berechenbaren Funktionen zu schaen. Als Grundkonzept der Informatik kann man mit einer Turing-Maschine smtliche Operationen a eines Computers simulieren (Turingberechenbarkeit). i) MSIL/CIL Die Common Intermediate Language ist eine Zwischensprache bei der Ubersetzung von .NET-Sprachen, welche zur Laufzeit in Maschinencode ubersetzt wird. Microsoft Intermediate Language (MSIL) war der frhere Name von CIL. u

2. Aufgabe
a) Ein general-purpose computer ist ein universeller Rechner, der nicht nur genau ein Problem lsen kann. o Er lsst sich auf das Lsen verschiedener Probleme programmieren. a o b) Nach der von-Neumann-Architektur gibt es nur einen Speicher fr Programme und Daten. Sowohl Prou gramme als auch Daten sind Bitfolgen und lassen sich so nicht unterscheiden, sondern lediglich vom Rechner verschieden interpretieren. c) Komponenten der von-Neumann-Architektur: 1.) CPU: Setzt sich zusammen aus der ALU (fr Rechenoperationen) und Steuerwerk (fr Befehlsabfolge) u u 2.) Speicher: Speichert Programme und Daten 3.) Ein-/Ausgabe Einheit: Steuert Ein/-Ausgabe von Daten d) Komponenten des Datenprozessors: 1.) ALU (Arithmetic Logical Unit): fhrt Rechenoperationen aus u 2.) Akkumulator: Hier werden Ergebnisse Zwischengespeichert 3.) Multiplikator Register: Aufnahme von Multiplikationsergebnissen 4.) Link Register: Aufnahme eines Additionsbertrags u 5.) Memory Buer Register: Zwischenspeicherung von Speicherzelleninhalten e) Komponenten des Befehlsprozessors: 1.) Instruction Register: Enthlt den aktuellen Befehl a 2.) Memory Adress Register: Enthlt die Adresse der Speicherzelle, die als nchstes angesprochen wird. a a 3.) Program Counter: Enthlt die Speicheradresse des nchsten Befehls a a 4.) Decodierer: Entschlsselt die Befehle u 5.) Steuerwerk: Steuert die Ausfhrung der Befehle u f) Ja eine Unterscheidung macht Sinn. Gbe es nur einen Bus, msste dieser eine Bus sowohl die Speichera u adresse als auch den Inhalt einer Speicherzelle transportieren. Dies wre sehr ineektiv, da die Lnge der a a Speicheradresse i.d.R. von der Breite einer Speicherzelle verschieden ist und so der Bus nicht bei jedem 2

Takt ausgelastet wre. Nehmen wir an, die Breite einer Speicherzelle betrgt m Bits und die Lnge einer a a a Speicheradresse betrgt n Bits, so erhalten wir folgende Zusammenhnge der Gren: a a o Hat ein Speicher 2n Pltze mit einer Breite von m Bits, so muss der Adressbus n Bits pro Takt ubertragen a knnen bzw. das Memory Adress Register aufnehmen knnen, um auf eine Speicherzelle zugreifen zu o o knnen. Der Datenbus muss dann also m Bits pro Takt ubertragen knnen. Da das Memory Buer Reo o gister Speicherzelleninhalte zwischenspeichert, muss dieses also auch eine Breite von m Bits haben. g) Single Instruction Single Data: Die CPU fhrt immer nur genau einen Befehl zur Zeit aus und bearbeitet u dabei genau einen Datenwert. h) Maschinencode, also Befehle und Daten werden als eine Folge von Binrzahlen dargestellt. Da diese a Binrzahlen schwer zu lesen bzw. zu Programmieren ist, wurde die Assemblersprache entwickelt, die ein a intuitives Verfahren darstellt, dem Rechner Operationen vorzuschreiben. Ein-Adress-Befehle verknpfen den Akkumulator hchstens mit einem weiteren adressierten Operanden u o aus dem Register. Mehr-Adress-Befehle verknpfen also mehrere Adressen mit dem Akkumulator und u insbesondere mehrere Akkumulator, sofern es mehr als einen gibt. i) In der ersten Phase (Fetch-Phase) wird Code aus einer Speicherzelle gelesen und als Befehl interpretiert. Mittels des Decoders wird festgestellt, um welchen Befehl es sich handelt. Nach dem der Befehl erkannt wurde, werden (falls ntig) die bentigten Operanden geladen. o o Erst in der zweiten Phase (Execution-Phase) wird der Befehl auf die Operanden angewendet. Der Vorteil liegt darin, dass erst unmittelbar vor der Ausfhrung der Typ eines Befehls und deren Opeu randen geladen werden mssen. u j) Die Befehle und Daten, die an die CPU geliefert werden, werden alle uber den Adressbus angesprochen und den Datenbus transportiert. Ist die Taktrate des Bussystems kleiner als die der CPU, so bremst das Bussystem die schnellere CPU aus. Ein Flaschenhalsntsteht. e Umgangen wird das Problem heutzutage mit der Nutzung eines Cache. Ein Cache ist eine Art Zwischenspeicher, in dem Kopien von Daten, die schon einmal aus dem Hauptspeicher geladen worden, gespeichert werden und so einen schnelleren Zugri auf diese Daten ermglicht. o

a)

3. Aufgabe

Listing 1: 3 Aufgabe Teil a.mms msg BYTE H e l l o World,#A, 0 % N a c h r i c h t Main GETA $255 , msg % N a c h r i c h t e n a d r e s s e nach $255 TRAP 0 , Fputs , StdOut % Ausgabe aush $255 b) Es wird eine Datei mit der Endung *.mmo erzeugt. c) Es erscheint Hello World d) Erzeugt ein Leerzeichen e) Es wird ein Speicherbereich mit 3 belegt Listing 2: 3 Aufgabe Teil e.mms msg BYTE t i m e s IS Main SET ADD GETA SET l o o p TRAP SUB BNZ TRAP H e l l o World,#A, 0 % N a c h r i c h t 3 $45 , t i m e s $45 , $45 , 2 $255 , msg $46 , 1 0 , Fputs , StdOut $45 , $45 , $46 $45 , l o o p 0 , Halt , 0

% N a c h r i c h t e n a d r e s s e nach $255 % Ausgabe aush $255

% Programm beenden

1)

4. Aufgabe

Listing 3: 4 Aufgabe Teil 1.mms LOC #100 x IS $42 y IS $43 z IS $44 Main SET x , 4 0 SET y , 7 MUL $44 , $42 , $43 ADD z , z , 3 DIV y , z , 1 3 TRAP 0 , Halt , 0 3) Man erhlt diese Werte mit dem Trace-Mode von MMIX. Alternativ kann man die Zahl ins ASCII umwana deln und ausgeben.

4) Listing 4: 4 Aufgabe Teil 4.mms LOC #100 x IS $42 y IS $43 z IS $44 Main SET x , 6 SET y , 7 SET z , 2 0 SUB z , z , y MUL $45 , x , y ADD $46 , x , y MUL x , $45 , $46 DIV x , x , z TRAP 0 , Halt , 0

5. Aufgabe

a) Dezimalzahlen, die mehr als 4 Ziern haben, wrden einen Overow verursachen. Die Ursache dafr ist die u u Tatsache, dass unser Buer maximal 4 Bytes aufnehmen kann. Wenn das 4. Byte geschrieben wurde, dann ist $18 = 0. Wegen der Bedingung BNZ x, Loop, die solange die Schleife wiederholen lsst bis die Division durch a 10 keine Null ergibt, wird der Wert in $18 weiter dekrementiert. Danach wird auf Speicher zugegerien (mithilfe des Osets), der vor unserem Buer angrenzt. Und genau das fhrt zu einem Programmabbruch. u Wir mssen uberprfen, ob x Null wird und ob unser Counter (in $18) negativ ist. Die vernderte Loopu u a Schleife sieht dann so aus: a) Listing 5: 5 Aufgabe Teil a.mms ... % Schleife DIV x , x , 1 0 GET d i g i t , rR ADD d i g i t , d i g i t , 0 % Offset < 0 ? BN $18 , E x i t STBU d i g i t , $17 , $18 SUB $18 , $18 , 1 % x = 0 ? BZ x , E x i t JMP Loop % Ausgabe SET $255 , $17 TRAP 0 , Fputs , StdOut 5

Loop

% nochmals w i e d e r h o l e n

Exit

TRAP 0 , Halt , 0

b) Folgendes Programm wandelt die Zahl aus Aufgabenteil a) in ihre Binrdarstellung um. a Listing 6: 5 Aufgabe Teil b.mms Buffer x digit BufAddr BYTE IS $14 IS $42 IS $47 LOC #100 0,#a , 0

% Wir r e s e r v i e r e n 16 b y t e s f u r d i e D a r s t e l l u n g % d e r B i n r z a h l , damit w i r d i e h c h s t e 4 s t e l l i g e a o % D e z i m a l z a h l f e h l e r f r e i d a r s t e l l e n k nnen . o Binary BYTE 0000000000000000 ,# a , 0

Main

% Main SET x , 1 7 3 6 9 GETA $17 , B u f f e r SET $18 , 3 % Schleife DIV x , x , 1 0 GET d i g i t , rR ADD d i g i t , d i g i t , 0 % Offset < 0 ? BN $18 , Horner STBU d i g i t , $17 , $18 SUB $18 , $18 , 1 % x = 0 ? BZ x , Horner JMP Loop

Loop

% nochmals w i e d e r h o l e n

% Wir verwenden h i e r das HornerSchema z u r Umwandlung % d e r D e z i m a l z a h l i n s b i n a r e Zahlsystem . Horner GETA BufAddr , Binary % Wir h o l e n uns d i e e i n z e l n e n Z i f f e r aus dem B u f f e r % und k r e i e r e n d a r a u s w i e d e r e i n e Zahl

LDBU LDBU LDBU LDBU

$21 , $17 , 0 $22 , $17 , 1 $23 , $17 , 2 $24 , $17 , 3

% 1. Ziffer % 2. Ziffer % ...

% Umwandeln d e r Z i f f e r i n Zahlen SUB $21 , $21 , 0 SUB $22 , $22 , 0 SUB $23 , $23 , 0 SUB $24 , $24 , 0 % Zusammenstellen d e r Zahl ADD $25 , $25 , $21 MUL $25 , $25 , 1 0 0 MUL $25 , $25 , 1 0 ADD $26 , $26 , $22 MUL $26 , $26 , 1 0 0 ADD $27 , $27 , $23 MUL $27 , $27 , 1 0 ADD $25 , $25 , $26 ADD $25 , $25 , $27 ADD $25 , $25 , $24 SET d i g i t , $25 SET $21 , 1 6 SET $19 , Binary

% i n $25 s t e h t u n s e r e Zahl % Unsere Zahl % Offset ( abfallend ) % AusgabeB u f f e r

% S c h l e i f e i n n e r h a l b d e s HornerSchemas . % Wir d i v i d i e r e n d i e Zahl durch 2 und merken uns % d i e Reste . H Loop DIV GET ADD SUB STB digit , digit ,2 $22 , rR $22 , $22 , 0 $21 , $21 , 1 $22 , $19 , $21 % D i v i d i e r e durch 2 % Rest wird i n $22 g e s p e i c h e r t % Dekrementiere O f f s e t % Rest d e r D i v i s i o n wird i n unserem % Buffer gespeichert

BNZ d i g i t , H Loop % Ausgabe d e r B i n r z a h l a SET $255 , BufAddr TRAP 0 , Fputs , StdOut TRAP 0 , Halt , 0

Exit

c) Listing 7: 5 Aufgabe Teil c.mms Buffer x digit BufAddr Vergl BYTE IS IS IS IS LOC 0,#a , 0 $14 $42 $47 $49 #100

% Wir r e s e r v i e r e n 16 b y t e s f u r d i e D a r s t e l l u n g % d e r B i n r z a h l , damit w i r d i e h c h s t e 4 s t e l l i g e a o % D e z i m a l z a h l f e h l e r f r e i d a r s t e l l e n k nnen . o Binary BYTE 0000000000000000 ,# a , 0

Main

% Main SET x , 1 3 3 9 GETA $17 , B u f f e r SET $18 , 3 % Schleife DIV x , x , 1 0 GET d i g i t , rR ADD d i g i t , d i g i t , 0 % Offset < 0 ? BN $18 , Horner STBU d i g i t , $17 , $18 SUB $18 , $18 , 1 % x = 0 ? BZ x , Horner JMP Loop

% Unsere Zahl

Loop

% nochmals w i e d e r h o l e n

% Wir verwenden h i e r das HornerSchema z u r Umwandlung % d e r D e z i m a l z a h l i n s b i n r e Zahlsystem . a Horner GETA BufAddr , Binary % Wir h o l e n uns d i e e i n z e l n e n Z i f f e r aus dem B u f f e r % und k r e i e r e n d a r a u s w i e d e r e i n e Zahl LDBU LDBU LDBU LDBU $21 , $17 , 0 $22 , $17 , 1 $23 , $17 , 2 $24 , $17 , 3 % 1. Ziffer % 2. Ziffer % ...

% Umwandeln d e r Z i f f e r i n Zahlen SUB $21 , $21 , 0 SUB $22 , $22 , 0 SUB $23 , $23 , 0 SUB $24 , $24 , 0 % Zusammenstellen d e r Zahl ADD $25 , $25 , $21 MUL $25 , $25 , 1 0 0 MUL $25 , $25 , 1 0 ADD $26 , $26 , $22 MUL $26 , $26 , 1 0 0 ADD $27 , $27 , $23 MUL $27 , $27 , 1 0 ADD $25 , $25 , $26 ADD $25 , $25 , $27 ADD $25 , $25 , $24 SET d i g i t , $25 SET $21 , 1 6 SET $19 , Binary

% i n $25 s t e h t u n s e r e Zahl % Unsere Zahl % Offset ( abfallend ) % AusgabeB u f f e r

% S c h l e i f e i n n e r h a l b d e s HornerSchemas . % Wir d i v i d i e r e n d i e Zahl durch 2 und merken uns % d i e Reste . H Loop DIV GET ADD SUB STB digit , digit ,2 $22 , rR $22 , $22 , 0 $21 , $21 , 1 $22 , $19 , $21 % D i v i d i e r e durch 2 % Rest wird i n $22 g e s p e i c h e r t % Dekrementiere O f f s e t % Rest d e r D i v i s i o n wird i n unserem % Buffer gespeichert

BNZ d i g i t , H Loop % Nun haben w i r u n s e r e Zahl b i n r umgewandelt . a % Wir m ssen nun a b e r d i e n e g a t i v e Zahl b i n r d a r s t e l l e n . u a % Dazu b i l d e n w i r den Zweierkomplementen . % Wir i n v e r t i e r e n z u n c h s t a l l e B i t s a ZweiKomp SET $21 , 1 5 % u n s e r Counter SET x , 1 % Vergleichswert ZwLoop LDBU $30 , BufAddr , $21 SUBU $30 , $30 , 0 CMP Vergl , x , $30 BP Vergl , ZwNull % Es war e i n e N u l l SET $30 , 0 % Es war e i n e Eins 9

JMP S t o r e ZwNull Store SET $30 , 1 ADD $30 , $30 , 0 STBU $30 , BufAddr , $21 % s c h r e i b e zur u ck i n s B u f f e r SUB $21 , $21 , 1 BNZ $21 , ZwLoop % Ausgabe d e r B i n r z a h l a SET $255 , BufAddr TRAP 0 , Fputs , StdOut TRAP 0 , Halt , 0

Exit

d) Folgendes Programm bekommt als Eingabe eine ganzzahlige Zahl und es muss uberprft werden ob diese u Zahl = 42. Ist das der Fall, dann wird die Zeichenkette Rechnerstrukturen ausgegeben. Ansonsten tut das Programm nichts. Listing 8: 5 Aufgabe Teil d.mms Eingabe Buffer newline SNum String BufAddr EinAddr Vergl x OCTA 0 , 8 BYTE BYTE #a , 0 BYTE 42 BYTE R e c h n e r s t r u k t u r e n ,#a , 0 IS $42 IS $43 IS $41 IS $50 LOC GETA GETA STOU SET TRAP #100 BufAddr , B u f f e r EinAddr , Eingabe BufAddr , EinAddr , 0 $255 , EinAddr 0 , Fgets , StdIn

Main

SET x , 4 2

% d i e g e s u c h t e Zahl

% Wir l a d e n das E i n g e l e s e n e aus dem B u f f e r und % u b e r p r u f e n , ob w i r das R i c h t i g e e i n g e l e s e n haben . LDBU $20 , BufAddr , 0 % erste Ziffer ( s ollte 4 sein ) LDBU $21 , BufAddr , 1 % zweite Z i f f e r ( s o l l t e 2 sein ) % Umwandeln von ASCII > Bin r a SUBU $20 , $20 , 0 SUBU $21 , $21 , 0 % Zusammenstellen d e r Zahl SET $23 , 0 ADD $23 , $23 , $20 % 0 + erste z i f f e r 10

MUL $23 , $23 , 1 0 ADD $23 , $23 , $21

% %

10 + zweite z i f f e r

% Wenn x == $23 , dann wurde 42 g e l e s e n CMP Vergl , x , $23 BZ Vergl , Found % S p r i n g e zu Found wenn x und $23 % gleich sind JMP E x i t Found GETA $24 , S t r i n g SET $255 , $24 TRAP 0 , Fputs , StdOut TRAP 0 , Halt , 0

Exit

11