Aссемблерные вставки в Cpp

  • Автор темы ge4r
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

ge4r

Гость
#1
Приветствую,нужен направляющий пинок по решению задачки)
задача в следующем
Разделить массив на две части, поместив в первую эле-менты, большие среднего арифметического их суммы, а во вторую - меньшие (части не сортировать).Обязательно использовать адресную арифметику

На языке высокого уровня естественно пишется за 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:

}
}
 
Статус
Закрыто для дальнейших ответов.