Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > При выполнении прогр. винда её просто выкидывает


Автор: digitech 17.11.2007, 17:04
Моя задача написать код на ассемблере для выполнения вот этого примера sqrt(a+b)+sqrt(c/d)
Причём эта программа должна работать со стеком. 
Вот мой код ассемблера (он подключен в программу на паскале через процедуру)
Код

title ex_2
.model large
.data
extrn a:dword, b:dword, c:dword, d:dword, n:dword;
.code
public mat
mat proc far
finit
fld a
fld b
fmul st(0),st(1)
fsqrt
fld c
fld d
fdiv st(1),st(0)
fsqrt
fadd st(0),st(4)
fstp n
ret
mat endp
end

Компилятор скомпилировал этот код без ошибок, однако при выполнении его (с рез. при a=3 b=6 c=18 d=2)
винда просто выкидывает из процессов и паскаль тоже за одно.
Видимо ошибка где-то есть.

А вот код на паскале
Код

program hight;
{$N+}
{$E+}
{$L ch2.obj}
var
a,b,c,d,n:double;
procedure mat(var n:double);external;
begin
writeln('vvedite a,b,c,d');
readln(a,b,c,d);
b:=sqrt(a+b)+sqrt(c/d);
writeln('pascal b=',b);
mat(n);
writeln('assembler b=',n);
readln
end.
 


Автор: Den64 18.11.2007, 16:02
А почему бы не использовать ассемблерную вставку...

Автор: digitech 18.11.2007, 18:06
незнаю?, так в колледже нас учат. А насчёт вставки, то я пробовал, - половина команд чё-та не распознаётся. к примеру finit и т.д.

Автор: volvo877 18.11.2007, 19:30
Цитата(digitech @  18.11.2007,  17:06 Найти цитируемый пост)
я пробовал, - половина команд чё-та не распознаётся.

Странно. Турбо-Паскаль прекрасно откомпилировал:

Код

program hight;
{$N+}
{$E+}
var
  a, b, c, d, n: double;
begin
  {
    writeln('vvedite a,b,c,d');
    readln(a,b,c,d);
  }
  a := 1; b := 2; c := 3; d := 4;
  writeln('pascal b=',sqrt(a+b)+sqrt(c/d));

  asm
    finit
    fld a
    fld b
    fadd
    fsqrt
    fld c
    fld d
    fdiv
    fsqrt
    fadd
    fstp n
  end;
  writeln('assembler b=',n);
  readln
end.


Автор: digitech 18.11.2007, 23:06
Не знаю, но почему - то в тот момент когда я делал в паскале, - не распознавался finit.
Может я не прописывал $N+ и $E+

Добавлено через 13 минут и 17 секунд
ну щас всё работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)