Безбранчевый переход

Тема в разделе "WASM.BEGINNERS", создана пользователем t00x, 25 ноя 2007.

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Код (Text):
    1.         mov eax, [esi + ebx*4]          ; eax = data
    2.         test eax, eax                   ; ebx = read addres index
    3.         jz @next                        
    4.  
    5.         add edx, 1                      
    6. @next:
    7.         mov [edi + edx*4], eax          ; edx = write addres index
    8.         add ebx, 1
    подскажите, как избавиться от перехода?

    P.S. неиспользуемые регистры есть
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. mov eax, [esi + ebx*4]          ; eax = data
    2. test eax, eax                   ; ebx = read addres index
    3. xor ecx,ecx
    4. setne cl                        
    5. add edx, ecx                      
    6. mov [edi + edx*4], eax          ; edx = write addres index
    7. add ebx, 1
     
  3. Asterix

    Asterix New Member

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

    Код (Text):
    1.         mov eax, [esi + ebx*4]          ; eax = data
    2.         mov ecx,eax
    3.         neg ecx
    4.         adc edx,0
    5.         mov [edi + edx*4], eax          ; edx = write addres index
    6.         add ebx, 1
    по недосмотру забыл убрать test eax,eax
    исправил
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Freeman
    Asterix
    Спасибо.