Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2007, 09:17   #1
Stiv
Новичок
Джуниор
 
Регистрация: 29.11.2007
Сообщений: 2
Вопрос Решение квадратного уравнения

Задан курсач. Нужно написать на ассемблере прогу находящую корни квадратного уравнения ах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.

Последний раз редактировалось rpy3uH; 29.11.2007 в 19:36.
Stiv вне форума Ответить с цитированием
Старый 29.11.2007, 19:50   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

во-первых в чём конктретно проблема?
здесь http://programmersforum.ru/attachmen...7&d=1195400426 пример программы для ввода трёх чисел и вывода минимального из них, в неё есть две НУЖНЫЕ тебе функции для преобразования числа в строку и строки в число на ассемблере.
во-вторых в DLL укажи
Function Determinant(a:matr;n:integer):longi nt;stdcall;
rpy3uH вне форума Ответить с цитированием
Старый 30.11.2007, 15:15   #3
Stiv
Новичок
Джуниор
 
Регистрация: 29.11.2007
Сообщений: 2
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
во-первых в чём конктретно проблема?
здесь http://programmersforum.ru/attachmen...7&d=1195400426 пример программы для ввода трёх чисел и вывода минимального из них, в неё есть две НУЖНЫЕ тебе функции для преобразования числа в строку и строки в число на ассемблере.
во-вторых в DLL укажи
Function Determinant(a:matr;n:integer):longi nt;stdcall;
Если бы я знал как это сделать(я тока в делфи шарю). Мне нун Если те не сложно реши плиз !!

Последний раз редактировалось Stiv; 30.11.2007 в 15:26.
Stiv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение нелинейного уравнения и построение графика xMass Помощь студентам 5 29.10.2012 19:42
Решение биквадратного уравнения Паскаль.... КиношкА Помощь студентам 8 19.12.2008 01:25
Решение уравнения Datrav Паскаль, Turbo Pascal, PascalABC.NET 2 06.06.2008 08:23
Решение уравнения вида ax+by=1 :)) Solny6ko YasnoE Помощь студентам 4 14.06.2007 14:38
корни квадратного уравнения InseR Общие вопросы Delphi 12 01.06.2007 17:30