If Anweisung Assemblersprache

#3161188
Lesenswert?

Sall Pamm schrieb:
> Es ist ein Teil der kompletten Aufgabe und soll das Quadrat einer
> positiven ganzen Zahl n in Assemblercode für den SPIM berechnen.

Ich kenne SPIM nicht.

Aber auf den meisten CPU-Architekturen funktioniert das durch das 
Zusammenspiel von 2 Komponenten:

die eine Komponente vergleicht 2 Einheiten (Register oder Konnstante). 
So ein Vergleich ist im Grunde nichts anderes als eine Subtraktion, bei 
der das Ergebnis verworfen wird. Worauf es ankommt, dass ist das Setzen 
der diversen Status-Flags, wie Zero, Carry und dergleichen.

Die andere Komponente sind diverse bedingte Sprungbefehle, die sich den 
momentanen Zustand der Flags (Zero, Carry, ...) holen und je nachdem 
entweder den Sprung durchführen oder auch nicht.


Und aus diesen beiden Teilen, werden dann eben Abfragen zusammengesetzt.
Gast #3161189
Lesenswert?

Sall Pamm schrieb:

> ich bin ganz neu mit der Assemblerprogrammierung

Das merkt man nur zu deutlich.

> und möchte folgende
> Code mit Assembler programmieren;
>
> if (n<0)
>  n=-n;
>
> Wie kann man es mit der Assemblersprache programmieren?

Das kommt auf mehrere Sachen an. Zum ersten mal das Zielsystem, daraus 
ergibt sich nämlich, welchen Assembler du eigentlich überhaupt benutzen 
mußt und damit, welche Befehle dir zur Verfügung stehen.

Und zum anderen kommt es auch auf die Bitbreite von n an. Je nachdem, ob 
n 8,16,24,32,48 usw. Bit breit ist, wird jeweils anderer Code 
erforderlich sein und zwar für beide Berechnungen, die nötig sind, um 
die Funktionalität des Pseudocodes abzubilden.
Gast #3161192
Lesenswert?

Bei den allermeisten Prozessoren oder Microcontrollern macht man das 
über einen Vergleichsbefehl, bei dem dann Register gesetzt werden, und 
dann einem Sprungbefehl.

zB:

  CMP  r14,r15   (Vergleiche den Wert im Register 14 mit dem Wert in 
Register 15)
  JNE  irgendwas    (Sprung, wenn Werte ungleich zu Adresse oder Label)

Verschiedene Sprungbefehle:
  JNE (Sprung wenn Werte ungleich)
  JEQ (Sprung wenn Werte gleich)
  JZ  (Sprung wenn Wert 0)
  usw.

Die Vergleichs- und Sprungbefehle heissen je nach Prozessortyp anders.
Gast #3161204
Lesenswert?

Eumel schrieb:
> Sall Pamm schrieb:
>> Assemblercode
>
> Weißt du überhaupt was das ist? Anscheinend nicht.

Vor 10/20/30 Jahren (zutreffendes unterstreichen) kanntest du das auch 
nicht.
Und durch solche Statements wie deinem hättest du es auch nicht gelernt.
(Firma: fritzler-avr.de) #3161286
Lesenswert?

MIPS Assembler also.
Dann googlr mal nach der "MIPS Greencard" da stehen ersmal alle befehle 
drauf oder guck auf der Übungsseite deiner Uni/FH.

Ein MIPS kann nur vergleichen auf gleich/ungleich.
Wobei SPIM auch die Pseudoinstruktionen zum vergleichen/springen kennt.

Also was muss gemacht werden:
erstmal auf kleiner prüfen
->wenn dies zutrifft dann nicht springen und das n=-n berechnen
->trifft dies nicht zu, dann die Befehle für n=-n überspringen

wie ändert man das Vorzeichen einer Zahl?
->2er Komplement angucken und mit dem Subtrahierbefehl spaß haben 
(n=0-n)

Wo studierste denn? Die Grundlagen dazu müsste man dir eigentlich schon 
beigebracht haben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren