Найти

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

Лабораторная работа 6. Пример решения 1:

(* Лабораторная работа № 6 *)
(* 2204 Орлов С.В. 972526  *)
{17.06.99}
uses crt;
var
  a:array [1..7] of integer;
  z,i,j:integer;

(* функция вычисления x^y *)
function stepen(x_st,y_st:integer):longint;
 var i_st,temp_st:integer;
 begin
   temp_st:=1;
   for i_st:=1 to y_st do temp_st:=temp_st*x_st;
   stepen:=temp_st
 end;

Begin
  clrscr;
  randomize;
  writeln('Массив A[]:');
  for z:=1 to 7 do
    begin
      a[z]:=random(4)+1;
      writeln('a[',z,']= ',a[z])
    end;
  z:=0;
  for i:=1 to 7 do
    z:=z+stepen(a[i],i);
  writeln('Решение на Паскале: ',z);
  asm
    pusha
    xor  bp,bp  { здесь будем сохранять результат }
    mov  ax,ds
    mov  es,ax
    lea  di,a   { в ES:DI адрес начала массива a  }
    add  di,12  { переходим на последний элемент  }
    mov  cx,7   { всего сумма семи элементов      }
   @1:
    push cx
    mov  ax,es:[di] { в AX i-ый элемент массива a[i]                       }
    dec  cx         { при степени количество умножений равно n-1           }
    je   @3         { если степень равна 1, то в степень не вводим         }
    mov  bx,ax      { в BX теперь то же самое                              }
   @2:
    mul  bx         { находим степень элемента массива                     }
    loop @2
   @3:
    add  bp,ax { сохраняем результат                                       }
    sub  di,2  { сдвигаемся на 2 байта влево на предыдущий элемент массива }
    pop  cx
    loop @1    { повторяемся                                               }
    mov  z,bp
    popa
  end;
  writeln('Решение на Ассемблере: ',z);
  readkey;
  clrscr;
End.
Рейтинг SIMPLETOP.NET
Rambler's Top100 Powered byCeleron©
Бесплатный хостинг от EOMY.NET