Forum: PC-Programmierung Wie viel Bit nötig für Operandenspezifikation?


von Stefan L. (stefan_l536)


Angehängte Dateien:

Lesenswert?

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^^.

von Schützt die OPAMP-Tiere! (Gast)


Lesenswert?

Ü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.

von (prx) A. K. (prx)


Lesenswert?

In Punkt a "Der Wert des Operanden..." ist die Angabe recht speziell 
formuliert. Wieso klappt's dann aber in Punkt c?

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

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.

von Stefan L. (stefan_l536)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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
von SCNR (Gast)


Lesenswert?

(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

von (prx) A. K. (prx)


Lesenswert?

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
von Noch ein Kommentar (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von W.S. (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von 123 (Gast)


Lesenswert?

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.
von W.S. (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Forist (Gast)


Lesenswert?

(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

von (prx) A. K. (prx)


Lesenswert?

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
von DerEgon (Gast)


Lesenswert?

a  b  c

a/b/c

a b c

von DerEgon (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

a / b / c

Alt255 statt Leertaste.

von rbx (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von rbx (Gast)


Lesenswert?

(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.

von Purzel H. (hacky)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von rbx (Gast)


Lesenswert?

(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.

von Stefan L. (stefan_l536)


Lesenswert?

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
Noch kein Account? Hier anmelden.