Не идет деление. Хотя точно такая же функция для умножения и проблем никаких. Закоментировано потому что пытался вводом конкретных чисел проверить. Значит проблема в написани лишь трех строк, выполняющих деление. void CAsm3Dlg::OnButton3() { int a,b,c,d; UpdateData(true); a=m_edit1; d=m_edit4; _asm{ push eax push ebx push ecx push edx sub eax,eax sub ebx,ebx sub ecx,ecx sub edx,edx //mov eax,a mov eax,133 //mov edx,d mov edx,3 div edx Может кно-нибудь по делу подскажет ? mov a,eax pop edx pop ecx pop ebx pop eax } m_edit1=a; UpdateData(false); }
DIV делит содержимое пары регистров edx:eax, поэтому возникает исключение #DE. А вообще-то смысла в __asm здесь никакого нет, чем обычное деление не устраивает?
Это я знаю. При 16-ти разрядах делимое записывали в al, а не в весь ax. Здесь все примерно так же, только в два раза длиннее можно. Т.е. я должен записать делимое в AX, а не в EAX ? Как это правильно записать ? Поясню зачем. Я сделал весь пользовательский интерфейс в приложении VIsual C++. Вывод идет в окошко редактирования, ввод тоже через окно редактирования. Т.е. под наблюдением лишь процесс деления. Пробовал отдельно в консольном приложении и выяснил, что именно процесс деления неверно мною организован.
void CAsm3Dlg::OnButton3() { int a,b,c,d; UpdateData(true); a=m_edit1; d=m_edit4; _asm{ push eax push ebx push ecx push edi sub eax,eax sub ebx,ebx sub ecx,ecx sub edi,edi //mov eax,a mov eax,133 //mov edi,d mov edi,3 div edi Может кно-нибудь по делу подскажет ? mov a,eax pop edi pop ecx pop ebx pop eax } m_edit1=a; UpdateData(false); }
doctor_Ice Если смеетесь, то зря. Мне на самом деле не понятно. Каазалось бы мелочь. Но деление это классика. Мне хотелось бы знать и знать наверняка.
sarmat Нужно обнулить edx и потом делить. Всё ото проделает и компилятор, если написать просто Код (Text): unsigned a, d; /// m_edit1 = a / d;
да нет не смеюсь дело в том что при делении регистр edx должен содержать 0! после деления там будет остаток! xor edx, edx div reg or mem тебе об этом сказал S_T_A_S_ но ты не понял вот я и поправил твой код чтоб работал )))
doctor_Ice Можно классикой считать что-то иное. Об этом спорить не стану. Замена div edx на div ebx сразу устраняет все проблемы. Любопытно! И еще интересно какая организация владеет этим форумом (где сервер располагается ? ) Если это большая тайна, то можете не открывать.