Выставление флага CF при вычитании (x86)

Тема в разделе "WASM.BEGINNERS", создана пользователем Vadimcg, 11 авг 2017.

Метки:
  1. Vadimcg

    Vadimcg New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    6
    Правильны ли мои мысли: флаг переноса выставляется при вычитании из меньшего большего. Например :
    mov eax ,1
    cmp eax,2
    jb truWay
    В двоичном виде: 1=00000001 2=00000010=11111101+1(доп код)=11111110
    и 00000001+11111110=11111111 -Почему выставляется флаг переноса? Ведь самого переноса нет... или я неправ?
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    Потому что перевод в дополнительный код аналогичен вычитанию числа из нуля. Потому и neg устанавливает флаг переноса, если операнд отличен от нуля.
     
  3. Vadimcg

    Vadimcg New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    6
    А можно ссылку? или более подробно на примере моих чисел?
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    Мое мнение недостаточно авторитетно для тебя? :)

    Если вычитание заменяем сложением, то имеем два значения флага переноса - один от neg и второй от add. В результате их ксорим и записываем значение в CF.
     
  5. _edge

    _edge Active Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    432
    Адрес:
    Russia
    есть книжка, гуглится "злобин григорьев программирование арифметических операций в микропроцессорах", например
     
  6. Pavia

    Pavia Active Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.147
    Адрес:
    Fryazino
    Нету тут neg. Вычитание идёт по прямой схеме справа на лево. И в данном случае флаг cf - означает не перенос, а заём.
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    Pavia,
    Очевидно же, что речь о процессорах без аппаратного вычитателя :)
     
  8. Pavia

    Pavia Active Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.147
    Адрес:
    Fryazino
    В теме указан x86. А там это исторически сложилось. Для других архитектур будет подругому.
     
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    Да какой нормальный человек названия тем читает? :)
    По контенту смотреть надо, а там второй операнд переводится в дополнительный код, из чего следует, что дальнейший разговор идет о таком x86, где вычитание заменяется сложением.
     
  10. Pavia

    Pavia Active Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.147
    Адрес:
    Fryazino
    Ну так я по контексту и посмотрела. Вычитание заменяется сложением. Но алгоритм neg+1 даёт не верное значение флагов сравнения. А значит флаг должен быть либо скорректирован либо вычислен по классической схеме. В x86 ручную корректировку флагов для сравнения не применяют.
     
  11. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    Ой, все :)
     
  12. Indy_

    Indy_ Active Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    863
    Это же просто заём.
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    3
    Регистрация:
    25 июн 2008
    Сообщения:
    2.420
    Картинки из Ч.Пэтцольд «Код» — М.: Издательско-торговый дом «Русская Редакция», 2001. — 512 стр.: илл., глава 13 «А как же вычитание?»
    схема для получения дополнительного кода
    00.png
    Если сигнал Инверсия = 0, все восемь выходов вентилей XOR повторяют сигнал на входах. Если сигнал Инверсия = 1, все восемь выходов вентилей XOR инвертируют входной сигнал.
    00.png
    При вычитании содержимое Carry Flag инвертируется
     

    Вложения:

    • 00.png
      00.png
      Размер файла:
      8,8 КБ
      Просмотров:
      38
    Коцит нравится это.
  14. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.540
    А, нет, он там управляющий сигнал на вход CI завернул. Вот хитрый, с.ка :)
     
    Mikl___ нравится это.
  15. Indy_

    Indy_ Active Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    863
    Pavia,

    > Ну так я по контексту и посмотрела.

    wtf!?

    Не знал что вы девчёнка, врядле это опечатка, так как на клаве л-а далеко друг от друга :blush:
     
  16. Vadimcg

    Vadimcg New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    6
    спасибо всем)