регистре AX = 7FFF (в десятичной системе это число 32767), а в регистре BX = 0FFF (в десятичной системе это -1). У меня возник вопрос. Как при сравнении этих операндов результат получилось отрицательное значение, если 32767 - (-1) = 32768, или в шестнадцатеричном системе это 8000h?
0fff это не -1
0ffff это -1 для слова
А точнее 0x8000.
0x8000 это -16268
Отрицательные числа только у тебя в голове (и в некоторых инструкциях).
Ещё варианты будут?
Потому что 8000h это отрицательное число, там поднят старший бит
Тоесть, если значение превысил регистр AX, то значение станет отрицательным?
Нет, знак числа определяется его старшим битом
Знак числа выбираешь только ты. Оно может быть и отрицательным, и положительным одновременно.
А еще есть регистр флагов
И что, он привязывается ко всем инструкциям, и его обязательно учитывать?
Ну почти ко всем арифметическим
А, ну тогда понятно
Он ни на что не влияет, это просто как подсказка.
Ну да, кроме того, что нам придется делать отдельную функцию/макрос сложения знаковых чисел чтобы избежать ошибок подобных тем что я описал
число шредингера
Обсуждают сегодня