Kurseinheit 2 Technische Informatik

Dr Franke Ghostwriter
KE2 Technische Informatik

Hallo allerseits,
ich bin im Script auf Seite 51 (Prädiktoren) angekommen und verstehe irgendwie kein Wort mehr. Irgendwie ist mir vollkommen unklar was der Autor eigentlich meint:
if (d <> 0) => Sprung S1
d = 1
if (d <> 1) => Sprung S2

Was heisst das jetzt? Könnte man z.B. in C schreiben
Versuch 1:
if (d != 0){
d = 1;
}
if (d != 1){
irgendwas anderes was hier nicht mehr spezifiziert wird
}

Oder Versuch 2:
if (d ==0){
d = 1;
if (d != 1){
Irgendwas ....
}
}

Oder soll ich mir das eher so vorstellen:
10 if (d <> 0) goto 50
20 d = 1
30 if (d <> 1) goto 60
40
50 Irgendwas
60 Irgendwas

Irgendwie sehe ich auch überhaupt nicht, dass wie der Autor schreibt der zweite Sprung immer dann genommen wird, wenn der erste genommen wird.

Bei dem Assemblercode hakt es dann auch weil ich nicht weiss was dort für Bedingungen gelten:
Nehmen wir das Beispiel auf Seite 54.
Wenn d=0 ist springt er nicht zu LOOP1 sondern führt ADDI aus (Addiert zu R0 von dem wir nicht wissen was drinsteht 1). Danach kommt er doch aber trotzdem bei LOOP1 an. Führt er dort jetzt den SUBI befehl usw. aus?
Was ich auch nicht verstehe, der Author spricht von Loops, aber die Sprungbefehle sind alle nur vorwärts ....
Wie händelt ihr das. Könnt ihr Assember? Hätte ich eigentlich vorher einen Kurs besuchen sollen bei dem ich das Lerne oder setzt der Author voraus das ich das aus der Schule kann? Hat jemand einen Tip für Assembler Einführungsmaterial im Internet. Ich habe keine Lust mir jetzt extra ein Buch zu kaufen.
Schöne Grüsse,
Euer Nasenbaer
 
Nasenbaer,

also ich hab das mit den Loops so verstanden, dass der Code von oben nach unten durchgegangen wird

Zeile1: ist d ungleich 0 ? [--> nächste Zeile]
Zeile2: falls ja: R1 ist jetzt R0+1 [--> nächste Zeile = Zeile3] // falls nein: springe in die Zeile LOOP1 (=Zeile3)
Zeile3: R3 ist R1-1
Zeile4: ist d ungleich 1?

und zufällig ist die nächste Zeile (3) der positiven If-Abfrage die LOOP1-Zeile, wo er ja hinspringt, wenn er nicht in die Schleife geht...
 
hier mal meine Ergebnisse:
1: ACEF
2: BEGH
3: ACFHI
4: BD
5: B1 5D 43 B2
6: ABCD
7: ABDEGH
8: ABCFHIJ
9: BDEFGHI
13: ADEGI

Bin mir in einigen Lösungen allerdings nicht sicher. Da könnte sich also noch etwas ändern.
Alles in allem finde ich diese KE ganz schön heftig - zumal das Script noch zig Fehler enthält und die EA Begriffe enthält, die in der KE noch nicht mal erwähnt sind 🙁

@ZapZarap: Was meinst Du denn mit Maximum? Bei 3 addierst Du doch 118 mit -51 und bei 4 -6 mit -72.
 
EA Aufgabe 2-10

Hallo Sportsfreunde,
ich wollte hier mal meine Lösungen für die langen Aufgaben die ja auch relativ viel Punkte bringen aufzeigen und mit euch vergleichen. Hier zuerst mal 2-10

Bei den einzufüllenden Textfeldern habe ich "Datenkonflikt" "Datenkonflikt" "Echte Datenabhängigkeit" und "R3"

