Написал процедуру сложения лонгинтеджеров на асме
title Adding
;a program adds numbers
.model Large, Pascal
;----------------------------------------------------------
.data
extrn x:dword, a:dword, b:dword
.code
;-------------------longint----------------------------
Public addl
addl proc far
mov ax,word ptr a
mov bx,word ptr a+2
mov cx,word ptr b
mov dx, word ptr b+2
add ax,cx
adс dx,bx
mov word ptr x,ax
mov word ptr x+2,dx
ret
addl endp
end
Program AddPb;
{$L Addal.obj}
{$F+}
{$X+}
uses crt;
var a,b,x:longint;
procedure addl(var x:longint; a,b:longint); external;
{----------------}
procedure lonint;
begin
writeln('vvedite a-->');
readln(a);
writeln('vvedite b-->');
readln(b);
x:=a+b;
Write('Pascal: x=',x);
Writeln('=',a,'+',b);
x:=0;
addl(x,a,b);
write('Assembler: x=',x);
writeln('=',a,'+',b);
end;
{----------------}
begin
clrscr;
writeln('vichislit x=a+b');
lonint;
readkey;
end.
Program AddPb;
{$L Addal.obj}
{$F+}
{$X+}
uses crt;
var a,b,x:longint;
procedure addl(var x:longint; a,b:longint); external;
{----------------}
begin
clrscr;
writeln('vichislit x=a+b');
writeln('vvedite a-->');
readln(a);
writeln('vvedite b-->');
readln(b);
x:=a+b;
Write('Pascal: x=',x);
Writeln('=',a,'+',b);
x:=0;
addl(x,a,b);
write('Assembler: x=',x);
writeln('=',a,'+',b);
readkey;
end.
procedure add;
var
x,y:byte
procedure asem(var x:byte; y:byte); external;
begin
asem(x,y);
end;
вот и сам не знаю, с чего.
Вылетает в винду и такое пишет
DFooz, в таком случае - 2 вопроса:
1) чем компилировал ASM - файл (у меня TASM)
2) почему используешь модель памяти Large (если мне не изменяет память, Паскаль знаком только с моделью Small, по крайней мере TP)