2008-11-18 7 views
0

J'ai une question sur l'initialisation de variables dans l'assemblage de MASM.initialisation de variable dans l'assembly pour IA-32

Comment puis-je initialiser 2^32 à une variable et à quel type de variable dois-je initialiser? DWORD ou REAL4?

J'essaie de le faire comme:

val DWORD 2.0E+32 

Quand j'assign var à un registre (. Par exemple eax mov, val) et essayer d'écrire la valeur, je vois quelque chose qui est pas 2^32. J'ai aussi essayé avec le type REAL4. Le résultat est toujours le même.

Alors qu'est-ce que je fais mal ici?

Merci à l'avance ...

+0

N'est-ce pas juste 0xFFFFFFFF? –

+0

C'est (2^32) - 1. –

Répondre

3

2^32 = 4294967296 = 0x100000000 (c'est 8 zéros).

2.0E+32 est 2 * 10^32 = 200000000000000000000000000000000, un complètement nombre différent. C'est aussi un nombre à virgule flottante, alors que 0x100000000 est un nombre entier.

2

2^32 est un peu plus grand nombre que ce que dword supports, laissez-moi jeter dans certaines gammes:

0 <= dword < 2^32 
0 <= qword < 2^64 
-2^31 <= sdword < 2^31 
-2^63 <= sqword < 2^63 

si REAL4 est un virgule flottante de 4 octets alors il a une structure complètement différente de ce nombre entier a. Si vous utilisez x86 alors le format des points flottants sont représentés dans IEEE 754. Cela prend en charge 2^32 -nombre mais vous pouvez rencontrer des problèmes de précision.