Программирую в RadAsm IDE 2.2.1.0 с компилятором masm32 v8 и столкнулся с такой проблемой: WinAPI-функция Rectangle (да и Ellipse тоже. Скорей всего и остальные) ничего не рисует после выполнения команды DIV. Может, кто-нибудь сможет помочь.
Во-первых, добавь к своим процедурам uses ebx, esi, edi Во-вторых, что говорить о div, если она у тя ва-аще на шару ни к селу, ни к городу расположена - 1) стоит сразу после вызова Ellipse и соот-но значение edx не определено и потенциально может вызывать исключение, 2) после div стоит popad, затирающий все труды - может их местами поменять?!
Спасибо, попробую. div стоит перед Ellipse, но я же edx далее не использую... Откуда исключение? Или какое? popad не нужен, просто забыл стереть, когда пытался сам понять, в чём дело.
Я, видимо, не совсем корректно выразил свою проблему. Мне не важно значение edx сейчас. Код (Text): invoke Ellipse,hDC,-1000000,-1000000,1000000,1000000 Я использую её только для того, чтобы определить, будет что-то отображено на экране или нет(когда решу проблему - удалю её. Просто я не умею нормально пользоваться OllyDebug, поэтому так извращаюсь с отладкой). Если её поставить после команды div, то ничего не рисуется в окне и мне это не понятно. pushad и popad - тоже лишние(их я поставил в надежде на то, что функции не работают из-за изменения какого-либо из регистров) P. S. uses не помогла.
Решил проблему, использовав cdq, но всё равно не пойму, почему так происходит. cdq же ничего не делает, кроме распространения старшего бита eax на все биты edx, т. е. в моём случае это аналогично xor edx,edx. Или я не прав?
Assasin291 У тебя там div iMax - деление на байтовую ячейку. Доков нет под рукой, но Олли показывает что в этом случае AX делят на байт, частное пишут в AL, а остаток в AH :-( Т.е. этот div работал не так, а первый div видимо просто менял данные так, что переставало рисоватся.