Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
flooder01
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 10
1

Сортировка на ассебмлере и вызов функции в C

10.05.2014, 19:19. Просмотров 530. Ответов 0
Метки нет (Все метки)

Здравствуйте!
Как нижеданную функцию на ассемблере вставить в С код? Я вижу как её объявляют и вызывают, а сам код ассемлере реализации функции где и как вставить? Заранее всем спасибо.


Есть код сортировки массива на ассебмлере.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.686
.MODEL  FLAT, stdCall
.STACK
 
.CODE
 
ASMsort proc Arr:DWORD, Lngth:DWORD
    mov esi, Arr    ;позиционируемся на массив
a2: mov ecx,[Lngth]    
    xor ebx,ebx        
a3: mov eax,[esi+ecx*4-4]    ;получаем значение очередного элемента    
    cmp [esi+ecx*4],eax    ;сравниваем со значением соседнего элемента
    jnb a1    ;если больше или равен - идем к следующему элементу
    setna bl   
    xchg eax,[esi+ecx*4]    ;меняем значение элементов местами
    mov [esi+ecx*4-4],eax
a1: loop a3    ;двигаемся вверх до границы массива
    add esi,4    ;сдвигаем границу отсортированного массива
    dec ebx    ;проверяем были ли перестановки
    jnz exit    ;если перестановок не было - заканчиваем сортировку
    dec Lngth        ;уменьшаем количество неотсортированных элементов
    jnz a2;если есть еще неотсортированные элементы - начинаем новый проход
exit:   ret
 
ASMsort endp
end
Есть С код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <windows.h>
 
extern int _cdecl ASMsort(int arr[], int length); // Объявление функции сортировки на ассемблере
 
void BUBBLEsort(int arr[], int n){
    int i, j, tmp;
    n = n-1;
 
    for (i = n; i > 0; i--){        // i - номер прохода
       for(j = 0; j < i; j++){
           if(arr[j] > arr[j+1]){
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
           }
        }
    }
}
 
int main(){
    const int length = 10000;
    int i, arr_for_c[10000], arr_for_asm[10000];    
    float t1, t2, t_c, t_asm; // время
 
    for( i = 0; i < length; i++){arr_for_c[i]=arr_for_asm[i]=rand();} // заполнение случ числами 
   
    t1 = (float)GetTickCount(); // время до сортировки
    ASMsort(arr_for_asm, &length); // сортировка массива
    t2 = (float)GetTickCount(); // время поле сортировки
    t_asm = t2 - t1; // время которое эта сортировка выполнялась
 
    t1 = (float)GetTickCount();
    BUBBLEsort(arr_for_c, length);
    t2 = (float)GetTickCount();
    t_c = t2 - t1;
 
    printf("c sort:     ");
    for( i = 0; i < 10; i++){printf("%d ",arr_for_c[i]);}
    printf("\nasm sort: ");
    for( i = 0; i < 10; i++){printf("%d ",arr_for_asm[i]);}
    printf("\n\n");
    printf("c time:     %f ms\n",t_c);
    printf("asm time:   %f ms",t_asm);
    
    _getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 19:19
Ответы с готовыми решениями:

Вызов функции
В чем может быть ошибка? Помогите исправить #include &quot;stdafx.h&quot; #include &lt;iostream&gt; int...

Вызов функции
Здравствуйте. Имеется задача - используя только LoadLibrary и GetProcAddress нужно вызвать...

Вызов функции
Здравствуйте. Возникает ошибка, когда я пытаюсь вызвать функцию MessageBox из ассемблерной...

Вызов С++ функции из ассемблера
Здравствуйте, есть массив в ASM(уже инициализированный), вызывается функция С++ которая сортирует и...

Вызов функции API
Возник такой вопрос, почему когда я пишу mov eax, mov X,eax mov eax, mov Y,eax mov eax, mov...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 19:19

Вызов API функции
Нужно вызвать функцию GetUserNameA... но MASM выдает ошибку: undefined symbol : GetUserNameA вот...

Вызов функции написанной на ассемблере
Вопрос заключается в следующем, когда я пытаюсь запустить программу, компелятор выдает:&quot;Ошибка...

Вызов функции по указателю со смещением
Добрый день. Есть dll открытая декомпилятором. В ней есть интересующая меня функция, но она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru