Win32Asm Tutorial |
![]() |
назад | 8- Кое-что о числах | вперед | ![]() |
8.0 - Кое-что о числах
Использование целых чисел или 'чисел с плавающей запятой' в большинстве языков программирования зависит только от объявления переменных. На ассемблере они совершенно различны. С 'числами с плавающей запятой', вычисления производятся специальными опкодами и сопроцессором FPU (сопроцессор для операций с 'числами плавающей запятой'). Команды для работы с 'числами с плавающей запятой' будут обсуждены позже. Сначала кое-что о целых числах. На Языке C, есть числа со знаком и без знака. Со знаком означает, что числа имеют знак (+ или -), числа без знака всегда положительны. Смотрите таблицу ниже, чтобы увидеть различия (снова, это пример байта, это работает также, как и с другими размерами):
Значение | 00 | 01 | 02 | 03 | ... | 7F | 80 | ... | FC | FD | FE | FF | ||||||||||||
числа без знака | 00 | 01 | 02 | 03 | ... | 7F | 80 | ... | FC | FD | FE | FF | ||||||||||||
числа со знаком | 00 | 01 | 02 | 03 | ... | 7F | -80 | ... | -04 | -03 | -02 | -01 |
Так для чисел со знаком, байт разбит на два диапазона: 0 - 7F для положительных значений, 80 - FF для отрицательных значений. Для значений dword, так же: 0 - 7FFFFFFFh для положительных, 80000000 - FFFFFFFFh для отрицательных. Как вы могли заметить, отрицательные числа имеют старший разрядный набор, потому что они больше 80000000h. Этот бит называется знаковым битом.
8.1 - Со знаком или без знака?
Ни вы, ни процессор не можете увидеть, какое это число, со знаком или без знака. Хорошие новости, то, что для сложения и вычитания, не имеет значения, число со знаком или без знака:
Вычисляем: -4 + 9
FFFFFFFC + 00000009 = 00000005. (это верно)
Вычислите: 5 - (-9)
00000005 - FFFFFFF7 = 0000000E (это тоже верно ( 5 - -9 = 14)
А теперь плохие новости, то, что результат от умножения, деления или сравнения будет не верным. Следовательно есть специальные mul(умножение) и div(деление) опкоды для чисел со знаком: