Forum: PC-Programmierung DLX Simulator


von Mike M. (mikeii)


Lesenswert?

Hi,

ich hab mal ne Frage, evtl kennt sich ja jemand damit aus.

Ich versuche mit dem DLX Simulator direkt einen Integerwert in einem 
Register abzulegen.
Im Befehlssatz gibt es einen Befehl, der LHI heißt, mit folgender 
Beschreibung:

LHI Rd,Imm

Kopiert  den  direkt  angegebenen  16-Bit-Wert  in  die  höhere Hälfte 
von Rd und füllt die unteren 16 Bit mit Nullen.

Das ist ganz schön und gut, aber ich suche eigentlich einen Befehl, der 
die vollen 32 Bit ausnutzt, finde aber keinen.

Ich habe es aber mit zwei Methoden "hingebogen"

Entweder ich nehme das Register 0, das immer null ist, addiere dort 
meine Zahl drauf, in dem Fall 0x15 und speichere das in meinem Register.
Das geht mit dem Befehl ADDI.

Oder ich shifte das ganze um 16 bit nach rechts mit SRA:

Entweder:
ADDI R1,R0,0x15;

Oder:
LHI R2,0x15;
SRA R2,R2,16;


Macht man das so, oder gibt es einen Befehl, der das direkt ausführt?

Danke

von Rainer (Gast)


Lesenswert?

Vielleicht hilft dies:

http://de.wikipedia.org/wiki/DLX-Mikroprozessor#DLX_Befehlssatz

>Instruction                       Instruction meaning
>LB  LH  LW    R1,val(R2)   Load byte  load half word  load word

Rainer

von Mike M. (mikeii)


Lesenswert?

Leider nicht, da diese Befehle laut "echter" Doku dafür da sind, um von 
einem Register den Wert in ein anderes zu Laden...
Ich hatte aber schon versucht einen Wert zu verwenden, da meckert er...

von Andreas B. (andreas_b77)


Lesenswert?

Mike Mike schrieb:
> Kopiert  den  direkt  angegebenen  16-Bit-Wert  in  die  höhere Hälfte
> von Rd und füllt die unteren 16 Bit mit Nullen.
>
> Das ist ganz schön und gut, aber ich suche eigentlich einen Befehl, der
> die vollen 32 Bit ausnutzt, finde aber keinen.

Die Opcodes sind 32 Bit lang, wo soll da noch ein 32 Bit Immediate Platz 
finden? Um eine 32 Bit Konstante zu laden wird es auf ein LHI mit 
folgendem ADDI hinauslaufen.

Wenn nur ein 16 Bit Wert geladen werden muss und R0 immer 0 ist, dann 
"ADDI Rx, R0, #wert". Oder ORI, kommt aufs selbe raus.

In Befehlssätzen werden oft auch Pseudo-Instruktionen definiert, die 
solche Dinge erledigen und Assembler leichter zu schreiben und zu lesen 
machen. Die werden dann vom Assembler in passende 
Maschinen-Instruktionen übersetzt. Etwa "LI Rx, #wert" das dann in 
LHI+ADDI übersetzt würde.

von Mike M. (mikeii)


Lesenswert?

Ah jetzt macht das ganze natürlich Sinn. Da hätte ich auch selber 
draufkommen können.
Danke dir vielmals :)

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.