Функция Rectangle не работает после команды DIV

Тема в разделе "WASM.WIN32", создана пользователем Assasin291, 15 сен 2011.

  1. Assasin291

    Assasin291 New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    8
    Программирую в RadAsm IDE 2.2.1.0 с компилятором masm32 v8 и столкнулся с такой проблемой: WinAPI-функция Rectangle (да и Ellipse тоже. Скорей всего и остальные) ничего не рисует после выполнения команды DIV. Может, кто-нибудь сможет помочь.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Во-первых, добавь к своим процедурам uses ebx, esi, edi
    Во-вторых, что говорить о div, если она у тя ва-аще на шару ни к селу, ни к городу расположена - 1) стоит сразу после вызова Ellipse и соот-но значение edx не определено и потенциально может вызывать исключение, 2) после div стоит popad, затирающий все труды - может их местами поменять?! ;)
     
  3. Assasin291

    Assasin291 New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    8
    Спасибо, попробую.
    div стоит перед Ellipse, но я же edx далее не использую... Откуда исключение? Или какое?
    popad не нужен, просто забыл стереть, когда пытался сам понять, в чём дело.
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    это не значит что Ellipse не использует edx
     
  5. Assasin291

    Assasin291 New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    8
    Я, видимо, не совсем корректно выразил свою проблему. Мне не важно значение edx сейчас.
    Код (Text):
    1. invoke Ellipse,hDC,-1000000,-1000000,1000000,1000000
    Я использую её только для того, чтобы определить, будет что-то отображено на экране или нет(когда решу проблему - удалю её. Просто я не умею нормально пользоваться OllyDebug, поэтому так извращаюсь с отладкой). Если её поставить после команды div, то ничего не рисуется в окне и мне это не понятно.
    pushad и popad - тоже лишние(их я поставил в надежде на то, что функции не работают из-за изменения какого-либо из регистров)
    P. S. uses не помогла.
     
  6. Assasin291

    Assasin291 New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    8
    Решил проблему, использовав cdq, но всё равно не пойму, почему так происходит. cdq же ничего не делает, кроме распространения старшего бита eax на все биты edx, т. е. в моём случае это аналогично xor edx,edx.
    Или я не прав?
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Assasin291
    У тебя там div iMax - деление на байтовую ячейку. Доков нет под рукой, но Олли показывает что в этом случае
    AX делят на байт, частное пишут в AL, а остаток в AH :-(
    Т.е. этот div работал не так, а первый div видимо просто менял данные так, что переставало рисоватся.
     
  8. Assasin291

    Assasin291 New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    8
    valterg, спасибо.