Wie überprüft man, ob eine vorzeichenbehaftete Ganzzahl neg oder pos ist?

8

Ich bin neu in der x86-Assemblersprache, ich habe eine signierte Ganzzahl im Register eax gespeichert, und ich möchte überprüfen, ob die Zahl negativ oder positiv ist. Um dies zu tun, habe ich bt Anweisung verwendet, um das erste Bit zu überprüfen.

Folgendes habe ich getan:

%Vor%

bt trägt das erste Bit zum Tragen des Flags, und ich habe jnc verwendet, um zu prüfen, ob das Übertragsflag 0 oder 1 ist. Wenn es 1 ist, sollte es eine negative Zahl sein und negative Anweisungen ... Allerdings ist die Ausgabe unvorhersehbar, manchmal habe ich eine positive und es erkennt es als eine negative Zahl. Mache ich etwas falsch?

EDIT: Mir ist gerade klar geworden, dass es etwas mit Endianess zu tun haben könnte. Es prüft tatsächlich das letzte Bit anstelle des ersten Bits. Lassen Sie mich versuchen, bt , 7

zu verwenden     
Yonk 25.10.2010, 17:57
quelle

3 Antworten

15

Der Wert ist negativ, wenn das MSB gesetzt ist. Es kann mit

überprüft werden %Vor%

oder, einfacher:

%Vor%

oder für Byte-Fall:

%Vor%     
ruslik 25.10.2010, 18:02
quelle
4

Sie können die Anweisungen jge und cmp verwenden:

%Vor%     
nmichaels 25.10.2010 18:03
quelle
1

Ihre aktuelle Lösung prüft, ob die Zahl gerade oder ungerade ist. Testen Sie stattdessen das 31. Bit:

%Vor%

Oder Sie können die Zahl mit Null vergleichen und testen, ob sie größer oder gleich ist.

%Vor%     
Joe D 25.10.2010 18:02
quelle

Tags und Links