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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 16:41   #1
T.A.T.A.R.I.N
 
Регистрация: 03.09.2009
Сообщений: 8
Вопрос Не верно считает

Здравствуйте! Написал программу, все работает, но при подстановки максимальных значений считает не верно! Подскажите почему?
вот код АСМа
Код:
.model Large, pascal
.data
	Extrn Numerator:Dword;
	Extrn aS:byte,ccS:byte,ddS:byte,bbS:byte	
	Extrn xl:Word,ai:Word,ci:Word,ddi:Word,bbi:word
	Extrn Denominator:Word;
.code 
Public Lab3S ;		x=(25/c-d+2)/(b+a*a-1)
	Lab3S proc far
mov al,aS;		
Imul aL;		
dec ax;		
Push ax
mov aL,bbS;		
CBW ; 		
Pop bx
add ax,bx;		
mov Denominator,ax;


mov ax,25
IDIV ccS
CBW
Push ax
mov al,ddS
CBW
Pop bx
sub bx,ax
add bx,2
mov ax,bx
CWD
mov word ptr Numerator,AX
mov word ptr Numerator+2, DX


idiv Denominator
mov xl,ax
ret
Lab3S endp

Public Lab3I
Lab3I proc far
mov ax,ai
Imul ai
dec ax
add ax,bbi
mov denominator,ax

mov ax,25
CWD
IDIV ci
CWD 
Push dx 
Push ax
mov ax,ddi
CWD
pop bx
pop cx
sub bx,ax
sub cx,dx
add bx,2
adc cx,0
mov WORD PTR Numerator,bx
mov Word ptr Numerator+2,cx
mov ax,bx
mov dx,cx
IDIV Denominator
mov xl,ax
ret
Lab3I endp
end
ПАСКАЛЕВСКИЙ КОД
Код:

Program Lab3P;
{$l Laba3}
{$f+}
Uses CRT, InputNum;
Const
inv2='१г«мв*в';
invAi='A(integer)';
InvCi='C(integer)';
invDi='D(integer)';
invBi='B(integer)';
invAs='A(Shortint)';
invCs='C(Shortint)';
invDs='D(Shortint)';
invBs='B(Shortint)';
intMin=-32768;
intMax=32767;
ShortMin=-128;
ShortMax=127;
Label L1;
var
a,b,c,d,x,Numerator:Longint;
aS,ccS,ddS,bbS:Shortint;
xl,ai,bbi,ci,ddi,Denominator:Integer;
ch:char;

Procedure Lab3I;external;
Procedure Lab3S;external;
function F(a,b,c,d:Longint;Min,Max:Longint):Boolean;
Var x1:longint;
    s1:String;
    Begin
    F:=True;
    x1:= a*a-1+b;
if (x1<Min) or (x1>Max) then
Begin
s1:='‡**¬Ґ**вҐ«м   '+inv3;
Writeln(s1,Min,'..',Max,']!!!');
Writeln(x1);
Writeln(inv1);
F:=False;
Exit;
End;
if ((c=0) or (x1=0)) then
Begin
Writeln ('ЋиЁЎЄ*!!! „Ґ«Ґ*ЁҐ ** ЌЋ‹њ!!! ');
F:=False;
end
else
begin
x:=25div c-d+2;
Writeln('Pascal: ');
Writeln('—Ёб«ЁвҐм   ',x);
Writeln('‡**¬Ґ**вҐ«м  ',x1);
x:=x div x1;
Writeln ('      x=',x);
if (x<Min) or (x>Max) then
Begin
s1:=inv2+inv3;
Writeln(s1,Min,'..',Max,']!!!');
Writeln(x);
Writeln(inv1);
F:=False;
Exit;
end
end
end;
{----Ѓ«®Є Їа®жҐ¤га а*Ў®вл б ®ЇаҐ¤Ґ«Ґ**л¬ вЁЇ®¬ ¤***ле----}
Procedure Expl; {integer}
Label L1;
begin
Writeln ('===========Integer===========') ;
L1:
InputNumber(a,invAi,intMin,intMax);
InputNumber(b,invBi,intMin,intMax);
InputNumber(c,invCi,intMin,intMax);
InputNumber(d,invDi,intMin,intMax);
if NOT(F(a,b,c,d,intMin,intMax)) then
goto L1;
ai:=a;ci:=c; ddi:=d; bbi:=b;
Lab3I;
Writeln ('ЂбᥬЎ«Ґа:  ');
Writeln('—Ёб«ЁвҐ«м  ',Numerator);
Writeln('‡**¬Ґ**вҐ«м  ',Denominator);
Writeln('    x=',xl);
End;
Procedure ExpS;
Label L1;
begin
Writeln ('==========Shortint==========');
L1:
InputNumber(a,invAs,ShortMin,ShortMax);
InputNumber(b,invBs,ShortMin,ShortMax);
InputNumber(c,invCs,ShortMin,ShortMax);
InputNumber(d,invDs,ShortMin,ShortMax);
if NOT (F(a,b,c,d,IntMin,IntMax)) then
goto L1;
aS:=a;ccS:=c;ddS:=d;bbS:=b;
Lab3S;
Writeln('ЂбᥬЎ«Ґа: ');
Writeln('—Ёб«ЁвҐ«м  ',Numerator);
Writeln('‡**¬Ґ**вҐ«м  ',Denominator);
Writeln('   x=',xl);
End;
{------------------------------------------------------}
Procedure Main;
Var i:Integer;
Begin
Writeln ('‚лзЁб«Ёвм:x=(25/c-d+2)/(b+a*a-1); ');
Repeat
Writeln('ўўҐ¤ЁвҐ ў*и ўлЎ®а Ї*а*¬Ґва®ў a,b,c,d');
Writeln('      1-integer ');
Writeln('      2-Shortint');
Writeln('      3-‚л室');
{$I-}
Readln(i);
{$I+}
Until (IOResult=0);
case i of
1:Expl;
2:ExpS;
3:HALT(0);
else Exit;
end
End;
begin
Repeat
ClrScr;
Main;
Writeln('Џ®ўв®аЁвм? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
end.
Прикрепляю фаил с данными. Прошу проверять при максимальных и минимальных значениях, так как при "Обычных" все выполняется верно.
Вложения
Тип файла: rar Лаба3.rar (18.8 Кб, 4 просмотров)
T.A.T.A.R.I.N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать программу с Qbasic на Delphi[переписал - считает не верно] Mixasik Свободное общение 4 20.05.2010 18:33
верно или нет? s2dentishe Помощь студентам 2 28.04.2010 21:29
верно или не верно????? Polusha Помощь студентам 1 19.04.2010 20:16
Как проверить, верно ли считает программа? Mixim Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.12.2009 07:14
[B]Народ! Проверки мне верно или не верно? мне надо завтра сдавать[/B] Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 6 04.06.2008 14:34