странное поведение jwasma

Тема в разделе "WASM.ASSEMBLER", создана пользователем jorikh, 9 окт 2011.

  1. jorikh

    jorikh New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2011
    Сообщения:
    31
    хай всем

    есть код написанный для masm-а под вин32 и успешно работающий.
    собираю его jwasm-ом последним, запускаю, эксепшн.
    отлаживаю, и вижу странную штуку:

    есть функция:

    function proc USES edx eax ebx, memaddr:lol: WORD, sz:BYTE, segidx:BYTE

    и есть её вызов:

    invoke function, ebx, ch, 0

    этот вызов jwasm компилит как:

    push 0
    push ebp
    push ebx
    call function

    вместо ch запихивает в стек значение ebp. вопрос - зачем?
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    так ecx поставь.
     
  3. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Код (Text):
    1. function proc USES edx eax ebx, memaddr:DWORD, sz:BYTE, segidx:BYTE
    Может лучше без запятой
    Код (Text):
    1. function proc USES edx eax ebx memaddr:DWORD, sz:BYTE, segidx:BYTE
     
  4. jorikh

    jorikh New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2011
    Сообщения:
    31
    там стоит именно CH так как параметр 1-байтовый, а в cl находится другая переменная (чтоб не дёргать стек лишний раз).
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Вах ... ну прости брат, не знал )))
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Это просто ошибка ассемблирования. Байтовые регистры нельзя класть в стек. Только кратные по размеру двум. Код регистра ch -- 5. Код регистра ebp тоже 5. Ассемблер генерирует код 0x55, считая, что 5 в этом коде адресует ch. Хотя процессор и дизассемблер понимают, что это ebp. Короче, это недостаточность проверки аргументов в ассемблере.
     
  7. jorikh

    jorikh New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2011
    Сообщения:
    31
    да, видимо мой фолт. тогда не ясно какого хрена масм правильно всё собирал.
     
  8. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    масм порой странные вещи выдает из-за высоко-уровневости.
     
  9. Alexpav

    Alexpav Alexei

    Публикаций:
    0
    Регистрация:
    6 ноя 2011
    Сообщения:
    1
    Адрес:
    Russia
    да. иногда масм выдает действительно странные вещи