Правильны ли мои мысли: флаг переноса выставляется при вычитании из меньшего большего. Например : mov eax ,1 cmp eax,2 jb truWay В двоичном виде: 1=00000001 2=00000010=11111101+1(доп код)=11111110 и 00000001+11111110=11111111 -Почему выставляется флаг переноса? Ведь самого переноса нет... или я неправ?
Потому что перевод в дополнительный код аналогичен вычитанию числа из нуля. Потому и neg устанавливает флаг переноса, если операнд отличен от нуля.
Мое мнение недостаточно авторитетно для тебя? Если вычитание заменяем сложением, то имеем два значения флага переноса - один от neg и второй от add. В результате их ксорим и записываем значение в CF.
есть книжка, гуглится "злобин григорьев программирование арифметических операций в микропроцессорах", например
Нету тут neg. Вычитание идёт по прямой схеме справа на лево. И в данном случае флаг cf - означает не перенос, а заём.
Да какой нормальный человек названия тем читает? По контенту смотреть надо, а там второй операнд переводится в дополнительный код, из чего следует, что дальнейший разговор идет о таком x86, где вычитание заменяется сложением.
Ну так я по контексту и посмотрела. Вычитание заменяется сложением. Но алгоритм neg+1 даёт не верное значение флагов сравнения. А значит флаг должен быть либо скорректирован либо вычислен по классической схеме. В x86 ручную корректировку флагов для сравнения не применяют.
Картинки из Ч.Пэтцольд «Код» М.: Издательско-торговый дом «Русская Редакция», 2001. 512 стр.: илл., глава 13 «А как же вычитание?» схема для получения дополнительного кода Если сигнал Инверсия = 0, все восемь выходов вентилей XOR повторяют сигнал на входах. Если сигнал Инверсия = 1, все восемь выходов вентилей XOR инвертируют входной сигнал. При вычитании содержимое Carry Flag инвертируется
Pavia, > Ну так я по контексту и посмотрела. wtf!? Не знал что вы девчёнка, врядле это опечатка, так как на клаве л-а далеко друг от друга