Возможна ли такая конструкция?

Тема в разделе "WASM.BEGINNERS", создана пользователем sheef_ad, 27 янв 2010.

  1. sheef_ad

    sheef_ad New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2009
    Сообщения:
    101
    Код (Text):
    1. ...
    2. mov eax,x
    3. mul dl
    4. ...
    То есть умножение 4 байтового регистра на 1 байтовый. Вопрос возник в связи с тем, что вариант типа mov eax,dl - невозможен - разные по величине регистры, а вот у меня прога использует такую конструкцию (умножение eax на dl) и компилятор не ругается, но прога перестала правильно функционировать. Вот я и подумал, может здесь "собака зарыта"?
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    MUL использует аккумулятор той же разрядности что и операнд.
    Т.е. MUL DL ---> AX=DL*AL
    movzx eax,dl

    Если надо умножить 32-битные числа, то:
    Код (Text):
    1. mov eax,[x]
    2. movzx edx,dl
    3. mul edx        ; edx:eax=eax*edx
    или
    Код (Text):
    1. movzx eax,dl
    2. mul dword ptr [x]     ; edx:eax=eax*x=dl*x
     
  3. sheef_ad

    sheef_ad New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2009
    Сообщения:
    101
    Точно. С помощью movzx все заработало. Спасибо большое.