Win32asm обучение


Урок 8 - Кое-что о числах


        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(деление) опкоды для чисел со знаком:




- Начало -  - Назад -  - Вперед -



Книжный магазин