Moin,
kann mir mal jemand den Unterschied der o.g. Befehle _konkret_ erklären, bzw. erklären, was beim Assembler „signed“ bzw. „unsigned“ konkret bedeutet?
Dank & Gruß,
-doc.
PS: Bezogen auf den AVR ATmega163.
Moin,
kann mir mal jemand den Unterschied der o.g. Befehle _konkret_ erklären, bzw. erklären, was beim Assembler „signed“ bzw. „unsigned“ konkret bedeutet?
Dank & Gruß,
-doc.
PS: Bezogen auf den AVR ATmega163.
Hi,
MUL multipliziert zwei nicht vorzeichenbehaftete (unsigned) Zahlen miteinander. Das Ergebnis wird ebenfalls nicht vorzeichenbehaftet sein.
MULS multipliziert zwei vorzeichenbehaftete Zahlen miteinander, das Ergebnis kann vorzeichenbehaftet sein (ein bestimmtes Register zeigt das in der Regel an).
MULSU multipliziert eine vorzeichenbehaftete Zahl mit einer vorzeichenbehafteten Zahl.
Auf das Vorzeichen achten zu müssen ist manchmal etwas umständlich, hängt eben immer von der Art der Variablen ab.
Das ganze müsste aber auch im Datenbuch des Prozessors stehen. Auch, welche Prozessorflags bei der Operation beteiligt sind.
Gruss,
Herb
Hallo,
danke für Deine Erklärung bis hier.
Das ganze müsste aber auch im Datenbuch des Prozessors stehen.
Auch, welche Prozessorflags bei der Operation beteiligt sind.
Naja, steht da eben nur so mittel drin. Vor allem hab ich noch nicht rausgefunden, was für Datentypen es gibt und wie ich die definiere.
Gruß,
Doc „Assembler ist irgendwie komisch“ Valde.
Hallo Doc
kann mir mal jemand den Unterschied der o.g. Befehle _konkret_
erklären, bzw. erklären, was beim Assembler „signed“ bzw.
„unsigned“ konkret bedeutet?
Vorzeichenbehaftetet Ganzzahlen werden im 2er-Komplement dargestellt.
Als Beispiel arbeite ich hier mit 8-Bit-Werten:
FFh entspricht bei Vorzeichenlosen Zahlen 255d bei Vorzeichenbehafteten aber -1.
Eine 8-Bit Multiplikation, der Werte FFh mit 16 Bit Resultat ergibt:
(ohne Vorzeichen) 255d * 255d = 65’025d = FE01h
(mit Vorzeichen) -1 * -1 = 1 = FFFFh
Du siehst also, dass da jenachdem etwas anders gemacht werden muss. In der Praxis müssen, bei Vorzeichenbehafteten Zahlen, die absoluten Werte miteinander multipliziert werden. Die Berechnung des Vorzeichens geschieht separat (Eine einfache XOR-Verknüpfung der Vorzeichen) und das Resultat wird dann entsprechend wieder mit einem Vorzeichen (als 2er-Komplement) ausgestattet, sofern nötig.
Auf den ersten Blick wirken die Assembler-Befehle für Addition, Subtraktion, Multiplikation und insbesonders Division (Früher bestand die Unterstützung für MUL und DIV meist nur aus den Bit-Schiebe-Befehlen ) meist etwas „unfertig“. Dies relativiert sich aber schnell, wenn man z.B. 32-Bit Arithmetik mit für eine 8-Bit CPU implementiert.
MfG Peter(TOO)
P.S. Assembler ist nicht komisch, sondern ein Weg, um mit kleinen (Rechen-)Schritten grosse Aufgaben zu bewältigen !