Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 17:26   #1
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию Asm в С++

возникла тут задачка,хз,верно-неверно с точки зрения асма написал

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


Код:
#include "stdafx.h"
#include <iostream>

using namespace std;


void task1(){
    int arr[5000],narr[5000],n;
    cout << "Enter array's length" << endl;
    cin >> n;
    cout << "Enter the elements" << endl;

    for(int i = 0; i < n; ++i)
        cin >> arr[i];
    

    __asm{
        xor ecx,ecx
        
        xor eax,eax //обнуление регистров eax,ebx
        xor ebx,ebx
        xor edx,edx
        mov ecx,n
cycle1: 
        add eax,arr[ebx] //накапливаем сумму в eax
        add ebx,4 //увеличиваем счетчик
        loop cycle1;
        
        mov ecx,n //длинну храним в ecx
        div ecx
        mov edx,eax //помещаем среднее арифметическое в edx
        xor ebx,ebx
        xor esi,esi //счетчик для левой части    
        xor edi,edi
        mov edi,ecx  // счетчик для правой части
cycle2:
        
        mov eax,arr[ebx]
        add ebx,4
        cmp eax,edx //сравниваем ср.арифм. и текущий элемент

        JG    point1 // если текущий элемент больше идем на метку 1
        JLE point2 // если текущий элемент меньше идем на метку 2
endcycle2:
        loop cycle2

        jmp quit
point1:
        mov narr[esi],eax //помещаем элемент в левую половину массива
        add esi,4 //смещаем индекс свободной позиции слева
        jmp endcycle2
point2:
        mov narr[edi],eax // помещаем элемент в правую половину массива
        sub edi,4 // смещаем индекс свободной позиции спарава
        jmp endcycle2

quit:
    }

    for (int i=0;i < n;++i)
        cout<<narr[i]<<endl;
}
}

Последний раз редактировалось ge4r; 17.10.2010 в 18:05.
ge4r вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие С++ и ASM FUNNY_SAM Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 13.12.2009 14:27
с++ и ASM breate Общие вопросы C/C++ 4 04.11.2009 20:56
Помогите с ASM RomTB Помощь студентам 4 24.05.2009 11:27
[c++]asm Nightwalker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.10.2008 19:39
Amature ASM nighthack Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.06.2008 23:45