Willkommen! Einloggen Ein neues Profil erzeugen

erweitert

Der DW-Befehl

geschrieben von Magmaster 
Der DW-Befehl
10.02.2010 16:20:40
Gibt es einen logischen Grund, warum man den DW-Befehl nicht benutzen darf, außer zur Definierung der zu berechnenden Zahlen?

Also wenn man sich jetzt zum Beispiel eine Maske erstellen will im Stil 111...11 (verXORt mit einer Zahl gibt deren Komplement). Dann kann man diese Zahl nicht einfach in eine Speicherzelle reinschreiben, da man DW -1 nicht benutzen darf und JUMP nicht funktioniert, da er nur ein 24-stelliges Argument verwenden darf, dh. es kommt F8FFFFFF raus, auf Grund der drei nicht benutzten Stellen nach der Befehlscodierung 11111.

Dh. man kann die Maske nur vom Programm berechnen lassen, was irgendwie unständlich ist und auch nicht der Realität entspricht, denn wenn man ReTI tatsächlich mit Lochkarten füttern würde, wäre es ja kein Umstand, 32 mal zu stanzen.

Auch das Argument, ReTI kennt kein Befehl, stimmt ja nicht so ganz. ReTI kennt schließlich auch kein LOAD ACC 12, er kennt nur dessen Befehlscodierung. Der Compiler (und nicht ReTI) ist es ja, der den DW Befehl umwandelt und auch alle anderen, dh. ReTI muss den DW Befehl gar nicht kennen.

Übrigens, ich schätze mal, dass man DW 2147483648 (=STORE 0) nicht auswerten kann, ist kein Bug, sondern funktioniert wenn man DW -2147483648 verwendet, wg. des Zweierkomplements.
Re: Der DW-Befehl
10.02.2010 16:58:25
Magmaster schrieb:

> Also wenn man sich jetzt zum Beispiel eine Maske
> erstellen will im Stil 111...11 (verXORt mit einer
> Zahl gibt deren Komplement). Dann kann man diese
> Zahl nicht einfach in eine Speicherzelle
> reinschreiben, da man DW -1 nicht benutzen darf
> und JUMP nicht funktioniert, da er nur ein
> 24-stelliges Argument verwenden darf, dh. es kommt
> F8FFFFFF raus, auf Grund der drei nicht benutzten
> Stellen nach der Befehlscodierung 11111.

um eine Maske 111...1 zu erstellen kannst du z.B. folgendes machen:

00 LOADI ACC 0
01 SUBI ACC 1
02 STORE 42 ; nun: M[42] = 111..1

> Dh. man kann die Maske nur vom Programm berechnen
> lassen, was irgendwie unständlich ist und auch
> nicht der Realität entspricht, denn wenn man ReTI
> tatsächlich mit Lochkarten füttern würde, wäre
> es ja kein Umstand, 32 mal zu stanzen.
> Auch das Argument, ReTI kennt kein Befehl, stimmt
> ja nicht so ganz. ReTI kennt schließlich auch
> kein LOAD ACC 12, er kennt nur dessen
> Befehlscodierung. Der Compiler (und nicht ReTI)
> ist es ja, der den DW Befehl umwandelt und auch
> alle anderen, dh. ReTI muss den DW Befehl gar
> nicht kennen.

Das Argument ist in erster Linie: es soll ein ReTI-Programm geschrieben werden und kein Neumi-Programm, d.h. es sollen ausschließlich Befehle benutzt werden, die auf der Übersichtsfolie zu den ReTI-Befehlen stehen. Natürlich könnte man der ReTI (so man sie denn real baut) trotzdem eine Konstante irgendwie "reinbrennen" und das würde man "in der Realität" vielleicht auch so machen.
Aber, wie gesagt: in den Aufgaben sollen nur ReTI-Befehle Verwendung finden. Und mit oben genannter Methode kann man in drei Zeilen nahezu jede beliebige Zahl irgendwohin schreiben - das sollte nicht zu aufwendig sein. Sieh es hier einfach als eine zusätzliche "Schwierigkeit" an. Ich würde aber auch postulieren, dass du in den Übungsaufgaben von Konstanten nicht allzu häufig gebrauch machen wirst - bei den shifts brauchte man das an nur einer Stelle und bei der Aufgabe im aktuellen Blatt braucht man das gar nicht.


> Übrigens, ich schätze mal, dass man DW
> 2147483648 (=STORE 0) nicht auswerten kann, ist
> kein Bug, sondern funktioniert wenn man DW
> -2147483648 verwendet, wg. des Zweierkomplements.

Das könnte durchaus sein... hab ich jetzt nicht ausprobiert, klingt aber plausibel. Der beschriebene Bug bezieht sich allerdings auch darauf, wenn man "DW 0x80000000" schreiben will (also wirklich hexadezimal angegeben). Anyway: mit STORE 0 ist das Problem umgangen.

Edit:

Um nochmal auf das Argument: "in der Realität" usw. zurückzukommen... In vielen Architekturen hat man Register, die Konstanten beinhalten. Man hat da z.B. Register, die einfach nur eine Konstante 0 oder 1 oder -1 enthalten - einfach mit der Hintergedanken, dass man diese Konstanten häufig braucht. Auf diese Weise hätte man solche Konstanten wie 11111...1 sehr schnell hergezaubert.
Aber deshalb Vorsicht: die ReTI ist ein schönes Spielzeug an dem einige wesentliche Konzepte zu sehen sind, aber sie ist EXTREM (und absichtlich) einfach gehalten und entspricht nicht wirklich dem, was reale Maschinen leisten. Auch der Befehlssatz ist nicht das, was man in realen Maschinen vorfinden würde, aber um die Konzepte zu verstehen, reicht dies.



1 mal bearbeitet. Zuletzt am 10.02.2010 17:19 von Sven Reimer.
Sorry, Sie haben nicht die erforderliche Berechtigung, um in diesem Forum zu schreiben.