Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
#1

Вызов функций на Ассемблере в программе на С++ - C++

28.05.2011, 02:23. Просмотров 1827. Ответов 2
Метки нет (Все метки)

Помогите,пожалуйста.
Нужно написать программу, состоящую из ассемблерной функции в одном файле и вызове её в главном файле на С++.
Программа пока сделана только как один файл с ассемблерной вставкой.
Помогите её разбить на 2 файла.
Вот код:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,".1251");
    char*stroka=new char[255];
    cout<<"Введите строку длиной не более 255 символов"<<endl;
    cin.getline(stroka,255);
    short int N=strlen(stroka);
    char*new_str=new char[N++];
    _asm
    {
        mov esi,stroka ; исходная строка
        mov edi,new_str ; новая строка
        xor edx,edx ; edx - номер элемента новой строки, с которой работает программа
begin:
        xor eax,eax ;ah-  начало слова,al- конец
        xor ebx,ebx ; bh- начало минимального слова ; bl - его длина
        xor ecx,ecx ;ecx- номер элемента, с которым в данный момент работает программа
        mov bl,-1
        mov al,-1
min_word :
        cmp cx,N
        je end
        cmp [esi][ecx],' '
        je word_end
        cmp [esi][ecx],'\0'
        je word_end
        inc cx
        
        jmp min_word
word_end:
        
        mov ah,al
        inc ah
        mov al,cl
        inc cx
        cmp ah,al
        je min_word
        sub al,ah
        cmp al,0
        jng min_word
        cmp al,bl
        jg new_min_word
        add al,ah
        jmp min_word
new_min_word:
        
        mov bl,al
        add al,ah
        mov bh,ah
        jmp min_word
end:
        cmp bh,bl
        push ebx
        mov bl,bh
        mov bh,0
        mov ecx,ebx
        pop ebx
delete_word:
 
        cmp bl,-1
        je full_end
        cmp bl,0
        je exit_point
        mov ax,[esi][ecx]
        mov [edi][edx],ax
        inc edx
        mov [esi][ecx],' '
        inc ecx
        dec bl
        jmp delete_word
exit_point:
        
        mov[edi][edx],' '
        inc edx
        jmp begin
full_end:
        mov[edi][edx],'\0'
    }
    cout<<"Искомая строка"<<endl;
    cout<<endl<<new_str<<endl;
    return 0;
}
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 02:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функций на Ассемблере в программе на С++ (C++):

Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h - C++
Помогите решить задания: 1.Дано натуральное число n. Найти разность между первой цифрой этого числа и суммой всех остальных. ...

Передача значений функций в главную программу, вызов функций - C++
Здравствуйте! Скорее всего, неправильно передаю значения функциям и в главную программу. Помогите найти ошибку! В итоге выводит...

Вызов функций внутри других функций - C++
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; ...

Вызов функций - C++
Всем привет! Слушайте, в проге которую я сейчас пишу несколько функций, и мне нужно по ходу работы программы вызывать другие функции. Из...

Вызов функций - C++
В одномерном массиве, состоящем из п целых элементов, вычислить: 1) номер максимального элемента массива; 2) произведение элементов...

Вызов функций - C++
Можно ли преобразовать строку, вводимою с консоли в вызов функции? То есть к примеру у меня предопределено несколько функций. С консоли...

2
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,357
Записей в блоге: 2
Завершенные тесты: 1
28.05.2011, 10:02 #2
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//asm_function.cpp
void func(char* stroka,char* new_str,short N){
_asm
        {
                mov esi,stroka ; исходная строка
                mov edi,new_str ; новая строка
                xor edx,edx ; edx - номер элемента новой строки, с которой работает программа
begin:
                xor eax,eax ;ah-  начало слова,al- конец
                xor ebx,ebx ; bh- начало минимального слова ; bl - его длина
                xor ecx,ecx ;ecx- номер элемента, с которым в данный момент работает программа
                mov bl,-1
                mov al,-1
min_word :
                cmp cx,N
                je end
                cmp [esi][ecx],' '
                je word_end
                cmp [esi][ecx],'\0'
                je word_end
                inc cx
                
                jmp min_word
word_end:
                
                mov ah,al
                inc ah
                mov al,cl
                inc cx
                cmp ah,al
                je min_word
                sub al,ah
                cmp al,0
                jng min_word
                cmp al,bl
                jg new_min_word
                add al,ah
                jmp min_word
new_min_word:
                
                mov bl,al
                add al,ah
                mov bh,ah
                jmp min_word
end:
                cmp bh,bl
                push ebx
                mov bl,bh
                mov bh,0
                mov ecx,ebx
                pop ebx
delete_word:
 
                cmp bl,-1
                je full_end
                cmp bl,0
                je exit_point
                mov ax,[esi][ecx]
                mov [edi][edx],ax
                inc     edx
                mov [esi][ecx],' '
                inc ecx
                dec bl
                jmp delete_word
exit_point:
                
                mov[edi][edx],' '
                inc edx
                jmp begin
full_end:
                mov[edi][edx],'\0'
        }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//main.cpp
#include<iostream>
using namespace std;
void func(char*,char*,short);
int main()
{
        setlocale(LC_ALL,".1251");
        char*stroka=new char[255];
        cout<<"Введите строку длиной не более 255 символов"<<endl;
        cin.getline(stroka,255);
        short int N=strlen(stroka);
        char*new_str=new char[N++];
        func(stroka, new_str,N);
        cout<<"Искомая строка"<<endl;
        cout<<endl<<new_str<<endl;
        return 0;
}
кстати код в исходном виде студия не скомпилировала, ибо using namespace std и метка begin: с конфликтным именем.
0
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
28.05.2011, 11:12  [ТС] #3
Мне не то нужно.
Нужно разбить проект на 2 файла. Первый - чисто ассемблеровский код( .asm) . Второй - это с++ файл с вызовом функции из первого.
Исходный код у меня компилировался, может быть дело в студии? У меня 2008.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2011, 11:12
Привет! Вот еще темы с ответами:

Вызов функций - C++
Можно ли программно вызвать все функции записанные в файле?

Вызов функций - C++
Для чего нужны stdcall и cdecl? и как они работают? Спасибо=)

Объявление и вызов функций? - C++
Из двух книжек ни фига не понял как вызывать эти чёртовы функции, а без них никуда. Помогите пожалуйста. в этом примере: ...

Определение и вызов функций - C++
Здравствуйте. Такая проблема с задачей....Нужно Определить функцию, проверяющую, является ли данное число простым, и функцию, вычисляющую...


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

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

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