So, jetzt zu der Tabelle, was sich hier nur schlecht darstellen lässt:
Befehle S1 S2 S3 S4 S5 S6 S7 S8 S9
ADD R3,R1,R2 IF ID EX MEM WB - - - -
NOP
NOP
NOP
SUB R4,R1,R3 - - - - IF ID EX MEM WB

E1 ist dann rechtes Feld unter S3
E2 ist dann rechtes Feld unter S4
E3 ist dann rechtes Feld unter S5
E4 ist dann rechtes Feld unter S6

Der Zweite Teil sieht im Prinzip genau so aus, aber hier braucht man nur 2 NOP's. Der Instruction Fetch (IF) vom SUB Befehl kommt dann gleichzeitig mit der MEM Phase des ADD Befehls. Für die E1-E4 ergibt sich:
E1 rechtes Feld unter S3
E2 rechtes Feld unter S4
E3 linkes Feld unter S5
E4 rechtes Feld unter S5

Habt ihr das genau so. Ich muss zugeben das mir oft nicht klar ist was die meinen ....

Euer Nasenbaer
 
EA2 Aufgabe 2-11

So und weiter gehts.

Für die Wörter würde ich hier "Steuerflusskonflikt" "Steuerflusskonflikt" "Bedinger Sprung" und "Befehlszähler" vorschlagen.

Was die Tabelle betrifft:
Ganz oben steht wieder BEQZ nn und dann IF ID EX MEM WB
dann kommen drei Zeilen mit NOP und lauter strichen ....
... in der 5. Zeile steht dann der SUB Befehl und mit IF ID EX MEM WB ab der fünften Spalte
E1 ist rechtes Feld unter S4 und E2 rechtes Feld unter S7

Wie sieht das bei euch aus?

Gruss, Nasenbär
 
EA2 Aufgabe 2-12

Hallo Allerseits,
hier mal mein Vorschlag für Aufgabe 2-12 von EA2

Hier ist mir nicht klar was die mit "syntatktisch exakt" meinen? Eigentlich gehören bei Assembler die Kommas ja wohl nicht hin, oder?

A) Nach ADD R3,R1,R2 werden 3 NOPs eingefügt (Wegen echter Datenabhängigkeit/RAW bzgl. R3) und nach SUB R4,R1,R3 werden 3 NOPs eingefügt (wegen echter Datenabhängigkeit/RAW von R4). Insgesamt braucht man dann 12 Takte.

B) Hier fange ich mit dem ADD R3,R1,R2 an (ist ja unabhängig) und schiebe auch noch den XOR Befehl dahinter. Dann stimmt der Abstand zum SUB R4,R1,R3. Danach brauche ich dann allerdings 3 NOPs vor dem ADD R1,R4,R5, insgesamt also 9 Takte.

Schöne Grüsse,
Nasenbär
 
Zwilling,
1. warum hast Du bei 1 G nicht angekreuzt?
2. Rechne mir einmal bitte 2E vor...
3. Warum hast Du hier B und G nicht angekreuzt?
4. Was ist hier an A verkehrt?
5. Hier verstehe ich nicht, warum Du subtrahierst?
7. B ist für mich keine zwimgende Voraussetzung. Wo hast Du etwas zu D und H gefunden?
8. Warum ist E für Dich falsch? Vergleich Seite 6 im Kurs.
9. Sind bei E nicht 5 Stufen erforderlich?
13. Bei A stört mich die parallele Ausführung. Warum ist F falsch? I musst Du mir erklären...

Ich freue mich auf Deine Antworten!
 
ZapZarap,

