2010-11-23 2 views
3

Я новичок в сборке и у меня есть вопрос о том, как представлять отрицательные числа у меня есть три DWORDs переменного, скажем:Как рассчитать отрицательное число в сборке

result DWORD 0 
i DWORD 3 
j DWORD 5 

и я хочу вычислите эту формулу: result = i - j + 8 , но когда i i i, результат будет очень большим числом из-за знака , так как я могу сделать результат ok в конце?

+1

Что вы имеете в виду под «OK»? «Высокое число», как вы его называете, будет подходящим результатом. – 2010-11-23 19:48:37

ответ

8

Для 32-разрядного DWORD целочисленный диапазон от -2147483648 до 2147483647 или в hex -0x80000000 до 0x7FFFFFFF.

Таким образом, число -1 присутствует как 0xFFFFFFFF. (Подобно счетному потоку)

Если бит высокой (31) установлен, то число отрицательно. Для того, чтобы положительное число от отрицательных (отрицаний), вы должны сделать compement числа и добавить 1.

Пример:

0xFFFFFFFE //-2 
xor 0xFFFFFFFF //binary complement 
--------------- 
    0x00000001 //result of complement 
+ 0x00000001 //add 1 
--------------- 
    0x00000002 //Result of negation is 2 
0

Примечание:

Если сравнить два числа вы используете другую команду перехода чем сравнивающие абсолютные цифры:

сравнения абсолютных цифр:

jg (jump if greater) 
jl (jump if less) 

Сравнение целых чисел (которые могут быть отрицательными или положительными):

ja (jump if greater) 
jb (jump if less) 
Смежные вопросы