FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Technische Informatik

T3 - Assembler sra-Befehl

T3 - Assembler sra-Befehl 2004-11-26 10:03
Anonymer User
was macht eigetnlcich sra wernn da z.b. sra %l2, 31, %l0 steht?
Ich kann es mir denken, vielleicht eine arithmetische verschiebung, aber was passiert da genau, wenn z. b. %l2, weiss ich nicht, vielleicht 50 ist oder 20 ?

Re: T3 - Assembler sra-Befehl 2004-11-26 10:39
a nonymous user
Guckst du hier:

http://www.harbormist.com/assy/shift.htm

Re: T3 - Assembler sra-Befehl 2004-11-26 12:34
Fred
sra %l2, 31, %l0
Dieser Befehl kopiert das Vorzeichenbit von %l2 in alle Bits von %l0.

%l2 positiv: %l0 = 0x00000000 %l2 negativ: %l0 = 0xFFFFFFFFSieht aus, als wenn das als Bitmaskenerstellung genutzt wird… in welchem Kontext tritt der Befehl auf?

vielleicht eine arithmetische verschiebung
Richtig. Bei einer arithmetischen Rechtsverschiebung werden die oberen Bits mit dem Vorzeichenbit gefüllt. Bei einer logischen Rechtsverschiebung mit 0.

aber was passiert da genau, wenn z. b. %l2, weiss ich nicht, vielleicht 50 ist oder 20 ?
Wenn die Zahl positiv ist unterscheidet sich der arithmetische Shift ja gar nicht vom logischen.

Re: T3 - Assembler sra-Befehl 2004-11-26 14:15
chris
Sieht aus, als wenn das als Bitmaskenerstellung genutzt wird… in welchem Kontext tritt der Befehl auf?

Der Sun-CC übersetzt "foo = (a >> b)" in sra…

Re: T3 - Assembler sra-Befehl 2004-11-26 14:31
Fred
in welchem Kontext tritt der Befehl auf?
Der Sun-CC übersetzt "foo = (a >> b)" in sra…
Naja, der ">>" ist ja auch der Rechtsschiebeoperator. Ob daraus nun ein srl oder sra wird entscheidet dann der Typ von a; vorzeichenbehaftete Zahlen müssen natürlich mit sra behandelt werden, vorzeichenlose mit srl.

EDIT: Falls b eine Variable ist wird das zweite Argument des Shift Befehls natürlich kein Immediate sein sondern ein Register.

EDIT: Chris, inwiefern beantwortet eigentlich Dein Posting meine Frage nach dem Kontext? Ein Shift ist für sich alleine betrachtet ja erstmal bedeutungslos. Ich will wissen, was vor und nach dem foo = … steht [img]http://www.fb18.de/gfx/25.gif[/img]

Re: T3 - Assembler sra-Befehl 2004-11-26 15:13
UncleOwen
Ob daraus nun ein srl oder sra wird entscheidet dann der Typ von a; vorzeichenbehaftete Zahlen müssen natürlich mit sra behandelt werden, vorzeichenlose mit srl.

<edit>
If E1 has a signed type and negative value, the resulting value is implementation-defined.
(c99, 6.5,7, Absatz 5)
</edit>
Sprich: Der Compiler kann auch einfach alles mit srl übersetzen. Oder er kann auch shifts von negativen Werten mit or übersetzen. Oder Dein Haus abfackeln. Er muss es nur dokumentieren.[img]http://www.fb18.de/gfx/15.gif[/img]

Re: T3 - Assembler sra-Befehl 2004-11-26 22:35
Eddie
Aha, das hatte ich mich auch schon gefragt. Noch mehr Kopfzerbrechen bereitet mir allerdings, was das "and &l0,-2,%l1" in
ld [%fp+68],%l2
sra %l2,31,%l0
and %l0,1,%l1
add %l2,%l1,%l0
and %l0,-2,%l1
sub %l2,%l1,%i5
zu bedeuten hat.

Re: T3 - Assembler sra-Befehl 2004-11-26 22:46
UncleOwen
Setzt das least significant bit auf 0.

Re: T3 - Assembler sra-Befehl 2004-11-27 00:59
Fred
ld [%fp+68],%l2 ! "x" nach %l2 laden sra %l2,31,%l0 ! %l0 = 0 falls x positiv, -1 sonst and %l0,1,%l1 ! %l1 = 0 falls x positiv, +1 sonst add %l2,%l1,%l0 ! %l0 = x falls x positiv, x+1 sonst and %l0,-2,%l1 ! %l1 = auf gerade Zahl abgerundetes %l0 ! also x Richtung 0 gerade abgerundet sub %l2,%l1,%i5 ! %i5 = Divisionsrest von x/2 (Richtung 0 gerundet)
Es hat also den Anschein, dass jemand den Divisionrest bei der Division einer vorzeichenbehafteten Zahl durch 2 erhalten wollte (mit der Rundung Richtung 0 statt zur niedrigeren Zahl)… oder?

Re: T3 - Assembler sra-Befehl 2004-11-27 01:09
Fred
vorzeichenbehaftete Zahlen müssen natürlich mit sra behandelt werden, vorzeichenlose mit srl.
If E1 has a signed type and negative value, the resulting value is implementation-defined.
Sprich: Der Compiler kann auch einfach alles mit srl übersetzen. Oder er kann auch shifts von negativen Werten mit or übersetzen.
Halte ich für Unsinn. Das "implementation-defined" wird sich auf die Rundung beziehen (sieht man ja sehr schön an dem geposteten Code), sprich: soll -1 geteilt durch 2 bei -1 bleiben (die -0.5 wird zur nächstniedrigeren Zahl gerundet) oder 0 werden (die -0.5 wird Richtung 0 gerundet)?

