Я пишу программу для вычисления квадратного уравнения на MASM, но есть проблема:программа нормально ничего не вычисляет, почему - немогу понять(в Assembler я нуб ) Если кто сможет заставить эту прогу работать то я был бы очень рад. P.S. Если у кого есть исходник квадратного уравнения на MASM то поделитесь пожайлуста,если не жалко Код (Text): invoke GetDlgItemInt,hWnd,Edit1ID,0,1;текст из Edit1 в регистр eax и отуда в sA mov sA,eax invoke GetDlgItemInt,hWnd,Edit2ID,0,1;Аналогично как и с Edit1 mov sB,eax invoke GetDlgItemInt,hWnd,Edit3ID,0,1 mov sC,eax mov sB,eax;т.к. mul требует чтобы один из множителей находился в eax mul sB;возводим sB в квадрат mov kv,eax;записывает результат в переменную kv mov eax,4;помещаем в eax число 4 mul sA;умножаем sA на 4 mul sC;и умножаем на sC (произведение sA и 4 в регистре eax) sub eax,kv;вычитаем из kv(здесь находится sB^2) произведение 4*sA*sC(находится в eax) mov Diskriminant,eax;Помещаем результат в Diskriminant .IF Diskriminant == 0;если дисриминант ноль то mov eax,-1;ставим перед sB минус умножив на -1 mul sB mov ebx,sB;помещаем sB в регистор ebx mov eax,2;2 в регистор eax mul sA;умножаем sA на 2 div sB;делим sB на sA invoke wsprintf,addr MyText,addr Format,eax;т.к. x1 = x2 то выводим значения в Edit4 и Edit5 invoke SetWindowText,hwndEdit4,addr MyText invoke SetWindowText,hwndEdit5,addr MyText .ENDIF .IF Diskriminant > 0;если дискриминант отличен от нуля то finit;инициализируем FPU fild Diskriminant;выбрали число из памяти fsqrt;получили квадратный корень fist result;записали результат в result mov eax,-1;ставим перед sB минус умножив на -1 mul sB mov ecx,eax mov ebx,sB;помещаем sB в регистор ebx mov eax,result sub eax,sB;из sB вычитаем result mov kv,eax;результат заносим в kv mov eax,2 mul sA;посчитаем 2*sA mov edx,eax div kv mov x1,eax invoke wsprintf,addr MyText,addr Format,eax invoke SetWindowText,hwndEdit4,addr MyText add result,ebx;sB складываем с result mov eax,edx div result mov x2,eax invoke wsprintf,addr MyText,addr Format,eax invoke SetWindowText,hwndEdit5,addr MyText .ENDIF .IF Diskriminant < 0 invoke MessageBox,hWnd,addr TextMessg,0,MB_ICONINFORMATION .ENDIF
Код (Text): mov sC,eax mov sB,eax;т.к. mul требует чтобы один из множителей находился в eax mul sB;возводим sB в квадрат Вторая строчка копирует в sB значение из eax, т.е. то же, что и в sC. Дальше не читал, т.к. уже ошибка. PS Тему надо в WASM.BEGINNERS.
S9 : приятно иметь дело с самокритичным и понимающим ситуацию человеком! Вы действительно тот, кем себя назвали! Но это не Ваша вина, а Ваше горе. А тому у кого горе надо, по возможности, помогать. Современных пособий программирования на ассемблере вычислительных задач, изданных серьезными тиражами, - НЕТ! Пользоваться старыми довольно сложно, но можно. Однако их надо еще найти. Ваша программа не работоспособна по многим причинам. Вот некоторые из них: Вы смешиваете в кучу числовые данные беззнаковые и знаковые; Для Вас нет разницы в представлении данных в формате фиксированной запятой и плавающей; Вы не узучили особенности выполнения операций умножения и деления знаковых числовых данных в системе команд ix86; Усли Вы желаете написать программу без применения FPU, то Вам следует, кроме исправления ошибок, перечисленных выше, хорошо изучить численные методы вычисления квадратного корня. Ваша задача легко решается с применением команд FPU. В этом случае ее решение очень похоже на решение на Паскале (во многих примитивных пособиях есть подобные примеры). Не отчаивайтесь, успехов Вам на избранном поприще! Согласен с qwe8013 необходимо открыть в WASM.BEGINNERS тему "Вычислительные задачи на ассемблере"
1212 Во-первых, если не знаете как помочь, то зачем писать всякую хрень? Во-вторых, я специализируюсь на Delphi З.Ы.1212 если с помощью FPU так легко сделать, то сделайте. Я буду очень благодарен
S9: "Вполне понять человека могут только равные ему или выше его" - Марк Аврелий 121-180 г. н.э В прилагаемом файле - решение Вашей задачи с помощью FPU. Для отрицательного дискриминанта решение не предусмотрено. Решение под MS DOS, для экономии "бумаги". Потратил аж 1,5 часа. Желаю успехов!