Трюки программирования или PrintHex во всей красе

Тема в разделе "WASM.ASSEMBLER", создана пользователем PROFi, 25 май 2006.

  1. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    SII
    +1
    max7C4
    Диапазон опкодов из под INC/DEC REG (40-4F) теперь используется под REX преффикс (он один а не куча :))) - в любом случае для INC/DEC есть альтренатива через FFC0. Половина регистров (R8-R15) теперь адресуются только через префикс, но ведь в х32 их и не было (!!!) - так что ваши возмущения совершенно непонятны :))
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    dermatolog
    а то что декодирование префикса дает лишние задержки конвеера это ничего? плюс увеличение количества кода необходимое для повсеместных операций это тоже ничего?
    лучше бы они всю систему команд заново составили, чем лепили в уже сформировавшуюся не весть что.
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    оффтоп
    товарищи вы сидите за компами ночь напролет ??
     
  4. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    bard's:
    Код (Text):
    1.         mov     eax, 0x76543210         ; 76'54'32'10 (numbers mean nibble index, not value)
    2.         bswap   eax                     ; 10'32'54'76
    3.         movd    xmm0, eax
    4.         shr     eax, 4                  ; .1'03'25'47 (dot means insignificant zero nibble)
    5.         movd    xmm1, eax
    6.         punpcklbw xmm1, xmm0            ; 10'.1'32'03'54'25'76'47 (high half of xmm not shown)
    7.         pand    xmm1, [nibble_mask]     ; .0'.1'.2'.3'.4.'5'.6'.7 (need to clear only bit 7 of each byte)
    8.         movdqa  xmm0, [hex_digits]
    9.         pshufb  xmm0, xmm1              ; x0'x1'x2'x3'x4'x5'x6'x7 (x# is a hex digit for nibble #)
    10.         movq    qword[edi], xmm0
    11.  
    12.         align   16
    13. label hex_digits dqword
    14.         db      '0123456789ABCDEF'
    15. label nibble_mask dqword
    16.         db      16 dup 15
     
  5. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    baldr, извини не так написал
     
  6. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    PROFi
    > А кто предложит вариант обрабатывающий сразу 2 символа?
    Код (Text):
    1. mov  bx, offset таблица ; смещение таблицы символов
    2. mov  al, 0xA9           ; число
    3. ;--- алгоритм -----------
    4. aam  0x10               ;
    5. xlat                    ; младший символ
    6. ...                     ; операция сохранения символа
    7. mov  al,ah
    8. xlat                    ; старший символ
    9. ...                     ; операция сохранения символа
    10. ;------------------------
    11. retn
    12. таблица db '0123456789ABCDEF'
    После операции распаковки в регистре AL находится младшая цифра.
    Это удобно, если заполнять буфер вывода с конца.
    Для посимвольного вывода решение будет менее красивым:
    Код (Text):
    1. mov  bx, offset таблица ; смещение таблицы символов
    2. mov  al, 0xA9           ; число
    3. ;--- алгоритм -----------
    4. aam  0x10               ;
    5. xchg al, ah             ;
    6. xlat                    ; старший символ
    7. int 0x29                ; вывод старшего символа
    8. mov  al,ah
    9. xlat                    ; младший символ
    10. int 0x29                ; вывод младшего символа
    11. ;------------------------
    12. retn
    13. таблица db '0123456789ABCDEF'
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Часто использую в 16-разрядном коде. По сути это квинтэссенция описанных здесь вариантов.
    Код (Text):
    1. hexbyte:
    2.   aam 10h
    3.   cmp al,10
    4.   sbb al,0x69
    5.   das
    6.   xchg ah,al
    7.   cmp al,10
    8.   sbb al,0x69
    9.   das
    10.   stosw
    11.   ret
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    aam вообще мощная вещь для расщепления байта на две группы битов (aad соответственно наоборот).
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    таких тем 2 было б здорово если б их объединили и подцепили наверх