Нужно написать на ассемблере прогу находящую корни квадратного уравнения ах2+bx+с и вывести корни в делфи или паскаль (для этого создается dll библиотека). а, b, с водится с клавиатуры. Очень большая просьба к тому к то решит помочь текс на ассемблере должен быть как можно проще!
так де вывожу в помощь подобный пример:
Листинг программы на Assembler:
format PE console 4.0
entry start
include 'include/win32a.inc'
section '.idata' import data readable
library kernel,'KERNEL32.DLL'
import kernel,\
ReadConsole,'ReadConsoleA',\
WriteConsole,'WriteConsoleA',\
GetStdHandle,'GetStdHandle',\
ExitProcess,'ExitProcess',\
LoadLibrary,'LoadLibraryA',\
GetProcAddress,'GetProcAddress'
; Перечисляем процедуры, содержащиеся в библиотеке 'KERNEL32.DLL', которые мы будем использовать в нашей программе.
section '.data' data readable writeable
; сообщение к выводу перед вводом числа
Msg db "Enter the number: ",0
; буфер под строку с введенным числом
ResStr db 255 dup (0),0
; дескриптор стандартного потока вывода
hStdOut dd ?
; дескриптор стандартного потока ввода
hStdIn dd ?
; сколько байт прочитано
WrBytes dd ?
; имя библиотеки
dllFilename db "ExDouble.dll",0
; имя процедуры
ProcName db "Determinant",0
; дескриптор динамической библиотеки
hModule dd ?
; адрес функции динамической библиотеки
Determinant dd ?
; строка ошибки (нету библиотеки или имя процедуры не найдено)
LibErr db "Invalid library or library not found!",0
section '.code' code readable executable
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov [hStdOut],eax
invoke GetStdHandle,STD_INPUT_HANDLE
mov [hStdIn],eax
invoke LoadLibrary,dllFilename
mov [hModule],eax
test eax,eax
jz errexit
invoke GetProcAddress,[hModule],ProcName
mov [Determinant],eax
test eax,eax
jz errexit
invoke WriteConsole,[hStdOut],Msg,18,WrBytes,NULL
invoke ReadConsole,[hStdIn],ResStr,255,WrBytes,NULL
; заполнение последнего enter'a (это два байта 0x0D0A) нулем
mov esi,ResStr
add esi,[WrBytes]
sub esi,2
mov byte[esi],0
; передаем указатель на обработанную строку в процедуру динамической библиотеки
invoke Determinant,ResStr
; нормальный выход
exit:
invoke ExitProcess,0
; выход с ошибкой
errexit:
invoke WriteConsole,[hStdOut],LibErr,37,WrBytes,NULL
invoke ExitProcess,1
Листинг программы (код DLL библиотеки):
library ExDouble; //Имя библиотеки
//Используемые модули
uses
Windows, SysUtils;
//Функция, вычисляющая детерминант
Function Determinant(a:matr;n:integer):longint;
type matr=array[1..10,1..10] of longint;
var a,b:matr;
i,j,dt,n:longint; ki,kj,di,dj, m,i,j:integer;
begin
randomize;
write('N= ');
readln(n);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(5);
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j]:3);
writeln;
end;
d:=0; k:=1;
if (n<1) then
begin
writeln('Determinant: Cann''t run. N=',n); halt;
end;
if (n=1)
then d:=a[1,1]
else if (n=2)
then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2]
else { n>2 }
for i:=1 to n do
begin
di:=0;
for ki:=1 to m-1 do
begin
if (ki=i) then di:=1;
dj:=0;
for kj:=1 to m-1 do
begin
if (kj=j) then dj:=1;
b[ki,kj]:=a[ki+di,kj+dj];
end;
d:=d+k*a[i,1]*Determinant(b,n-1);
k:=-k;
end;
Determinant:=d;
end;
//Вывод результата на экран по средствам API функции MessageBox
d := Format('Детерминант"%0.3f" = "%0.3f"!', [Base, d]);
MessageBox(HWND_DESKTOP, PChar(d), 'Результат вычисления', MB_ICONINFORMATION);
end;
exports
Determinant index 1;
begin
end.
Помогите
Модератор: Andy
народ ну помогите кто нить!!! плиз
-
- Сообщения: 4
- Зарегистрирован: 21 сен 2008, 12:11
Marriage amendmentEven though President Bush is pushing for this gay marriage amendment, Vice President Dick Cheney doesn't think the federal government should be involved. Cheney said the government shouldn't prevent men who are obviously in love with each other from having a relationship. For example, let's say an oil company wants to get in bed with the leader of the Republican Party... they should be allowed.Oxygen Bleach Activator]Waste water treatmentWater treatment chemicals