Setzt das least significant bit auf 0.
Das hat jetzt sicherlich jeder auf Anhieb verstanden [img]http://www.fb18.de/gfx/16.gif[/img]

Wenn man mit bitweise-and arbeitet, dann gibt man ja als Bitmaske immer in Form von Einsen an, welche Stellen man BEHALTEN möchte. Falls man aber lieber angeben möchte, welche Stellen man LÖSCHEN möchte, so muss man natürlich die Bitmaske gedanklich per XOR invertieren (x ^ 0xFFFFFF). Dies entspricht aber gerade der Subtraktion von -1 (man überlege sich noch einmal, wie das Zweierkomplement funktioniert).

EDIT: Wenn man also das unterste Bit löschen möchte, subtrahiert man die 1 von der -1 und kommt auf -2.

Re: T3 - Assembler sra-Befehl 2004-11-27 01:21
UncleOwen
If E1 has a signed type and negative value, the resulting value is implementation-defined.
Sprich: Der Compiler kann auch einfach alles mit srl übersetzen. Oder er kann auch shifts von negativen Werten mit or übersetzen.
Halte ich für Unsinn. Das "implementation-defined" wird sich auf die Rundung beziehen
Die englische Sprache ist da eigentlich recht eindeutig. "the resulting value is implementation-defined". Vor allem, wenn im Satz vorher der Wert von E1 >> E2 definiert wird, aber nur für die Fälle, dass E1 entweder unsigned, oder signed und nicht-negativ ist.

Re: T3 - Assembler sra-Befehl 2004-11-27 19:41
Fred
Dann zeige mir bitte den Compiler, der mein Haus anzündet, wenn ich -128 durch 2 teilen möchte [img]http://www.fb18.de/gfx/23.gif[/img]

Re: T3 - Assembler sra-Befehl 2004-11-27 20:59
Brokkoli
gib mir eine hardware die die funktion "haus anzünden" implementiert [img]http://www.fb18.de/gfx/28.gif[/img]

Re: T3 - Assembler sra-Befehl 2004-11-27 21:11
georg
Und alle:

And it burns, burns, burns
The C-Compiler
The C-Compiler

Re: T3 - Assembler sra-Befehl 2004-11-27 22:36
Eddie
ld [%fp+68],%l2 ! "x" nach %l2 laden sra %l2,31,%l0 ! %l0 = 0 falls x positiv, -1 sonst and %l0,1,%l1 ! %l1 = 0 falls x positiv, +1 sonst add %l2,%l1,%l0 ! %l0 = x falls x positiv, x+1 sonst and %l0,-2,%l1 ! %l1 = auf gerade Zahl abgerundetes %l0 ! also x Richtung 0 gerade abgerundet sub %l2,%l1,%i5 ! %i5 = Divisionsrest von x/2 (Richtung 0 gerundet)
Es hat also den Anschein, dass jemand den Divisionrest bei der Division einer vorzeichenbehafteten Zahl durch 2 erhalten wollte (mit der Rundung Richtung 0 statt zur niedrigeren Zahl)… oder?

Irgendwie habe ich das Gefühl, dass der Compiler mehr macht, als ich eigentlich von ihm wollte… [img]http://www.fb18.de/gfx/3.gif[/img]


Und alle:

And it burns, burns, burns
The C-Compiler
The C-Compiler

Hey, das Lied kommt auch auf die FB18-Hit-CD. [img]http://www.fb18.de/gfx/10.gif[/img]
(Ich hoffe nur, niemand hat das Informatikum per ssh abgefackelt. [img]http://www.fb18.de/gfx/8.gif[/img])

Re: T3 - Assembler sra-Befehl 2004-11-27 23:03
TriPhoenix
gib mir eine hardware die die funktion "haus anzünden" implementiert [img]http://www.fb18.de/gfx/28.gif[/img]

Alte Trommel(?)-Drucker. Die sind der Grund warum noch heute im Linux-Kernel das ON_FIRE-Flag vorhanden ist [img]http://www.fb18.de/gfx/24.gif[/img]

Re: T3 - Assembler sra-Befehl 2004-11-27 23:31
leif
gib mir eine hardware die die funktion "haus anzünden" implementiert [img]http://www.fb18.de/gfx/28.gif[/img]
Zum Atari XL gab es die Urban Legend, man könne mit entsprechenden Anweisungen die (nicht modifizierte) Hardware überhitzen und zerstören.

Re: T3 - Assembler sra-Befehl 2004-11-27 23:50
Fred
Es hat also den Anschein, dass jemand den Divisionrest bei der Division einer vorzeichenbehafteten Zahl durch 2 erhalten wollte (mit der Rundung Richtung 0 statt zur niedrigeren Zahl)… oder?
Irgendwie habe ich das Gefühl, dass der Compiler mehr macht, als ich eigentlich von ihm wollte… [img]http://www.fb18.de/gfx/3.gif[/img]
Hast Du denn mit einer vorzeichenbehafteten oder vorzeichenlosen Zahlen gearbeitet?

Re: T3 - Assembler sra-Befehl 2004-11-28 00:16
georg
Hey, das Lied kommt auch auf die FB18-Hit-CD. [img]http://www.fb18.de/gfx/10.gif[/img]
(Ich hoffe nur, niemand hat das Informatikum per ssh abgefackelt. [img]http://www.fb18.de/gfx/8.gif[/img])

Dann mach ich den Refrain noch vollständig:

I logged in for my burning C-Compiler
X went down, down, down
And the flames went higher
And it burns, burns, burns
My C-Compiler
My C-Compiler

[img]http://www.fb18.de/gfx/10.gif[/img]