|
Методические указания по Организации ЭВМ и систем
Лабораторная работа 5. Пример решения 1:
(* Лабораторная работа № 5 *)
(* 2204 Орлов С.В. 972526 *)
{17.06.99}
uses crt;
var
a,b,x,y,z:integer;
Begin
clrscr;
writeln('Введите целые числа a, b, x, y: ');
readln(a,b,x,y);
writeln('Решение на Паскале: ',((a*x*x)div(b*y*y))div(a+b));
asm
pusha
mov ax,y
mul ax
mov bx,b
mov cx,bx
mul bx
push ax { сохранили b*y*y }
mov ax,x
mul ax
mov bx,a
add cx,bx { в CX = a+b }
mul bx
pop bx { восстановили b*y*y }
xor dx,dx
div bx { (a*x*x) div (b*y*y) }
xor dx,dx
div cx
mov z,ax { в AX = ((a*x*x)div(b*y*y)) div (a+b) }
popa
end;
writeln('Решение на Ассемблере: ',z);
readkey;
clrscr;
End.
Примечание: в этой работе желательно было обойтись без использования
стека. Разумеется, работу можно защитить на любую оценку, ответить
на все вопросы, но работы с командами push для вычисления простой
арифметки я чаще всего отправляю на доделку
|