none
Помогите с работой на Assembler`e с массивом. RRS feed

  • Вопрос

  • Всем привет. Есть задача: нужно найти в массиве рандомных чисел элементы, равные К, и перенести их в конец массива. При чём порядок всех остальных элементов не должен измениться. И всё это должно быть реализовано в виде функции.

    Главная проблема заключается в режиме адресации. Не могу вывести из функции массив. Не пойму, где накосячил, хотя задачка лёгкая.

    void CalcSumElements(long Arr[], short Lenght, long* ArrEx[]);      //прототип 
    
    ...
    CalcSumElements(arr, lenght, arrEx);
    for (int q=0; q<lenght; q++)
    fout<<i+1<<"  "<<arrEx[q];
    ...
    
    void CalcSumElements(long Arr[], short Lenght, long* ArrEx[])
    {
    	__asm
    	{
    		mov		ebx,		8[ebp]
    		xor		esi,		esi
    		xor		eax,		eax
    		mov		edx,		100
    go:
    		cmp		[ebx][esi*4],	edx
    		jne		Fin
    	
    		mov		eax,		ecx
    go2:
    		mov		edi,		[ebx][eax*4+4]
    		mov		[ebx][eax*4], edi
    		inc		eax
    		cmp		eax,		12[ebp]
    		je		Fin
    		jmp		go2
    Fin:
    		cmp		esi,		12[ebp]
    		je		Fin2
    		inc		esi
    		jmp		go
    Fin2:
    		mov esi, 16[ebp]
    		mov [esi],ebx
    	}
    }

    Если сохраняю по адресу [esi] адрес массива, тоже выдаёт совсем не то!

    Помогите!

    9 декабря 2013 г. 9:22

Ответы

  • Здравствуйте, Вы попали в раздел для разработчиков собственных программ на основе и с использованием технологий Майкрософт "Где задать вопрос".

    В данном разделе, помогают выбрать раздел, в котором следует задавать тот или иной вопрос возникший при разработке собственных программ. В этом ключе и должен быть построен вопрос.

    Внимательно ознакомьтесь с левой частью страницы и определитесь в какой раздел перенести Ваш вопрос.


    Да, я Жук, три пары лапок и фасеточные глаза :))

    • Помечено в качестве ответа ЖукMVP, Moderator 17 декабря 2013 г. 2:10
    11 декабря 2013 г. 4:28
    Модератор