Неправильно считываются большие числа - Assembler
Формулировка задачи:
К примеру следующие команды дают такой вот результат (Nasm):
Вопросы:
1) почему он игнорирует диапазон от 2^31 до 2^32 - 1 ?
2) и как мне отличить числа 2147483648 и -2147483648 ведь результат один и тот же ?
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 всё верно.
Решение задачи: «Неправильно считываются большие числа»
textual
Листинг программы
mov AX, 65535 mov BX, 0 cmp AX, BX jg Label1 ; переход по знаковому сравнению AX > BX, не выполняется (-1 < 0) ja Label2 ; переход по беззнаковому сравнению AX > BX, выполняется (65535 > 0)
Объяснение кода листинга программы
- mov AX, 65535 - переносит в регистр AX значение 65535
- mov BX, 0 - переносит в регистр BX значение 0
- cmp AX, BX - сравнивает значения в регистрах AX и BX
- jg Label1 - если AX больше BX, то переход к Label1 (не выполняется)
- ja Label2 - если AX больше BX, то переход к Label2 (выполняется)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д