2010-11-23 18 views
3

Ich bin ein Neuling in der Montage und ich habe eine Frage zu, wie negative Zahlen darzustellen ich drei DWORDS Variable haben, lassen Sie sagen:Wie eine negative Zahl in der Montage berechnen

result DWORD 0 
i DWORD 3 
j DWORD 5 

und ich möchte Berechne diese Formel: result = i - j + 8 aber, wenn ich das ij mache, wird das Ergebnis eine sehr hohe Zahl wegen des Zeichens sein also wie mache ich das Ergebnis am Ende ok?

+1

Was meinen Sie mit "OK"? Die "hohe Zahl", wie Sie es nennen, wäre das angemessene Ergebnis. –

+1

Brian hat recht, deine hohe Nummer ist eigentlich nur eine signierte Version des Ergebnisses. Sie zeigen wahrscheinlich nur die unsignierte Version, wenn Sie denken, dass sie "sehr hoch" ist. –

Antwort

8

Für 32-Bit-DWORD ist der Ganzzahlbereich von -2147483648 bis 2147483647 oder in Hex-0x80000000 bis 0x7FFFFFFF.

Also ist die Nummer -1 wie 0xFFFFFFFF vorhanden. (Wie Zählerunterlauf)

Wenn das High (31) Bit gesetzt ist, ist die Zahl negativ. Um positive Zahl von negativen (Negation) zu machen müssen Sie compement der Nummer machen, und fügen 1.

Beispiel:

0xFFFFFFFE //-2 
xor 0xFFFFFFFF //binary complement 
--------------- 
    0x00000001 //result of complement 
+ 0x00000001 //add 1 
--------------- 
    0x00000002 //Result of negation is 2 
0

Hinweis:

Wenn Sie zwei ganzen Zahlen vergleichen verwenden Sie andere Sprungbefehl absoluten Zahlen als Vergleich:

vergleicht man die absoluten Zahlen:

jg (jump if greater) 
jl (jump if less) 

Vergleich ganze Zahlen (die positiv oder negativ sein können):

ja (jump if greater) 
jb (jump if less) 
Verwandte Themen