Алгоритм нахождения и замены минимального числа в одномерном массиве на максимальное в этом же массиве.
Минимальное и максимальное найти смог, а перестановку сделать не могу.
При нахождении каждого из чисел приходится загружать эффективный адрес массива по отдельности,
т.е : при нахождении минимума - загрузка массива, эффективного адреса, к примеру, в SI, далее нахожу это минимальное число, сохраняю в регистре, допустим DX.
Далее опять загружаю массив по такой же схеме, нахожу максимум, сохраняю в другой регистр.
В третий раз - также загрузка массива и уже обмен минимум на максимум.
Пробовал работать с сохранением данных по в адресах, например:
минимум - в [BX], а максимум в [BP] - не выходит.
Может все эти действия нужно делать вместе при одной загрузке, в одном внешнем цикле разбитом на несколько циклов. Подскажите, кто знает.
Assembler_odnomer_massive
Модератор: Andy
покажите код, нужно искать не само число, а индекс в массиве
icq:3(один)7748666
mail:airyashov( а)inbox.ru
mail:airyashov( а)inbox.ru
airyashov писал(а):покажите код, нужно искать не само число, а индекс в массиве
Какой именно код?
У меня загвоздка именно в том, что я не могу занести искомые данные по нужному адресу.
При работе с индексами нахожу и минимум и максимум также, но дальше тишина....
Вот фрагмент моей программы:
asm
@1: lea si,a ;где а - это массив
mov cx,n ;где n - количество цифр в массиве
mov bx,[si+2]
@2: mov ax,[si]
cmp ax,bx
jge @3
xchg ax,bx
@3: add si,2
loop @2
Минимальный элемент находится в BX.
Максимальный нахожу по такому же алгоритму.
А дальше - пока застрял.
Начало и конец программы выполнены в Pascal, а основная часть в Assembler.
допустим пусть адреса будут в si и di после поиска
тогда ваш алгоритм (переработан), ищем индекс минимального (максимального аналогично)
тогда ваш алгоритм (переработан), ищем индекс минимального (максимального аналогично)
Код: Выделить всё
@1: lea bx,a ;где а - это массив
mov cx,n ;где n - количество цифр в массиве
mov si,bx
@2: mov ax,[bx]
cmp ax,[si]
jge @3
mov si ,bx
@3: add bx,2
loop @2
...
;обмен
mov ax,[si]
xchg ax,[di]
mov [si],ax
icq:3(один)7748666
mail:airyashov( а)inbox.ru
mail:airyashov( а)inbox.ru
Большое спасибо!
А задание у меня было такое:
Создать массив М[1..24]. Определить минимальное значение среди первых 10 чисел. Максимальное всего массива заменить в массиве на это минимальное значение.
После вашего ответа сразу доработал программу и она заработала.
program obmen;
uses crt;
const n=24;
var
M:array [1..n] of integer;
i,p,k:integer;
begin
clrscr; randomize;
for i:=1 to n do begin m:=random(100);
write(m:3);
end;
asm
@1: lea bx,m
mov cx,10
mov si,bx
@2: mov ax,[bx]
cmp ax,[si]
jge @3
mov si,bx
@3: add bx,2
loop @2
cmp cx,0
jne @1
mov dx,[si]
mov p,dx
@4: lea bx,m
mov cx,n
mov di,bx
@5: mov ax,[bx]
cmp ax,[di]
jle @6
mov di,bx
@6: add bx,2
loop @5
cmp cx,0
jne @4
mov bp,[di]
mov k,bp
mov ax,[si]
mov [di],ax
end;
writeln;
writeln('min[1..10]=',p:3);
writeln('max[1..24]=',k:3);
writeln;
for i:=1 to n do write(m:3);
readkey;
end.
А задание у меня было такое:
Создать массив М[1..24]. Определить минимальное значение среди первых 10 чисел. Максимальное всего массива заменить в массиве на это минимальное значение.
После вашего ответа сразу доработал программу и она заработала.
program obmen;
uses crt;
const n=24;
var
M:array [1..n] of integer;
i,p,k:integer;
begin
clrscr; randomize;
for i:=1 to n do begin m:=random(100);
write(m:3);
end;
asm
@1: lea bx,m
mov cx,10
mov si,bx
@2: mov ax,[bx]
cmp ax,[si]
jge @3
mov si,bx
@3: add bx,2
loop @2
cmp cx,0
jne @1
mov dx,[si]
mov p,dx
@4: lea bx,m
mov cx,n
mov di,bx
@5: mov ax,[bx]
cmp ax,[di]
jle @6
mov di,bx
@6: add bx,2
loop @5
cmp cx,0
jne @4
mov bp,[di]
mov k,bp
mov ax,[si]
mov [di],ax
end;
writeln;
writeln('min[1..10]=',p:3);
writeln('max[1..24]=',k:3);
writeln;
for i:=1 to n do write(m:3);
readkey;
end.