1. Bei der Havard-Architektur wird doch lediglich der Programmcode separat von den Daten im Speicher gehalten. Also sind beide Architekturen speicherprogrammierbar
2. 2^12=4096 Das pro Wort 4 Bytes übertragen werden ist zwar schön, aber für die Adressung des Wortes irrelevant.
3. Das Betriebssystem übersetzt logische/virtuelle Adressen in physikalische; Der Flaschenhals ist daran begründet, dass die Daten/Programme über einen Bus transportiert werden müssen
4. Die Prozessorarchitektur gibt nur Auskunft über die Schnitstelle; Wie es intern realisiert ist verrät sie nicht; Schau mal ins Script - da ist doch so eine Übersicht
5. Wenn in der Aufgabe steht, dass die Zahlen im Zweierkomplement angegeben sind, dann ist das ein Indikator dafür, dass da auch negative Zahlen vorkommen; Beispiel: FA als Binärcode: 1111 1010 Das höchstwertige Bit gibt an, ob es sich um eine positive Zahl (0) oder eine negative Zahl handelt (1); In diesem Fall ist es also eine negative Zahl und ist in Dezimalform (ich mach es mal ausführlich): -1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+0*2^0 = -128 + 64 + 32 + 16 + 8 + 0 + 2 + 0 = -6
7. RISC-Prozessoren haben weniger Befehle, also müssen die Programme komplexer geschrieben werden, da es dafür keine Befehle gibt. Somit wird von den Programmen mehr Speicher benötigt; D und H: https://www-vs.informatik.uni-ulm.de/teach/ss04/bs/BS_SS04_Kap04_Hauptspeicher.pdf
8. Mich stört hier der letzte Teilsatz "Programme besser lesen zu können". Deswegen werden Programme/Daten nicht getrennt voneinander gehalten. Wohl eher, dass Daten keine Programme überschreiben können.
9. Schau mal hier: Pipeline (Prozessor) – Wikipedia Da ist als Beispiel eine 4-stufige Pipeline angegeben
13. Warum stört Dich die parallele Ausführung? Das wird doch auch so im Script Pi mal Daumen beschrieben. Seitenzahl habe ich gerade nicht im Kopf, da ich auf Arbeit bin 😉 Die BHT enthält nicht für jede Sprungbefehladresse einen Eintrag. Es handelt sich hier eher um einen Cache.
 
