Forum: Mikrocontroller und Digitale Elektronik If Anweisung Assemblersprache


von Sall P. (numb)


Lesenswert?

Hallo an alle,

ich bin ganz neu mit der Assemblerprogrammierung und möchte folgende 
Code mit Assembler programmieren;

if (n<0)
 n=-n;

Wie kann man es mit der Assemblersprache programmieren?

von 6A66 (Gast)


Lesenswert?

Sall Pamm schrieb:
> Hallo an alle,
>
> ich bin ganz neu mit der Assemblerprogrammierung und möchte folgende
> Code mit Assembler programmieren;
>
> if (n<0)
>  n=-n;
>
> Wie kann man es mit der Assemblersprache programmieren?

Welcher Prozessor????

rgds

von Eumel (Gast)


Lesenswert?

Sall Pamm schrieb:
> der Assemblersprache

Die gibt es nicht. Auf welcher Plattform soll dein Programm denn laufen?

von Sall P. (numb)


Lesenswert?

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

von Eumel (Gast)


Lesenswert?

Sall Pamm schrieb:
> Assemblercode

Weißt du überhaupt was das ist? Anscheinend nicht.

von Karl H. (kbuchegg)


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.

von c-hater (Gast)


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.

von Eumel (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> SPIM

Google brachte die Erleuchtung.
http://de.wikipedia.org/wiki/SPIM_%28Software%29
Eine MIPS32 Simulator.

von hobbyprogrammierer (Gast)


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.

von hobbyprogrammierer (Gast)


Lesenswert?

Beim Vergleich werden die Flags gesetzt, nicht die Register. Sorry.

von hobbyprogrammierer (Gast)


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.

von Reinhard Kern (Gast)


Lesenswert?

hobbyprogrammierer schrieb:
> Vor 10/20/30 Jahren (zutreffendes unterstreichen) kanntest du das auch
> nicht.

Das ist doch das Schöne, wenn man es mal zum Einäugigen geschafft hat - 
dann kann man auf den Blinden rumtrampeln.

Gruss Reinhard

von Eumel (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Das ist doch das Schöne, wenn man es mal zum Einäugigen geschafft hat -
> dann kann man auf den Blinden rumtrampeln.

Ich treff die aber immer so schwer, das räumliche Sehen fällt mir nicht 
so leicht, kennst du bestimmt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


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.

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.