переменная инициализация в сборке для IA-32 - PullRequest
0 голосов
/ 18 ноября 2008

У меня есть вопрос об инициализации переменной в сборке MASM.

Как я могу инициализировать 2 ^ 32 в переменную и какую переменную я должен инициализировать? DWORD или REAL4?

Я пытаюсь сделать это так:

val DWORD 2.0E+32

Когда я назначаю var регистру (например, mov eax, val) и пытаюсь записать значение, я вижу что-то, что не 2 ^ 32. Я также попробовал это с типом REAL4. Результат все тот же.

Так что я тут не так делаю?

Заранее спасибо ...

Ответы [ 2 ]

3 голосов
/ 18 ноября 2008

2 ^ 32 = 4294967296 = 0x100000000 (это 8 нулей).

2.0E+32 равно 2 * 10 ^ 32 = 200000000000000000000000000000000, полностью другое число. Это также число с плавающей запятой, тогда как 0x100000000 является целым числом.

2 голосов
/ 18 ноября 2008

2 ^ 32 - это немного больше числа, которое поддерживает dword, позвольте мне добавить несколько диапазонов:

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

если REAL4 является 4-байтовой плавающей точкой, то она имеет совершенно другую структуру, чем целое число. Если вы используете x86, то в этом формате будут представлены плавающие точки, вероятно, IEEE 754 . Это поддерживает число 2 ^ 32, но вы можете столкнуться с проблемами точности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...