Frage

Ich versuche, eine bitweise UND auf einem Register zu führen, als Bitmaske des höchstwertigen Bits zu entfernen (das Bit 16, wenn das Zählen von 0 bis zufällig). Allerdings, wenn ich versuche, meinen Code mit gcc zu kompilieren, es gibt mir die folgenden Fehlermeldungen:

Assembler-Meldungen: 19: Fehler: Verlagerung Überlauf

Meine Vermutung ist, dass dies etwas mit der Größe des Bit zu tun Maske Ich bewerbe mich, denn wenn ich das AND mit zwei Registern, die kleinen Zahlen führe ich nicht die gleichen Fehler auftreten. Der Code selbst sieht aus wie,

.global main
main:
save    %sp, -96, %sp

clr %l1
clr     %l2
set 0xffff, %l0
set 0xaaaa8c01, %l4
set 0xff001234, %l5
set 0x13579bdf, %l6
set 0xc8b4ae32, %l7
srl %l4, 31, %l1    
srl %l0, 15, %l2
xor %l1, %l2, %l1
and %l1, 0x1, %l1
sll %l0, 1, %l0
add %l0, %l1, %l0
and %l0, 0xffff, %l0


mov 1, %g1
ta  0

Wenn jemand könnte einen Einblick geben, wie dieses Problem zu lösen wäre es sehr geschätzt werden.

Danke,

badPanda

War es hilfreich?

Lösung

Das höchstwertige Bit ist das Bit 15 (in einer 16-Bit-Ganzzahl, wenn die Bits gleich Null sind basierten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top