G
ge4r
Приветствую,нужен направляющий пинок по решению задачки)
задача в следующем
Разделить массив на две части, поместив в первую эле-менты, большие среднего арифметического их суммы, а во вторую - меньшие (части не сортировать).Обязательно использовать адресную арифметику
На языке высокого уровня естественно пишется за 5 строк кода,но тут надо на асме.
то есть есть метод,в который я передаю массив,предварительно введенный пользователем. далее начинается вставка и вот тут загвоздка. как в асме создать массив и крутить-вертеть его элементами?
пока получилось вот что
задача в следующем
Разделить массив на две части, поместив в первую эле-менты, большие среднего арифметического их суммы, а во вторую - меньшие (части не сортировать).Обязательно использовать адресную арифметику
На языке высокого уровня естественно пишется за 5 строк кода,но тут надо на асме.
то есть есть метод,в который я передаю массив,предварительно введенный пользователем. далее начинается вставка и вот тут загвоздка. как в асме создать массив и крутить-вертеть его элементами?
пока получилось вот что
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
void task1(){
int arr[500],narr[500],k1=0,k2=0;
int len;
cout << "Enter array's length" << endl;
cin >> len;
cout << "Enter the elements" << endl;
for(int i = 0; i < len; ++i)
cin >> arr[i];
k2=len;
__asm{
mov ecx,len //длинну храним в ecx
xor eax,eax //обнуление регистров eax,ebx
xor ebx,ebx
cycle1:
add eax,arr[ebx] //накапливаем сумму в eax
add ebx,4 //увеличиваем счетчик
loop cycle1;
idiv eax,ecx
mov edx,eax //помещаем среднее арифметическое в edx
cycle2:
xor ebx,ebx
mov eax,arr[ebx]
add ebx,4
cmp eax,edx //сравниваем ср.арифм. и текущий элемент
JG point1 // если текущий элемент больше идем на метку 1
JLE point2 // если текущий элемент меньше идем на метку 2
endcycle2:
loop cycle2
jmp quit
point1:
mov narr[k1],eax //помещаем элемент в левую половину массива
inc(k1) //смещаем индекс свободной позиции слева
jmp endcycle2
point2:
mov narr[k2],eax // помещаем элемент в правую половину массива
dec(k2) // смещаем индекс свободной позиции спарава
jmp endcycle2
quit:
}
}