Помогите что ли решить задачку ( очень простую)

Тема в разделе "WASM.BEGINNERS", создана пользователем MetAlic, 10 окт 2009.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    MetAlic
    movzx eax,byte[Databyte]
    imul eax,1001h ;CcBbAaaa0000CcBbAaaa
    cdq
    and eax,300CFh ;00Bb0 00000 00Cc0 0Aaaa
    mov ecx,31
    div ecx
    ;edx=A+2B+2C
     
  2. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    MetAlic
    Код (Text):
    1. sub eax,eax
    2. mov al,Databyte;al=ccbbaaaa
    3. mov ebx,eax
    4. mov ecx,eax
    5. and eax,1111b
    6. and ebx,110000b
    7. shr ebx,3;ebx=2*B
    8. lea eax,[eax+ebx]
    9. and ecx,11000000b
    10. shr ecx,5;ecx=2*C
    11. lea eax,[eax+ecx];eax=А+2*(В+С)
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Black_mirror
    Жжёшь как всегда. Объясни как это работает (с div`ом не понятно).
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    murder
    (X*2^5 mod 31) = X mod 31
    (2B*2^15+2C*2^5+A) mod 31 = (2B+2C+A) mod 31 = 2B+2C+A, потому что эта сумма меньше 31, и совпадает со своим остатком при делении на 31

    но можно ничего и не делить:

    Код (Text):
    1. movzx eax,byte[Databyte]
    2. imul eax,1010100h   ;CcBbAaaa CcBbAaaa CcBbAaaa 00000000
    3. and eax,C0300F00h ;Cc000000 00Bb0000 0000Aaaa 00000000
    4. mov edx,1002008h
    5. mul edx
    6. ;dl = A+2B+2C
     
  5. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    Black_mirror
    Исчо! Исчо!
     
  6. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    2+2=4
    это всем известно,
    во всем мире
    от чего же мне так грустно?
    неужели нельзя мыслить шире?
    мы добавим позитива в этом мир
    2+2 оформим как Шекспир
     
  7. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    2B|~2B(© W.Shakespeare "Hamlet" 3/1)
     
  8. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Black_mirror
    То есть равенство n*2^m mod (2^m-1) = n верно при m>=log2(n)

    Из этого следует:
    (2C*2^15 mod (2^15-1))+(2B*2^5 mod (2^5-1))+A = (2C*2^15 mod (2^10-1)+2B*2^5+A) mod (2^5-1)

    Как отсюда прийти к этому?
     
  9. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    Чертова задача! В голове крутится -- вот что я накрапал
    X=A+B*2^4+C*2^6
    X*N=A+(B+C)*2= A0+(A1+B0+C0)*2+(A2+B1+C1)*2²+A3*2³
    X=A0+A1*2+A2*2²+A3*2³+B0*2^4+B1*2^5+C0*2^6+C1*2^7
    N=N0+N1*2+N2*2²+N3*2³+N4*2^4+N5*2^5+N6*2^6+N7*2^7
    N*X= A0N0+(A0N1+A1N0)*2+(A0N2+A1N1+A2N0)*2²+(A0N3+A1N2+A2N1+A3N0)*2³+…= A0+(A1+B0+C0)*2+(A2+B1+C1)*2²+A3*2³
    A0N0=A0, тогда N0=1 и N должно быть нечетным
    (A0N1+A1N0) mod 2 =(A1+B0+C0) mod 2 и N0=1 тогда A0N1=(B0+C0) mod 2
    (A0N2+A1N1+A2N0) mod 2 =(A2+B1+C1) mod 2 и N0=1 тогда (A0N2+A1N1) mod 2=(B1+C1) mod 2
    (A0N3+A1N2+A2N1+A3N0) mod 2 = A3 и N0=1 тогда (A0N3+A1N2+A2N1) mod 2=0
    Пусть максимальное значение A=1111b B=11b С=11b, тогда
    A+(B+C)*2=0Fh+(3+3)*2=1Bh=11011b т.е. у N*X возможно 4-ый разряд равен 1, а 5-ый, 6-ой и 7-ой равны 0 остается написать программу, которая подставляя А от 0 до F, B от 0 до 3 и С от 0 до 3 перебором найдет N от 1 до 255 (уже ясно, что N нечетное)
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ты сам себе выдумал условие =)
    ТС же писал про A + 2B + 2C
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    murder
    лень вникать, но у меня смутное чувство что это сравнения по модулю из теории чисел
     
  12. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    n0name
    где же я выдумал -- читаем внимательно
    Black_mirror это делает через умножение, а затем через деление (получение модуля) хотя то же можно сделать тлоько через умножение -- Вопрос как?
     
  13. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Смотри посты 18,24.
     
  14. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Mikl___
    ага, этакая хеш-функция ;)
    Код (Text):
    1.  0 => 0
    2.  1 => 1
    3.  2 => 2
    4.  3 => 3
    5.  4 => 4
    6.  5 => 5
    7.  6 => 6
    8.  7 => 7
    9.  8 => 8
    10.  9 => 9
    11.  10 => 10
    12.  11 => 11
    13.  12 => 12
    14.  13 => 13
    15.  14 => 14
    16.  15 => 15
    17.  16 => 2
    18.  17 => 3
    19.  18 => 4
    20.  19 => 5
    21.  20 => 6
    22.  21 => 7
    23.  22 => 8
    24.  23 => 9
    25.  24 => 10
    26.  25 => 11
    27.  26 => 12
    28.  27 => 13
    29.  28 => 14
    30.  29 => 15
    31.  30 => 16
    32.  31 => 17
    33.  32 => 4
    34.  33 => 5
    35.  34 => 6
    36.  35 => 7
    37.  36 => 8
    38.  37 => 9
    39.  38 => 10
    40.  39 => 11
    41.  40 => 12
    42.  41 => 13
    43.  42 => 14
    44.  43 => 15
    45.  44 => 16
    46.  45 => 17
    47.  46 => 18
    48.  47 => 19
    49.  48 => 6
    50.  49 => 7
    51.  50 => 8
    52.  51 => 9
    53.  52 => 10
    54.  53 => 11
    55.  54 => 12
    56.  55 => 13
    57.  56 => 14
    58.  57 => 15
    59.  58 => 16
    60.  59 => 17
    61.  60 => 18
    62.  61 => 19
    63.  62 => 20
    64.  63 => 21
    65.  64 => 2
    66.  65 => 3
    67.  66 => 4
    68.  67 => 5
    69.  68 => 6
    70.  69 => 7
    71.  70 => 8
    72.  71 => 9
    73.  72 => 10
    74.  73 => 11
    75.  74 => 12
    76.  75 => 13
    77.  76 => 14
    78.  77 => 15
    79.  78 => 16
    80.  79 => 17
    81.  80 => 4
    82.  81 => 5
    83.  82 => 6
    84.  83 => 7
    85.  84 => 8
    86.  85 => 9
    87.  86 => 10
    88.  87 => 11
    89.  88 => 12
    90.  89 => 13
    91.  90 => 14
    92.  91 => 15
    93.  92 => 16
    94.  93 => 17
    95.  94 => 18
    96.  95 => 19
    97.  96 => 6
    98.  97 => 7
    99.  98 => 8
    100.  99 => 9
    101.  100 => 10
    102.  101 => 11
    103.  102 => 12
    104.  103 => 13
    105.  104 => 14
    106.  105 => 15
    107.  106 => 16
    108.  107 => 17
    109.  108 => 18
    110.  109 => 19
    111.  110 => 20
    112.  111 => 21
    113.  112 => 8
    114.  113 => 9
    115.  114 => 10
    116.  115 => 11
    117.  116 => 12
    118.  117 => 13
    119.  118 => 14
    120.  119 => 15
    121.  120 => 16
    122.  121 => 17
    123.  122 => 18
    124.  123 => 19
    125.  124 => 20
    126.  125 => 21
    127.  126 => 22
    128.  127 => 23
    129.  128 => 4
    130.  129 => 5
    131.  130 => 6
    132.  131 => 7
    133.  132 => 8
    134.  133 => 9
    135.  134 => 10
    136.  135 => 11
    137.  136 => 12
    138.  137 => 13
    139.  138 => 14
    140.  139 => 15
    141.  140 => 16
    142.  141 => 17
    143.  142 => 18
    144.  143 => 19
    145.  144 => 6
    146.  145 => 7
    147.  146 => 8
    148.  147 => 9
    149.  148 => 10
    150.  149 => 11
    151.  150 => 12
    152.  151 => 13
    153.  152 => 14
    154.  153 => 15
    155.  154 => 16
    156.  155 => 17
    157.  156 => 18
    158.  157 => 19
    159.  158 => 20
    160.  159 => 21
    161.  160 => 8
    162.  161 => 9
    163.  162 => 10
    164.  163 => 11
    165.  164 => 12
    166.  165 => 13
    167.  166 => 14
    168.  167 => 15
    169.  168 => 16
    170.  169 => 17
    171.  170 => 18
    172.  171 => 19
    173.  172 => 20
    174.  173 => 21
    175.  174 => 22
    176.  175 => 23
    177.  176 => 10
    178.  177 => 11
    179.  178 => 12
    180.  179 => 13
    181.  180 => 14
    182.  181 => 15
    183.  182 => 16
    184.  183 => 17
    185.  184 => 18
    186.  185 => 19
    187.  186 => 20
    188.  187 => 21
    189.  188 => 22
    190.  189 => 23
    191.  190 => 24
    192.  191 => 25
    193.  192 => 6
    194.  193 => 7
    195.  194 => 8
    196.  195 => 9
    197.  196 => 10
    198.  197 => 11
    199.  198 => 12
    200.  199 => 13
    201.  200 => 14
    202.  201 => 15
    203.  202 => 16
    204.  203 => 17
    205.  204 => 18
    206.  205 => 19
    207.  206 => 20
    208.  207 => 21
    209.  208 => 8
    210.  209 => 9
    211.  210 => 10
    212.  211 => 11
    213.  212 => 12
    214.  213 => 13
    215.  214 => 14
    216.  215 => 15
    217.  216 => 16
    218.  217 => 17
    219.  218 => 18
    220.  219 => 19
    221.  220 => 20
    222.  221 => 21
    223.  222 => 22
    224.  223 => 23
    225.  224 => 10
    226.  225 => 11
    227.  226 => 12
    228.  227 => 13
    229.  228 => 14
    230.  229 => 15
    231.  230 => 16
    232.  231 => 17
    233.  232 => 18
    234.  233 => 19
    235.  234 => 20
    236.  235 => 21
    237.  236 => 22
    238.  237 => 23
    239.  238 => 24
    240.  239 => 25
    241.  240 => 12
    242.  241 => 13
    243.  242 => 14
    244.  243 => 15
    245.  244 => 16
    246.  245 => 17
    247.  246 => 18
    248.  247 => 19
    249.  248 => 20
    250.  249 => 21
    251.  250 => 22
    252.  251 => 23
    253.  252 => 24
    254.  253 => 25
    255.  254 => 26
    256.  255 => 27
    остается её упростить...
     
  15. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Код (Text):
    1. movzx eax,byte[Databyte]
    2. shl eax,2
    3. rol al,2
    4. add ah,al
    5. shl ah,1
    6. and ah,0Fh
    7. shr al,4
    8. add ah,al
    9. ;ah = A+2B+2C
     
  16. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Чуть короче
    Код (Text):
    1. movzx eax,byte[Databyte]
    2. shl eax,2
    3. rol al,2
    4. add ah,al
    5. shl ah,5
    6. shr eax,4
    7. add ah,al
    8. ;ah = A+2B+2C
     
  17. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.905
    t00x
    f(X)=X & 0Fh + (X/8) & 6 + (X/32) & 6
     
  18. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    То есть
    Код (Text):
    1. 0-15
    2. 2-17 2-17
    3. 4-19 4-19  4-19
    4. 6-21 6-21  6-21  6-21
    5.      8-23  8-23  8-23
    6.           10-25 10-25
    7.                 12-27
    По-моему похоже на

    f(x)=(x div 60) shl 1+(x and 15)
     
  19. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Вот ещё способ
    Код (Text):
    1. movzx  eax,byte[Databyte]
    2. ror    eax,4
    3. shl    ax,10
    4. shr    eax,4
    5. shl    ah,1
    6. shr    al,5
    7. movd   mm0,eax
    8. pxor   mm1,mm1
    9. psadbw mm0,mm1
    10. movd   eax,mm0