Неправильно считываются большие числа - Assembler

Узнай цену своей работы

Формулировка задачи:

К примеру следующие команды дают такой вот результат (Nasm):
mov dword [number], 4294967296 ; тут он сразу даёт ошибку, что и ясно. Число > 2^31 - 1
mov dword [number], 4294967295; вроде бы и число = 2^32 - 1, но выдаёт мне -1
mov dword [number], 4294967294; выдаёт -2
;;; и т.д вплоть до 2147483648, где мы получаем -2147483648
mov dword [number], 2147483647; а вот начиная с числа = 2^31 - 1 всё верно.
Вопросы: 1) почему он игнорирует диапазон от 2^31 до 2^32 - 1 ? 2) и как мне отличить числа 2147483648 и -2147483648 ведь результат один и тот же ?

Решение задачи: «Неправильно считываются большие числа»

textual
Листинг программы
mov AX, 65535
mov BX, 0
cmp AX, BX
jg Label1 ; переход по знаковому сравнению AX > BX, не выполняется (-1 < 0)
ja Label2 ; переход по беззнаковому сравнению AX > BX, выполняется (65535 > 0)

Объяснение кода листинга программы

  1. mov AX, 65535 - переносит в регистр AX значение 65535
  2. mov BX, 0 - переносит в регистр BX значение 0
  3. cmp AX, BX - сравнивает значения в регистрах AX и BX
  4. jg Label1 - если AX больше BX, то переход к Label1 (не выполняется)
  5. ja Label2 - если AX больше BX, то переход к Label2 (выполняется)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы