uses crt;
const n=10;
var l:array[1..n] of real;
i_max,i_min:integer;
i:integer;
begin
clrscr;
randomize;
{выводим нумерацию}
write('number:');
for i:=1 to n do write(i:7);
writeln;
{создаем и выводим массив}
write('matrix:');
for i:=1 to n do
begin
l[i]:=20*random-10;
write(l[i]:7:3);
end;
writeln;
{задание на ассемблере начинаем}
asm
{настраиваемся на массив}
lea si,l
mov i_max,si
mov i_min,si
mov cx, n
{Цикл поиска максимального и минимальныго значений}
@@01:
{проверяем с максимальным если да то запоминаем его индекс}
push cx
push si
mov di,i_max
call @@100
pop si
pop cx
jbe @@02
mov i_max,si
jmp @@03
{процедура сравнения двух чисел REAL в PASCAL}
@@100:
{загрузка значений}
mov ax,[si]
mov bx,[si+2]
mov dx,[si+4]
mov cx,[di]
mov si,[di+2]
mov di,[di+4]
{код проверки}
push dx
xor dx,di
pop dx
jns @@101
push dx
rcl dx,1
pop dx
retn
@@101:
test dh, 80h
jz @@102
call @@102
jz @@103
cmc
retn
@@102:
cmp al,cl
jnz @@103
or al,al
jz @@103
cmp dx,di
jnz @@103
cmp bx,si
jnz @@103
cmp ah,ch
@@103:
retn
{продолжение основного цикла в паскале}
@@02:
{проверяем с минимальным, если да то запоминаем его индекс}
push cx
push si
mov di,i_min
call @@100
pop si
pop cx
jnb @@03
mov i_min,si
{в цикле переходим к следующему значению}
@@03: add si,6
loop @@01
{запоминаем i_max=максимального и
i_min=минимального элемента}
{}
lea si,l
mov bx,6
mov ax,i_max
sub ax,si
xor dx,dx
div bx
inc ax
mov i_max,ax
{}
mov ax,i_min
sub ax,si
xor dx,dx
div bx
inc ax
mov i_min,ax
end;
{задание на ассемблере закончено}
{выводим результат}
writeln('min:',l[i_min]:7:3);
writeln('max:',l[i_max]:7:3);
readkey;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.