Необходимо оптимизировать

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asterix, 1 сен 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    boozook

    > тогда почему



    Потому что <font color="red]0 xor 0 = 0</font><!--color-->
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    boozook

    > а вообще лучше так



    Стрёмно, что-то я туго соображаю в каком случае будет CF=1
     
  3. boozook

    boozook New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2003
    Сообщения:
    18
    Адрес:
    Russia
    0 xor 0 = 0

    Верно, самому было лень об этом думать =)



    в каком случае будет CF=1

    Дык когда из нуля единицу вычитаем, нет? флаг же не бывает больше?
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Дык когда из нуля единицу вычитаем, нет? флаг же не бывает больше?



    Правильно, если приемник < источник'а, то CF=1, это я протупил.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    boozook

    Да, с sub + jc получается красиво. Для наглядности можно заменить эквивалентом:
    Код (Text):
    1. cmp eax,flag
    2. jb @@label  ;jb = jc, если unsigned ниже
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Можно ещё добавить "sbb flag,0" если нужно обнулить до прыжка
     
  7. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    bogrus

    нельзя, тогда значение cf обнулится и прыжка не будет
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus

    "Можно ещё добавить sbb flag,0"

    Не понял, а какой тогда должен быть переход ?

    (1-0-1=0 и 0-0-0=0 - неоднозначность)



    PS: Black_mirror "нажал кнопку" раньше.
     
  9. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Не , это я нажал кнопку раньше , причём зря :)
     
  10. boozook

    boozook New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2003
    Сообщения:
    18
    Адрес:
    Russia
    leo

    Для наглядности можно заменить эквивалентом

    Даже нужно, если обнулять флаг при помощи eax
    Код (Text):
    1.  
    2. and flag,eax
    3.  


    ,чтобы избавиться от зависимости
     
  11. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    boozook

    Лучше(короче)

    mov flag,eax
     
  12. boozook

    boozook New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2003
    Сообщения:
    18
    Адрес:
    Russia
    Ну, если flag - переменная локальная, тогда одинаково получиться... если нет, и есть свободный регистр, то короче будет обращаться к ней по указателю.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Asterix, boozook

    Чего-то я не понял, чем отличаются по размеру and, mov и dec. По крайней мере, если вначале загрузить адрес flag:
    Код (Text):
    1. mov edx, offset  flag
    2. cmp eax,[edx]
    3. jb @@label
    4. ...
    5. @@label:
    6. dec [edx] ;==and [edx],eax == mov [edx],eax
    здесь любой из 3-х приведенных вариантов будет двухбайтным
     
  14. boozook

    boozook New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2003
    Сообщения:
    18
    Адрес:
    Russia
    leo

    Просто, если не загружать адреса в edx, а использовать непосредственную адресацию, тогда mov будет 5 байт(т.к. один из операндов аккумулятор), а and и dec по 6...
     
  15. boozook

    boozook New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2003
    Сообщения:
    18
    Адрес:
    Russia
    В случае с косвенной адресацией этого приемущества уже нет, т.к. используется другой опкод для mov'а.