Найти

Методические указания по Организации ЭВМ и систем

Лабораторная работа 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 для вычисления простой арифметки я чаще всего отправляю на доделку

Рейтинг SIMPLETOP.NET
Rambler's Top100 Powered byCeleron©
Бесплатный хостинг от EOMY.NET