Флаг знака и Водосливный Флаг не функционируют согласно ожиданию

Предположим AX=8FFE и BX = 0FFF
Теперь, если мы пишем

Cmp ax,bx 

Теперь в этой точке, что произойдет, источник (основной обмен) будет вычтен от места назначения (топор), и соответствующие флаги будут обновлены. Как компьютер представляют каждое число в 2’s, дополнительная форма так 8FFE 2’s, дополнение некоторого числа так же 0FFF 2’s дополнение некоторого числа.

Как в 2’s дополняют вычитание, реализован дополнением, таким образом, мы добавляем эти два числа путем преобразования их в двоичный файл.

 8FFE---------->    1000    1111    1111    1110
0FFF---------->    0000    1111    1111    1111
                   --------------------------------
                   1001    1111    1111    1101 

Теперь это - результат, который является 9FFD в шестнадцатеричном числе.

Поскольку Вы видите, что никакое переполнение не произошло, и знаковый бит является 1 из результата.

Вопрос: С этим воображением, что флаг знака должен быть установлен и водосливный флаг
Должен остаться 0, я проверил это в отладчике, но я нашел Противоположность его
то есть, флаг знака остается 0, и водосливный флаг равняется 1. Теперь скажите мне почему
это происходит?

1
задан starblue 24 May 2010 в 15:04
поделиться

1 ответ

Думаю, вы вычитали неправильно. Мой результат:

8FFE---------->    1000    1111    1111    1110
0FFF---------->    0000    1111    1111    1111
                   ----------------------------------
7FFF---------->    0111    1111    1111    1111     

произошло то, что операция заимствована только из знакового бита. Это означает, что должен быть установлен флаг OF. Прочтите здесь о сборке CF (Carry) и OF (Overflow) flag , http://en.wikipedia.org/wiki/Carry_flag , http: // en. wikipedia.org/wiki/Overflow_flag. Это означает, что это была подписанная операция, это неверно. если он был без подписи, то нормально.

2
ответ дан 3 September 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: