Лабараторная работа №3

Вычисление целочисленных выражений

Цель работы: Вычислить заданное целочисленное выражение для исходных данных в знаковых форматах длиной 8 бит ShortInt (signed char), используя арифметические операции ADD, ADC, INC, SUB, SBB, DEC, NEG, IMUL, IDIV, CBW, CWD. Исходные данные должны вводиться с проверкой корректности вводимых символов. Формат результата зависит от специфики решаемого выражения. Входные данные и результат должны быть проверены на область допустимых значений.
Ход работы:
Выражение: (2*с+d-52)/(a/4+1)
Нужно подобрать такие коэффициенты чтобы результат операции было целое число.
c=30
d=2
a=4
Составляем листинг программы на языке TP v 7.1
Листинг программы
Program  Lab3P;
 Uses CRT;

Var
N         : LongInt;
aS,  ccS,  ddS, k : ShortInt;
xl,  D    : Integer;
ch                                : Char;

Begin
Clrscr;
aS:=4;
ddS:=2;
ccS:=30;
ASM
mov aS,4
mov al, aS
CBW
mov k, 4
IDIV k
CBW
INC ax
mov D, ax
mov bx, D
mov ccS, 30
mov al, ccS
mov k, 2
IMUL k
mov cx, ax
mov ddS, 2
mov al, ddS
CBW
add ax, cx
sub ax, 52
CWD
mov WORD PTR N, ax
mov WORD PTR N+2, dx
IDIV bx
mov xl, ax
end;
writeln ('ASSEBLER CODE Function((2*c+d-52)/(a/4+1))=', xl);
writeln ('PASCAL CODE Function((2*c+d-52)/(a/4+1))=', (2*ccS+ddS-52)/(aS/4+1):0:0 );
readkey;
end.
Скриншот:

Вариант программы при которых значения не совпадают
Program  Lab3P;
Uses CRT;
Var
N         : LongInt;
aS,  ccS,  ddS, k : ShortInt;
xl,  D    : Integer;
ch                                : Char;
Begin
Clrscr;
aS:=1;
ddS:=2;
ccS:=30;
ASM
mov aS,1
mov al, aS
CBW
mov k, 4
IDIV k
CBW
INC ax
mov D, ax
mov bx, D
mov ccS, 30
mov al, ccS
mov k, 2
IMUL k
mov cx, ax
mov ddS, 2
mov al, ddS
CBW
add ax, cx
sub ax, 52
CWD
mov WORD PTR N, ax
mov WORD PTR N+2, dx
IDIV bx
mov xl, ax
end;
writeln ('ASSEBLER CODE Function((2*c+d-52)/(a/4+1))=', xl);
writeln ('PASCAL CODE Function((2*c+d-52)/(a/4+1))=', (2*ccS+ddS-52)/(aS/4+1):0:0 );
readkey;
end.


Вывод:  результаты в листинге, полученном при написании программы вычисления значения функции на языке встроенного ассемблера и паскаля получились равными.

Вернутся к заглавию

Сайт создан в системе uCoz