Вычисление целочисленных выражений
Цель работы: Вычислить заданное условное целочисленное выражение для данных в формате INTEGER (int), используя команды сравнения, условного и безусловного переходов. Результат X — тоже целочисленный и его диапазон (формат) зависит от специфики решаемого условного выражения. Исходные данные должны вводиться корректно (с проверкой на область допустимых значений). Результат также должен быть проверен на область допустимых значений. Данные должны передаваться в подпрограммы (функции) как параметры.
Порядок работы:
- внимательно изучить свой вариант арифметического выражения;
- написать на базовом алгоритмическом языке программу ввода исходных данных (с контролем допустимого диапазона), вычисления условного арифметического выражения и вывода полученного результата;
- написать модуль вычисления арифметического выражения на языке Ассемблера;
- встроить вызов этого модуля в программу на базовом алгоритмическом языке;
- произвести тестовые проверки, отметить нормальные и аномальные результаты, сделать анализ результатов.
12) X=
b/a+1 если a > b
25 если a = b
(a^3-5)/b, если a < b
Program Lab4P;
Uses CRT;
Label
M1, M2 ,Merror,Mexit, L1;
var
a,b,xl, key:ShortInt;
x: integer;
Procedure ASMB;
Label
M1, M2 ,Merror,Mexit, L1;
begin
L1:
Write('Vvedite a ===>');
Readln(a);
Write('Vvedite b ===>');
Readln(b);
ASM
mov al, a
mov bl, b
cmp al, bl
jg M1
jl M2
mov ax,25
jmp MExit
M1:
cmp al,0
je MERROR
push ax
mov al,bl
cbw
pop bx
idiv bl
inc al
cbw
jmp MExit
M2:
cmp bl, 0
je MERROR
imul a
imul a
add ax, -5
idiv bl
Mexit:
mov word ptr xl,ax
Merror:
end;
writeln('ASSEMBLER:');
if ((a=0)and(b<>0))or((a<>0)and(b=0)) then
writeln ('error')
else writeln(' x=',xl);
end;
Begin
repeat
clrscr;
ASMB;
writeln ('key 1=POVTOR 2=exit');
readln (key);
until key=2;
end.
Вернутся к заглавию