Ist NASM inkonsistent oder fehlt mir gerade eine offensichtliche Tatsache mit CMP von sofort?

8

Die "Warnung: signed dword sofort überschreitet Grenzen" ist der Fluch meiner Existenz im Moment, da es inkonsistent zu sein scheint oder ich sehe einfach kein offensichtliches Tatsache.

Ich habe die folgende Struktur deklariert:

%Vor%

Ich habe folgende Zuordnungen:

%Vor%

Und in einer Funktion habe ich:

%Vor%

Ich weiß, ich kann mov rax, INTEGER und dann den Vergleich, aber das scheint unnötig, da der erste Vergleich kein Problem hat.

    
Frank C. 29.10.2016, 10:09
quelle

1 Antwort

10

Es gibt kein CMP r/m64,imm64 .
Es gibt CMP r/m64,imm32 , wobei imm32 auf 64 Bit vorzeichenerweitert ist. Was für 0xfffffffffffffff1 funktioniert, weil 0xfffffff1 vorzeichenerweiterte auf 64 Bits ist 0xfffffffffffffff1 . Aber 0x1000a8a9 vorzeichenerweiterte auf 64 Bits ist 0x000000001000a8a9 , was sich von dem Wert unterscheidet, mit dem verglichen werden soll.

Sie könnten dies z.B. indem Sie zuerst das Unmittelbare in ein Register laden:

%Vor%     
Michael 29.10.2016, 10:19
quelle

Tags und Links