Hey, meine Frage bezieht sich auf folgende Klausurfrage (im Anhang). Allein für die 16 Register benötigt man ja schon 4 Bit um diese zu adressieren. Weiter weis ich leider nicht, vielleicht kann mir jemand da weiter helfen. Danke schon mal im voraus^^.
Überleg mal, wie ein Befehl mit den einzelnen Addressierungsarten aussieht und was dir die restlichen Zahlenangaben sagen sollen. Im Zweifelsfall einfach mal je ein Beispiel aufschreiben und daran weiterüberlegen.
In Punkt a "Der Wert des Operanden..." ist die Angabe recht speziell formuliert. Wieso klappt's dann aber in Punkt c?
:
Bearbeitet durch User
Stefan L. schrieb: > Allein für die 16 Register benötigt man ja schon 4 Bit um diese zu > adressieren. Vielleicht ist dir nicht klar, dass hier nicht die Codierung des gesamten Befehls gemeint ist, sondern nur jener Teil darin, der einen Operanden des Befehls codiert. Diese 4 Bits spielen also nur dann eine Rolle, wenn dieser Operand ein Register nutzt.
Wäre eine richtige antwort für die a) : 12 Bit Für folgenden asm-code: mov eax, (0-215) 4 Bit um das Register zu adressieren + 8 Bit die nötig sind um (0 - 215) darzustellen?
Stefan L. schrieb: > Wäre eine richtige antwort für die a) : > > 12 Bit (1) Die in lesbare Form übersetze Forderung muss einen Wertebereich von 0..2^16-1 zulassen. Es geht um den möglichen Wert, nicht im den im Befehl konkret angegebenen Wert. (2) Wo ist da ein Register? (3) Grundlagen: Was ist in diesem Kontext ein immediater Wert? Abgesehen vom grauenvollen Deutsch.
:
Bearbeitet durch User
(prx) A. K. schrieb: > Was ist ein immediater Wert? Abgesehen vom grauenvollen > Deutsch. Hier ist nicht Grundschuldeutsch gefragt sondern ein etablierter Fachbegriff aus Technik. Ist sogar im Duden zu finden: https://www.duden.de/rechtschreibung/immediat
SCNR schrieb: > Hier ist nicht Grundschuldeutsch gefragt sondern ein etablierter > Fachbegriff aus Technik. Immediates sind mir zwar schon oft begegnet, aber noch nie in der sprachlichen Form immediater Operanden. > Ist sogar im Duden zu finden Ja: "dem Staatsoberhaupt unterstehend". Das hilft zweifellos beim Verständnis weiter. ;-)
:
Bearbeitet durch User
Kein einziges sinnvolles Suchergebnis für den deutschen Begriff "immediat". (Aber wenn du in deiner Lieblingssuchmaschine "Immediater Opperand" eingibst, bekommst du jede Menge sinnvolle Ergebnisse für "Immediate Operand".) Hätte der Prof den englischen Fachbegriff benutzt, bräuchte uns Stefan nicht fragen, hätte die Antwort im Netz gefunden.
Zum 68000 "Mikro Prozessor" gab es von Motorola höchstselbst ein deutsches "Benützer Handbuch". Da wird das zu unmittelbarer Adressierung direkter Daten, mit einem mir bis dahin unbekannten Singular: "Die direkte Date wird mit dem Zieloperanden..".
:
Bearbeitet durch User
Stefan L. schrieb: > meine Frage bezieht sich auf folgende Klausurfrage (im Anhang). Hach, solche Aufgabenstellungen, die von einem Lehrer mit 2 linken Händen verfaßt wurden, "liebe" ich über alle Maßen. Der Kerl setzt solch einen Sack an Randbedingungen voaus (die er aber nicht genannt hat), daß das richtige Ergebnis eher ein Zufallsprodukt sein dürfte. a) immediate: Also etwa sowas LD R5,#4711 (vulgo "lade Register 5 mit der Zahl 4711) Da dein Lehrer am Anfang schrieb, daß dieser Prozessor 32 Bit Daten verarbeitet, müßte die Zahl also volle 32 Bit belegen, dazu kommt noch die Nummer des Registers, wo das hin soll. Was er dann aber vom Wert des Operanden schwafelt, paßt nicht dazu. Man kann mit Einschränkungen für die Daten auch mit weniger Bit auskommen, ob das hier aber so gedacht ist, bleibt unklar. Ganz allgemein kommt es auf die generelle Architektur an. MIPS und klassischer ARM sind 3 Register-Maschinen, also etwa so: LD Register_a mit der Verknüpfung von Register_b und Register_c. Aber vermutlich meint dein Lehrer etwas anderes, nämlich Maschinen, bei denen einer der Operanden zugleich Ziel der Operation ist, weswegen man dann eine der Adressangaben weglassen kann. b) Hier wäre nachzufragen, ob er "Register-indirekt" meint. Also, wo ein Register in der CPU als Zeiger auf den eigentlichen Operanden dient. Aber auch hier steht die Frage nach der Architektur, ob alle Register als Adreßzeiger dienen können oder nur einige. Allgemein indirekt würde alle adressierbaren Speicherstellen im Rechner einbeziehen, womit deren Adresse im Befehlswort unterzubringen wäre. c) Hier hat er sich etwas präziser ausgedrückt: "Register-indirekt mit Displacement". Auch hier die Frage, ob alle Register oder nur wenige oder gar nur eines. Kurzum, diese Aufgabenstellung setzt eine Reihe von Randbedingungen voraus, die man beachten sollte, die aber ungenannt sind. Viel Glück! W.S.
W.S. schrieb: > Da dein Lehrer am Anfang schrieb, daß dieser Prozessor 32 Bit Daten > verarbeitet, müßte die Zahl also volle 32 Bit belegen Zwischen der Operandenbreite und der Codierung von Konstanten im Befehl gibt es keinen direkten Zusammenhang. Der Wertebereich des Operanden ist direkt angegeben, aber in interpretationsbedürftiger Weise, weil die Satz-Software auf Schrott-rein-Schrott-raus entschied. > Was er dann aber vom Wert des > Operanden schwafelt, paßt nicht dazu. Man kann mit Einschränkungen für > die Daten auch mit weniger Bit auskommen, ob das hier aber so gedacht > ist, bleibt unklar. Doch, das passt. Diverse 32-Bit RISC, etwa PowerPC und MIPS, können im Befehlswort Konstanten mit 16 Bit Breite codieren. Genau das ist mit "0(10) und (216-1)(10)" = dezimal 0..2^16-1 gemeint. > Auch hier die Frage, ob alle Register oder nur wenige > oder gar nur eines. Das ist deutlich genug. Wenn man hier von allen Registern ausgeht, weil keine Einschränkung genannt ist, wird es kaum einen Punktabzug geben können. Mit "unvollständige Fragestellung" als Antwort hingegen schon. Ausser vielleicht in Jura, aber da wird sowas nicht abgefragt. Analog sollte man auch bei indirekter Adressierung Razors Law beachten und vom einfacheren Fall ausgehen. Kenner speicherindirekter Adressierung kommen allmählich ins Rentenalter.
:
Bearbeitet durch User
Ich "rate" mal: 1) 8 Bit: Opcode und Registerzahl sind uninteressant, es ist nur die Breite des gegebenen Wertebereiches 0 bis (216-1 = 215) (Basis 10). (prx) A. K. schrieb: > (1) Die in lesbare Form übersetze Forderung muss einen Wertebereich von > 0..2^16-1 zulassen. Bei Aufgabe 3 wurden die Exponenten deutlich markiert. "216" bzw. 215, ist zwar tatsächlich etwas wenig plausibel, aber könnte Absicht sein, um die Kenntniss des Antwortenden über Binärdarstellung zu testen, oder um zu verwirren. 2) 32 Bit: ungefähr: "die CPU verarbeitet Daten und Adressen mit 32-Bit" Der Pointer zu den Daten kann also im ganzen Adressbereich liegen. 3) 20 Bit: 4Bit für das Register + 16 Bit Displacement. Der Opcode und für die Befehlsausführung notwendige weitere Register, etc. sind meines Verständnisses nach unwichtig, es geht nur darum Daten zu adressieren und zu zeigen, dass man die gefragten Adressierungsmodi kennt. Warum diese krampfhaften Übersetztungsversuche englischer Fachbegriffe ins Deutsche, anstatt sich damit abzufinden, dass dieses Vorgehen in vielen Fällen das Verständniss erschwert oder sogar unmöglich macht. Das war vielleicht bis maximal in die 80er Jahre sinnvoll, weil gute Englischkenntnisse damals noch nicht ganz so selbstverständlich vorrausgestzt werden konnten, wie heute. Warum man nicht konsistent bei der einmal getroffenen Sprachwahl (für Fachbegriffe) bleibt, erschliesst sich mir nicht (zB. Aufg.3, displacement).
Beitrag #7107893 wurde vom Autor gelöscht.
123 schrieb: > Warum diese krampfhaften Übersetztungsversuche So etwa wie Kellerspeicher-Stapelzeiger? Ich meine, es liegt nicht in der Sprachwahl, sondern der Ärger kommt hoch, wenn eine zu bewertende Aufgabenstellung so unvollständig formuliert wurde, daß ein unangemessen hoher Interpretationsspielraum sich daraus ergibt. Typische (und zugleich auf die Spitze getriebene) Frage: Sprich, Heinrich, wie hältst du es mit der Religion? W.S.
123 schrieb: > aber könnte Absicht sein, um > die Kenntniss des Antwortenden über Binärdarstellung zu testen, oder um > zu verwirren. Neigst du zu Verschwörungstheorien? ;-) Das war einfach bloss Schludrigkeit bei der Eingabe der Formel in einem Satzsystem wie beispielsweise TeX oder den hiesigen Forenbeiträgen, in dem das Ergebnis nicht schon zu sehen ist, wenn man sie eintippt. Unzählige Leute sind daran verzweifelt, dass hier bei a b c im Desktop-Modus keine Division dasteht, im der Vorschau und im Mobil-Modus hingegen schon, weil die Forensoftware die beiden Schrägstriche als Kennzeichnung von kursiv ansieht. Ob Andreas das wohl absichtlich so verwirrend gebaut hat?
:
Bearbeitet durch User
Stefan L. schrieb: > Weiter weis ich leider nicht, vielleicht kann mir jemand da weiter > helfen. Den Teil a) mit der Formulierung "0(10) und (216-1)(10)" würde ich dem Autor dieses Klausurfragenblattes links und rechts um die Ohren klatschen. Offensichtlich sind ihm beim Verfassen des Zettels sämtliche Formatierungen abhanden gekommen und er hat es nicht für nötig befunden, diese nachzuarbeiten bevor er den Zettel raus gibt.
(prx) A. K. schrieb: > Unzählige Leute sind daran verzweifelt, dass hier bei a b c im > Desktop-Modus keine Division dasteht, im der Vorschau und im Mobil-Modus > hingegen schon, weil die Forensoftware die beiden Schrägstriche als > Kennzeichnung von kursiv ansieht. Ob Andreas das wohl absichtlich so > verwirrend gebaut hat? Für Texte, die nicht diesen Formatierungszeichen unterliegen sollen, hat Andreas absichtlich die "pre"-Tags erfunden.
1 | a / b / c |
Forist schrieb: > Für Texte, die nicht diesen Formatierungszeichen unterliegen sollen, hat > Andreas absichtlich die "pre"-Tags erfunden. So ist es. Und wenn man sich innerhalb der "math"-Tags vertippt, dann sieht es ziemlich bekloppt aus. Wie es auch in der Aufgabe ziemlich bekloppt aussieht, weil sich ihr Autor bei der Notation zur Formeldarstellung vertippt hat. Beispiel:
:
Bearbeitet durch User
Der Formatter wertet den Schrägstrich auch dann aus, wenn ein Leerzeichen folgt. Das halte ich für einen Fehler.
1 | a / b / c |
2 | a/b/c |
3 | a /b/ c |
Ergebnis ein post vorher
Stefan L. schrieb: > Allein für die 16 Register benötigt man ja schon 4 Bit um diese zu > adressieren. Push ESP hat beim Intel typischerweise nur 8 Bit Opcode Push all aber auch (5A) Man muss gewisse Dinge im Zusammenhang betrachten (Sprünge haben beim Intel normalerweise auch nur 8 Bit Opcode), dann fällt auch der Groschen leichter, und das ist wichtig, man hat nicht ewig Zeit, wenn es entwicklungstechnisch um die Wurst geht. Also: die Unterlagen vom Prof hersuchen, um auf einen ersten grünen Zweig zu kommen, wäre eine dringende Empfehlung (man kann am Anfang recht schnell durcheinander kommen - das ist aber hinsichtlich der nötigen Geschwindigkeit kontraproduktiv). Der Hinweis mit dem Vertipper ist auch ziemlich gut bzw. vielleicht sollte man doch nicht zu lange in die Unterlagen des Profs schauen.. ;) Auf jeden Fall müsste man noch eine Mindestbitbreite im System ausmachen. Wenn die 16-Bit-Register nicht aufgeteilt werden können, wäre man schon bei 16 Bit.
rbx schrieb: > Auf jeden Fall müsste man noch eine Mindestbitbreite im System > ausmachen. Irrelevant. > Wenn die 16-Bit-Register nicht aufgeteilt werden können, wäre > man schon bei 16 Bit. Die Register von ARM können nicht aufgeteilt werden. Trotzdem ist in keinem Befehl eine 32-Bit Konstante enthalten. > Push ESP hat beim Intel typischerweise nur 8 Bit Opcode > Sprünge haben beim Intel normalerweise auch nur 8 Bit Opcode Wirst dich schon entscheiden müssen, ob dein Begriff des Opcodes die hier gefragte Operandenspezifikation einschliesst. Wenn ja, dann hat PUSH<reg> 8 Bits und kurze Sprünge 16. Wenn nein, dann hat PUSH<reg> 5 Bits und die Sprünge haben 8. Aber beide 8 Bits haut nicht hin.
:
Bearbeitet durch User
(prx) A. K. schrieb: > Aber beide 8 Bits haut nicht hin Das stimmt. Die Sprungweite muss bei Jumps ja auch noch dabei sein bzw. das Ziel. Aber wie ich oben schon geschrieben hatte, man kann durcheinander kommen. Letztlich steht oben auch "16 General-Purpose-Register" und nicht 16 Bit Register. Netter wäre gewesen, von z.B. 17 GPR-Registern zu schreiben, oder auch nur von einem, das würde nämlich für die Grundüberlegungen reichen. Man könnte auch noch ein einen Stackcompi denken, hinsichtlich der Frage, wieviel Bits braucht es tatsächlich. Allzuweitweg vom Format der Zahlen ist man da auch nicht.
Allenfalls ein, zwei ASM Implementationen anschauen. Resp das Instruction Manual der Prozessoren. Ich empfehl zB das Instruction Manual von AVR, Das PIC und das vom 8086. Die ersten zwei fuer die Basics, dann fortgeschritten.
Purzel H. schrieb: > Allenfalls ein, zwei ASM Implementationen anschauen. Resp das > Instruction Manual der Prozessoren. Die ursprüngliche Frage bezieht sich vermutlich nicht auf einen konkreten Prozessor, sondern ist abstrakt formuliert. Und anders als hier mitunter behauptet halte ich sie abgesehen von dem Tippfehler für ausreichend spezifiziert, um sinnvoll beantwortet zu werden. Man sollte sich bei solchen Fragen lieber nicht aus dem Kontext der Frage hinaus gehend auf einen konkreten Prozessor beziehen, denn sonst fliegt man bei willkürlichen Änderungen der Fragestellung aus der Kurve.
:
Bearbeitet durch User
(prx) A. K. schrieb: > Man sollte sich bei solchen Fragen lieber nicht aus dem Kontext der > Frage hinaus gehend auf einen konkreten Prozessor beziehen, denn sonst > fliegt man bei willkürlichen Änderungen der Fragestellung aus der Kurve. Ja, man soll ja auch begründen, was man meint, und kann sich den Prozessor leicht selbst ausdenken. Wobei leicht.. Die Frage könnte auch sein, ob mov R1 42 und mov R1 Speicherstelle die gleiche Bitbreite haben müssen. Sinnvollerweise ja. Wenn man aber mit Index anfängt, bieten sich Ansätze zu sparen? Toll ist natürlich, wenn man mov Ri [R2+R3+R4+16] oder ähnliches machen kann. Und es macht auch Spaß, gute Bücher über die Computergeschichte (auch hinsichtlich gewisser Patente) zu lesen. Das Lesen eines Buches reicht aber nicht unbedingt aus, um tatsächlich zu verstehen was Sache ist. Man sollte gelernt haben im Stack oder anderswo im Speicher zu navigieren, automatisierte Befehle + Indexierhilfe anwenden können usw.
Danke schonmal für die vielen Antworten. Ich habe mir über die Aufgabe auch nochmal Gedanken gemacht vielleicht hätte ich noch spezifizieren sollen dass es sich wahrscheinlich um eine LOAD-STORE Architektur handelt (war so der Standard in der Vorlesung). Wenn man nun bedenkt dass ein Maschinenbefehl folgenden Aufbau hat: OP.C|OP.Z|OP.1|OP.2 OP.C => OpCode OP.Z => Zielregister OP.1/2 => Operandenregister OP.Z und OP.1/2 bilden die Operandenspezifikation (für die die mind. Anzahl an Bit gesucht wird) So wie ich das verstanden habe müssen Werte mit denen man in einer LOAD-STORE Architektur arbeitet immer in den Registern vorhanden sein (Ausnahme LOAD Befehl wo man den Wert den man braucht aus den Arbeitsspeicher holt und dessen Adresse in einen Register liegt in ASM z.B. mov eax, [ebx] ) Daher wären meine Antworten: a) Unmittelbare Adressierung z.B. mov eax, 5 4 Bit um eax zu adressieren und dann noch 16 Bit für den Wert => 20 Bit insgesamt b) indirekte Adressierung z.B. mov eax, [ebx] Wieder 4 Bit für eax, aber nun ist die Frage die ich mir Stelle sind es nun 4 Bit für die Adressierung von ebx oder wird unter der Haube schon die Adresse die in ebx liegt verwendet wodurch ich dann 32 Bit brauche? c) Registerindirekt mit Displacement z.B. mov eax, [ebx + 8] Wieder 4 Bit für eax und selbe Frage wie bei der b) ist es nun 4 Bit für ebx oder 32 Bit für die Adresse in ebx. Dazu kommen noch 16 Bit für das Displacement. Hoffe das dazu noch jemand eine Antwort hat. Danke Euch schonmal im vorraus^^
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.