Um übrigen habe doch noch einige Aufgaben überarbeitet. Hab jetzt:
2: B,E,G (H nich, da beide elektrisch programmiert werden, aber EPROM optisch gelöscht wird)
8: A,B,C,F,H,I (J nich, da es nicht der Beschleunigung dient, sondern das die einzelnen Pipelinestufen modular arbeiten und somit unabhängig voneinander sein können)
9: B,D,E,G,H,I (F nich, es wäre erst dann ein Datenkonflikt, wenn die frühere Operation den Inhalt gelesen und die folgende Operation den Inhalt überschrieben hätte (Write After Read)
 
@Nasenbaaer #8:

bist du dir sicher, dass du jeweils 3 NOPs verwenden willst? es handelt sich in beiden Fällen um eine DLX-Pipeline, da reichen doch 2 NOPs aus.
ich komm bei 11a auf 10 Takte

SUB R6,R2,R1
AND R5,R2,R1
ADD R3,R1,R2
NOP
NOP
SUB R4,R1,R3
NOP
NOP
ADD R1,R4,R5
XOR R6,R7,R8
-
-
-
-

und bei 11b auf 7 Takte

ADD R3,R1,R2
SUB R6,R2,R1
AND R5,R2,R1
SUB R4,R1,R3
XOR R6,R7,R8
NOP
ADD R1,R4,R5
-
-
-

Es muss IMHO auch beachtet werden, dass die Berechnungen nicht willkürlich durcheinandergeworfen werden könne, weil sonst die Ergebnisse mathematisch falsch sind.
 
Tomt,

im skript auf Seite 36, Abbildung 2.14 nehmen sie auch 3 NOP's. Der Write-Back muss abgeschlossen sein bevor der Instruction-Decode beginnt. Was du meinst mit 2 NOPs ist meines erachtens nach die beschleunigte DLX Pipeline (Abb. 2.15). Was die Reihenfolge betrifft darfst du natürlich nicht beliebig permutieren. Aber die ersten 3 Kommandos lesen ja alle aus R1 und R2 und schreiben in verschiedene andere Rs rein. Die kannst du denke ich beliebig vertauschen. Mit dem XOR bist du denke ich auch relativ frei, weil R6 ja nirgends verwendet wird und R7&R8 nirgends geändert werden.

Im Prinzip haben wir übrigens mehr oder weniger das gleiche. Beim ersten habe ich jeweils ein NOP mehr. Beim zweiten habe ich den XOR for dem SUB R4,R1,R3 (er ist mein drittes NOP). Bei deinem NOP habe ich dann noch zwei mehr stehen.

Worauf begründest du deine Annahme das es nur 2 NOPs sein müssen? Habe ich was falsch verstanden?
Schöne Grüsse,
Nasenbaer
 
nach nochmaligem lesen bin ich auch dazu gekommen, dass 3 NOPs richtig sins. ich bin sowohl für a als auch f b von der beschleunigten pipeline ausgegangen, das steht aber nirgends explizit. komme dann auch bei a auf 12 und bei b auf 9 takte.

wie gehts euch mit 14?
 
Zu 2.14:
Hier mal was ich glaube wie das Program abläuft und was in R1 jeweils bei den ersten 10 durchläufen drinsteht (A1 ist bei mir jeweils das 2. Bit von rechts):
0 0000 A1=0 NT
1 0001 A1=0 NT
2 0010 A1=1 T
3 0011 A1=1 T
4 0100 A1=0 NT
5 0101 A1=0 NT
6 0110 A1=1 T
7 0111 A1=1 T
8 1000 A1=0 NT
9 1001 A1=0 NT
Ist das soweit nachvollziehbar? Habt ihr das genau so?
Jetzt müsste man das ganze mit den Prädiktoren durchspielen .....

Habt ihr die Aufgaben 2.10 und 2.11 gelöst. Habt ihr das gleiche raus wie ich? Siehe ältere Posts ....

Schöne Grüsse,
Nasenbaer
 
Tomt,
auf dauer geht es ja immer abwechselnd, daher habe ich als Wahrscheinlichkeit dort jeweils 0.5. Muss man mal wieder raten was der Herr Professor dort gerade hören will.
Zu C1.
Beim ersten Durchlauf steht der Predictor auf T, der Sprung wird aber nicht genommen, das der heisst die Vorhersage ist Falsch und der Preditor wird auf NT umgestellt.
Beim zweiten Durchlauf steht der Predictor auf NT und der Sprung wird nicht genommen, das heisst die Vorhersage ist richtig und der Predictor bleibt auf NT.
Beim Dritten Durchlauf steht der Predictor auf NT, der Sprung wird aber genommen, das heisst die Vorhersage ist falsch und der Prediktor wird auf Taken umgestellt .....
usw ....
Ergibt bei mir quasi:
Durchlauf 1 2 3 4 5
Sprungverlauf nt nt t t nt ....
Vorhersage t nt nt t t .....
Korrektheit F R F R F
Hier gehe ich bei allen Vorhersagewahrscheinlichkeiten davon aus das die nur für die 10 Felder gemeint ist. Ich denke das ist mit stationärer Wahrscheinlichkeit gemeint ??????
Ergibt dann:
C1: 0.5
C2: 0.3
C3: 0.1
D: Sättigung 0.4
D: Hysterese 0.2
Ob das jetzt richtig ist weiss ich allerdings auch nicht .....
Grüsse,
Nasenbär
 
Liquidwolf,
hier mal als Beispiel für den Sättigungszaehler. Wie die schleife durchlaufen wird steht weiter oben (nt nt t t nt nt t t nt nt ...

1. Durchlauf: Der Sättigungszaehler sagt weakly taken voraus, also taken. Der Sprung wird aber nicht genommen, die Vorhersage ist also Falsch und der Sättigungszaehler wird auf Weakly Not Taken umgestellt.

2. Durchlauf: Der Sättigungszaehler sagt Weakly Not Taken, also Not Taken voraus und der Sprung wird nicht genommen. Die Vorhersage war also richtig und der Sättigungszaehler wird auf Strongly Not Taken gestellt.

3. Durchlauf: Der Sättigungszaehler sagt Strongly Not Taken, also Not Taken voraus, der Sprung wird diesmal aber genommen. Die Vorhersage ist also falsch und der Sättigunszaehler wird auf Weakly Not Taken gestellt.

4. Durchlauf: Der Sättigungszaehler sagt Weakly Not Taken, also Not Taken voraus. Der Sprung wird aber auch diesmal genommen. Die Vorhersage ist also wieder falsch und der Sättigungszähler wird auf Weakly Taken gestellt.

Beim nächsten Durchlauf haut er wieder daneben weil er ja jetzt auf Weakly Taken, also Taken steht der Sprung jetzt aber nicht genommen wird.

Beim Hysteresezaehler ändert sich dann wie der Zaehler hin und herspringt ...

Ich hoffe das ist richtig (alles natürlich ohne Garantie ...) und illustriert bzw. erklärt die Vorgehensweise ...
Schöne Grüsse,
Nasenbär
 
5. Wenn in der Aufgabe steht, dass die Zahlen im Zweierkomplement angegeben sind, dann ist das ein Indikator dafür, dass da auch negative Zahlen vorkommen; Beispiel: FA als Binärcode: 1111 1010 Das höchstwertige Bit gibt an, ob es sich um eine positive Zahl (0) oder eine negative Zahl handelt (1); In diesem Fall ist es also eine negative Zahl und ist in Dezimalform (ich mach es mal ausführlich): -1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+0*2^0 = -128 + 64 + 32 + 16 + 8 + 0 + 2 + 0 = -6
@Zwilling79
Danke für den helfenden Hinweis. Was mich ein wenig wundert: Wir haben ein Skript in dem so 100 technische Details in 2 Abschnitten stehen und bekommen in den EA´s Rechenaufgaben ohne vorher ein Beispiel oder Erklärung oder auch nur ein Hinweis dazu im Skript gesehen zu haben. Um wirklich weiter zu kommen muss man dann viel googeln. Empfinde das nur ich so, oder weichen die Aufgaben völlig vom Skript ab - nach dem Motto Fernstudium - auch fern vom Skript?? Ich hab das Gefühl ich muss alles selber herausbekommen - dazu kommt, das nichtmal die Fragen im Modle-Forum beantwortet werden - 🙁. Stand irgendwo was zu Zweierkomplement oder Umwandlung von Zahlen?
 
@Zwilling: ich brauch mal deine Hilfe. bin leicht verwirrt: bei A1 + 10 und 25 +38 bist du aber nicht so wie in deinem Beispiel vorgegangen:
Beispiel: FA als Binärcode: 1111 1010 Das höchstwertige Bit gibt an, ob es sich um eine positive Zahl (0) oder eine negative Zahl handelt (1); In diesem Fall ist es also eine negative Zahl und ist in Dezimalform (ich mach es mal ausführlich): -1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+0*2^0 = -128 + 64 + 32 + 16 + 8 + 0 + 2 + 0 = -6

Wie ist es nun richtig?
 
inzwischen hab ich eine neue frage zur aufgabe 5 und wäre über aufklärende Hilfe dankbar: woher weiß man ob eine oder wie viele 0 vor einer zahl stehen um bestimmen zu können ob es plus oder minus ist. Beispiel: FA als Binärcode: 1111 1010 . warum nicht 0000 1111 1010? Hat jemand eine ausführliche Lösung zur Aufgabe 5 der ea2? ich hab so viel unterschiedliches gegoogelt das ich zum Thema zweierkomplement nur noch verwirrt bin. hiiiiiilllllfffe😕

Nachtrag:
gut, das 2 hexazahlen 8 bit darstellen hab ich nun rausgefunden, ich hab aber trotzdem andere erbebnisse als Zwilling ???
 
ich habe auch Probleme mit der Aufgabe 5....
gibt es dort eine allgemeine Vorgehensweise?
bei den ersten zwei Additionen bin ich mit der Vorgehensweise richtig gelegen.
Hex -> Dezimal -> Werte addieren -> Hex

Bei der dritten Aufgabe 76/CD komm ich bei 76 auch auf 118, aber bei CD auf 205 ???? und nicht auf -51

Wenn ich dann 118 + 205 rechne = 323 und das in Hex umrechne, kriege ich 143 aber nicht 43 raus.

Auch bei der vierten Aufgabe passt es nicht ganz: Da komme ich auf 250+184 = 434 , dass dann in Hex bin ich bei 1B2 aber nicht B2 ....

Ich glaub meine Vorgehensweise ist falsch....
Wer kann helfen?

@saschkai
mir gehts leider auch so. Im Skript steht nix zu irgendwelchen Aufgaben drin und irgendeine Vorgehensweise. Aber in der EA dann nur solche Aufgaben..... fand ich in der EA1 auch schon so...das erschwert das Ganze ungemein...
 
infernum,
ich glaub wir haben uns in Nürnberg zur Prüfung OOP mal kennen gelernt, oder?
Nachdem uns das Uni-Skript hier nicht hilft, hab ich viel gegoogelt und war zunächst nur noch mehr verwirrt.
Jetzt hab ich ein gutes kurzes Skript zu Zahlenformaten, vorzeichenbehafteter Addition, Zweierkomplement hier gefunden: https://www.leichsenring-homepage.de/mathematik/ma-lv-zahlenformate.pdf

Eine binäre zahl, z.B 1111 kann man als 15 verstehen, oder im zweierkomplement als -1 interpretieren

1111=
15, ist klar: 2^0 + 2^1 + 2^2 + 2^3

Um den Wert einer Zahl mit Vorzeichen zu lesen muss man das Zweierkomplement bilden (negieren und 1 dazu zählen, siehe unten, bzw. im Link). Einfacher geht es so:

1111=
-1, weil: 2^0 + 2^1 + 2^2 - 2^3 ergibt.

Oder so:

negieren und 1 addieren:
1111 -> 0000 -> +1 -> 0001 = 1,
Das Minus wird dadurch angezeigt, dass die erste Zahl eine 1 ist

Die hexadezimalschreibweise ist dann nur die Kurzform der binären Zahl.

Ausführlich aber doch kurz und leichtverständlich steht es im LINK.

Ich komme damit auf folgende Ergebnisse (Wenn ich mich nicht verrechnet habe) :

A1 + 10
= 1010 0001 + 0001 0000
= -95 + 16
= -79 dezimal
= B1 hexadezimal

25 + 38
= 0010 0101 + 0011 1000
= 37 + 56
= 93 dez
= 5D hex

76 + CD
=0111 0110 + 1100 1101
=118 + (-39) ups verrechnet ist (-51)
= 79 dez (67)
= 4F hex (43)

FA + B8
= 1111 1010 + 1011 1000
= (-6) + (-72)
= -78 dez
= 4E hex (B2)

Bis ich nix anderes höre geh ich davon aus dass es passt. 😉
lg
Sascha

Nachtrag: Was mir grad auffällt:
Die negativen Ergebnisse müssten ja vor Umwandlung in hexa wieder negiert werden 🙄

z.B -79 = 79 als bin: 0100 1111 negiert &+1: 1011 0001 und dann als hex:
und
-78 als bin: 0100 1110 negiert &+1 : 1011 0010 und dann als hex: B2
 
Saschkai,

bist du dir sicher das du richtig gerechnet hast?

z.b

25 + 38 du hast so gerechnet: 0010 0101 + 0011 1000

sollte die 25 auf 8 bit nicht so lauten: 0001 1001....!

z.b von der Tabelle

-128 64 32 16 8 4 2 1

0 0 0 1 1 0 0 1 => 16 + 8 +1 = 25...

bin mir auch unsicher.

gruss

Naja
 
z.b

25 + 38 du hast so gerechnet: 0010 0101 + 0011 1000

sollte die 25 auf 8 bit nicht so lauten: 0001 1001....!

hallo naja,

ich geh davon aus, dass die 25 ein hexadezimalzahl ist und keine dezimale, weil ich denk dass Rechner intern doch immer nur mir binärzahlen rechnen. die hexadezimale Darstellung ist die Kurzform der binären, weil man 8 bit mit nur 2 hexadezimalen Zahlen darstellen kann.
 
zuerst in binär umwandeln, und das zweierkomplemet bilden
-79 = 79 als bin: 0100 1111 negiert &+1: 1011 0001 und dann als hex:

von hand geht Dez zu hex wie binär nur mit Potenz 16, deshalb würde ich den wert des zweierkomplements der sich ja relativ leicht ablesen lässt so umwandeln:

1011 0001 = 177 dezimal

177 : 16 = 11 R 1 -> 1
11 : 16 = 0 R 11 -> B

= B1

falls TR nicht erlaubt ist, könnte man ja auf Hilszettel
2^0 bis 2^16 notieren. und wenn auch kein Zettel erlaubt ist müssten wir halt auswendig lernen, aber die Umwandlung von hand geht über dez zu bin zu hex und umgekehrt , die bin kann dann negiert werden wenn nötig

Nachtrag:
eine binärzahl z.B. 1011 0001 ist interpretierbar als 177 oder als - 79 im zweierkomplement. der Rechner subtrahiert so indem er nur addiert: xy + (-79) statt xy - 79
 
@saschkai
ok danke schonmal die Hilfe. Muss ich mir aber nochmal in Ruhe anschauen und durchrechnen.

Ich habs in dem anderen Thread schon gepostet, evtl. sollten wir uns auf einen Thread zu EA2 20046 einigen. Da dieser doch ursprünglich älter ist/war. Ist einfach übersichtlicher so.
 
Die Umrechnung in DEZ kann man sich sparen.
Wenn man einfach von Hand 2 Binärzahlen (das ist das schöne an der Zweierkomplementdarstellung) addiert, kommt sofort das richtige Ergebnis raus:
z.B.: 76 + CD = 01110110 + 11001101 = 01000011 (= 43)
Wenn man mag kann man auch direkt die beiden HEX-Zahlen addieren. Einen möglichen Übertrag (also mehr als 8 Bit) einfach vorne abschneiden, d.h. FA + B8 = 1B2 => B2
 
@dirk:
ja, stimmt. ich hab eine kleine Unsicherheit beim addieren mit binärzahlen, vielleicht kannst du mir helfen:

z.B

..0110
+0111
.__1__
....?01

wenn ich von hand von rechts nach links addiere, hab ich manchmal drei 1 untereinander, was kommt
dann unten hin? 0 und 1 gemerkt oder 1 und 1 gemerkt?
 
0110 + 0111 = 1101 (Kontrolle: 6 + 7 = 13)
Man geht von rechts nach links und addiert jeweils - wie beim klassischen Schul-Addieren von Hand - mit oder ohne "Eins im Sinn", also 0 + 1 = 1, und 1 + 1 = 0 und Eins im Sinn (Übertrag). Was mich da anfangs etwas verunsichert hat ist der 3. Fall: Man hat von der letzten Stelle schon einen Übertrag von 1 (im Sinn) und rechnet nun 1 + 1 + 1 (Übertrag) = 11 => also 1 hinschreiben und wieder 1 im Sinn behalten und für die nächste Stelle mitnehmen. Letzteres ist der Fall, wo du das ? gemacht hast.
Jetzt muss man nur noch konsequent bei z.B. 8 Bit bleiben, d.h. sollte der 3. Fall bei der letzten Addition (also höchsten Stelle) passieren, kommt die letzte "Eins im Sinn" ins Nirvana.
Noch genauer: Dieser Überlauf-Übertrag = das 9. Bit landet i.d.R. im Carry-Flag (könnte vom Programm dann z.B. abgefragt werden), aber das spielt hier in der konkreten Aufgabe keine Rolle.

Zur Kontrolle kann man natürlich die Zahl (HEX oder BIN) auch in DEZ umrechnen und gewohnt addieren. Dann muss man bei vorzeichenbehafteten 8-Bit-Zahlen (in Zweierkomplementdarstellung) einfach direkt normal addieren und bei "Überlauf" - also das Ergebnis ist > 255 - genau 256 abziehen.
Bsp.: 76 + CD = 43 in DEZ: 118 + 205 = 323 => 323 - 256 = 67 => 43 in HEX

Ok?
 
Hier mal eine für mich zumindest einfachere Weise die Aufgabe 2.5 zu berechnen...

Zuerst die Hexazahlen in Dezimalzahlen umwandeln:
R1: A1=10*16^1+1*16^0=160+1=161
25=2*16^1+5*16^0=37
76=7*16^1+6*16^0=112+6=118
FA=15*16^1+10*16^0=240+10=250
R2: 10=1*16^1+0*16^0=16
38=3*16^1+8*16^0=48+8=56
CD=12*16^1+13*16^0=192+13=205
B8=11*16^1+8*16^0=176+8=184

So dann weden die Zahlen addiert:
z.B A1+10=161+16=177
--> Umwandeln in hexa
177/16=11 rest 1
11/16=0 rest 11 -->B

von unten gelesen: B1

So die Dezimalzahlen addieren und wieder um wandel

Ich komme damit auf das Ergebnis: B1 5D 43 B2

Vielleicht hiflts den einem oder anderen!
 
Hier mal eine für mich zumindest einfachere Weise
ja so einfach geht das auch😀
also ich für meinen teil hab mich viel zu lang an den für mich neuen begriff zweierkomplement aufgehangen. man muss wirklich einfach nur addieren, ob nun in hexa, dez oder bin. umwandeln um zu sehen ob ein wert ein Vorzeichen hat war hier ja nicht gefordert. das einfachste wäre gewesen die hexadezimalen zahlen zu addieren.
im Nachhinein bin ich aber doch froh so kompliziert gedacht zu haben, weil ich jetzt einiges mehr über Zahlensysteme weiß 😀 .. wenn da nur nicht der blöde Zeitdruck wäre..
 
@Cronkalonc: Ich glaube deine Reihenfolge funktioniert so nicht. SUB R4,R1,R3 nutzt zu Berrechnung das mit der Operation ADD R3,R1,R2 erzeugte "neue" R3. Dadurch passt dann der Rest meiner Ansicht nach auch nicht mehr.

@Nasenbär: Du hattest auf der letzten Seite zu 12b den XOR R6,R7,R8 an zweiter Stelle gepostet. Glaube das geht nicht weil das R6 welches XOR nutzt ja erst durch SUB R6,R2,R1 erzeugt wird.

Ich hätte für die 12b diesen Vorschlag zu machen:

ADD R3,R1,R2
SUB R6,R2,R1
AND R5,R2,R1
NOP
SUB R4,R1,R3
XOR R6,R7,R8
NOP
NOP
ADD R1,R4,R5

14a: stimme ich Nasenbär zu.
14b: biete ich mal 0,60;0,40;0,40 an.
14c1-3:gleiche Ergebnisse wie Nasenbär.
 
Oben