Как рассчитать отрицательное число в сборке - PullRequest
3 голосов
/ 23 ноября 2010

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

result DWORD 0
i DWORD 3
j DWORD 5

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

Ответы [ 3 ]

8 голосов
/ 23 ноября 2010

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

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

Если установлен старший бит (31), то число является отрицательным.Чтобы сделать положительное число из отрицательного (отрицание), вы должны сделать сравнение числа и добавить 1.

Пример:

    0xFFFFFFFE   //-2
xor 0xFFFFFFFF   //binary complement 
---------------
    0x00000001   //result of complement
+   0x00000001   //add 1
---------------
    0x00000002   //Result of negation is 2
0 голосов
/ 02 августа 2018

Отрицательные числа представлены в дополнении к двум в сборке. Чтобы получить дополнение к двум числам, у вас есть два варианта:

  • , чтобы дополнить все его биты и добавить один.
  • , чтобы дополнить все его биты до последнего 1
0 голосов
/ 23 ноября 2014

Примечание:

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

Сравнение абсолютных чисел:

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

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

ja (jump if greater)
jb (jump if less)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...