Форум программистов, компьютерный форум CyberForum.ru

Сделать вставку асма - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пирамидальная сортировка http://www.cyberforum.ru/cpp-beginners/thread144987.html
Всем hello!!! Плиз помогите реализовать пирамидальную сортировку на С++!!! Зарание блогодарен!!!
C++ С++ \ Одномерный массив: Добавить элемент с номером К. Здравствуйте: нужно помоч переделать. Она полностью рабочая. Но без процедур и вся в МЕЙНЕ, переделать что бы в МЕЙНЕ был только вывод массива и результата. А в процедуре все остальное. Одномерный массив: Добавить элемент с номером К. #include <iostream.h> #include <conio.h> void main() { clrscr(); int n,m,j; http://www.cyberforum.ru/cpp-beginners/thread144981.html
C++ Удалить самую длинную строку матрицы
1. Критерий для поиска в массиве структур: Сотрудники со стажем более 10 лет и заработной платой более 15000! 2. Задача для обработки массива строк: Уничтожить самую длинную строку массива! #include "iostream" #include "string.h" using namespace std; struct lines { char *line;
C++ Работа конференции с разбивкой...
Програма работи конференции с разбивкой докладов секциями.Количество секций и докладов в каждой секции задать самостоятельно.Составить модуль формирования нового списка,содержащего доклади с несколькими авторами.
C++ Редактируем http://www.cyberforum.ru/cpp-beginners/thread144955.html
Редактируем программу: #include"stdafx.h" #include <iostream> #include <cstring> #include <conio.h> using namespace std; int main() {
C++ Эквивалент числа Хотелось бы понять поподробнее что тут происходит. В смысле сам процесс чуть ли не по строкам. (number - введенное ранее число). // Преобразует число в словесный эквивалент string numberToWords( unsigned long int number ) { string result="ноль"; // Результат преобразования, по умолчанию - "ноль" if( number ){ // Если заданное число не является нулем, то разбираем его на части result... подробнее

Показать сообщение отдельно
Vasal
0 / 0 / 0
Регистрация: 16.03.2010
Сообщений: 55
15.06.2010, 09:49  [ТС]     Сделать вставку асма
а как сдесь сделать так, чтоб он отпечатовал 2 ответа????то есть, с начала С, а потом асм

Добавлено через 11 часов 40 минут
что то у мя ваще эта программа отказывается работать
вот другой код, может с ним что нить получится:

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
85
86
87
88
89
90
91
92
93
94
95
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
 
 
typedef int  T_elem_type;
class T_dvumern_arr
{    
    typedef std::vector<T_elem_type>  T_row;
    typedef std::vector<T_row>        T_matrix;
    typedef std::set<T_elem_type>     T_stand_elems;
 
    T_elem_type                       n_;
    T_matrix                          matrix_;    
    T_stand_elems                     stand_elems_;
public:
    T_dvumern_arr(T_elem_type  n) : n_(n), matrix_(n_, T_row(n_))
    {}
    //-----------------------------------------------------------
    void  input()
    {
        std::cout << "Введите элементы матрицы "
                  << n_
                  <<" x "
                  << n_
                  << ": "
                  << std::endl;
        for(int i = 0; i < n_; ++i)
        {
            stand_elems_.insert(i + 1);
            for(int j = 0; j < n_; ++j)
            {
                std::cout << "A("    
                          << i + 1
                          << ", "
                          << j + 1
                          << ") = ";
                std::cin >> matrix_[i][j];
            }
            std::cout << std::endl;
        }//for(int i = 0; i < n_; ++i)    
    }//void  input()
    //-----------------------------------------------------------
    bool are_latin_rows(T_matrix  matrix)
    {
        for(int i = 0; i < n_; ++i)
        {
            T_row  cur_row = matrix[i];
            if(T_stand_elems(cur_row.begin(), cur_row.end()) != stand_elems_)
            {
                return false;
            }
        }
        return true;
    }
    //-----------------------------------------------------------
    T_matrix  get_transp_matrix()
    {        
        T_dvumern_arr  temp_dvumern_arr(n_);        
        for(int i = 0; i < n_; ++i)
        {
            for(int j = 0; j < n_; ++j)
            {                
                temp_dvumern_arr.matrix_[i][j] = matrix_[j][i];
            }
        }        
        return  temp_dvumern_arr.matrix_;
    }
    //-----------------------------------------------------------
    bool is_latin_kvadrat()
    {
        return are_latin_rows(matrix_)
               && are_latin_rows(get_transp_matrix());
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
 
    std::cout << "Введите размерность латинского квадрата: ";
    T_elem_type  n = 0;
    std::cin >> n;
    if(n < 1) return 0;
    T_dvumern_arr  dvumern_arr(n);
    dvumern_arr.input();
    std::cout << "Заданная матрица "
              << (dvumern_arr.is_latin_kvadrat() ? "является " : "не является ")
              << "латинским квадратом."
              << std::endl;
    system("pause");
    return 0;
}
Добавлено через 15 минут
исправьте сдесь если не правильно, просто программа должна выдавать 2 ответа, а выходит один

Добавлено через 1 минуту
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
 
typedef int  T_elem_type;
class T_dvumern_arr
{    
    typedef std::vector<T_elem_type>  T_row;
    typedef std::vector<T_row>        T_matrix;
    typedef std::set<T_elem_type>     T_stand_elems;
 
    T_elem_type                       n_;
    T_matrix                          matrix_;    
    T_stand_elems                     stand_elems_;
public:
    T_dvumern_arr(T_elem_type  n) : n_(n), matrix_(n_, T_row(n_))
    {}
    //-----------------------------------------------------------
    void  input()
    {
        std::cout << "Введите элементы матрицы "
                  << n_
                  <<" x "
                  << n_
                  << ": "
                  << std::endl;
        for(int i = 0; i < n_; ++i)
        {
            stand_elems_.insert(i + 1);
            for(int j = 0; j < n_; ++j)
            {
                std::cout << "A("    
                          << i + 1
                          << ", "
                          << j + 1
                          << ") = ";
                std::cin >> matrix_[i][j];
            }
            std::cout << std::endl;
        }//for(int i = 0; i < n_; ++i)    
    }//void  input()
    //-----------------------------------------------------------
    bool are_latin_rows(T_matrix  matrix)
    {
        for(int i = 0; i < n_; ++i)
        {
            T_row  cur_row = matrix[i];
            if(T_stand_elems(cur_row.begin(), cur_row.end()) != stand_elems_)
            {
                return false;
            }
        }
        return true;
    }
    //-----------------------------------------------------------
    T_matrix  get_transp_matrix()
    {        
        T_dvumern_arr  temp_dvumern_arr(n_);        
        for(int i = 0; i < n_; ++i)
        {
            for(int j = 0; j < n_; ++j)
            {                
                temp_dvumern_arr.matrix_[i][j] = matrix_[j][i];
            }
        }        
        return  temp_dvumern_arr.matrix_;
    }
    //-----------------------------------------------------------
    bool is_latin_kvadrat()
    {
        return are_latin_rows(matrix_)
               && are_latin_rows(get_transp_matrix());
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
 
    std::cout << "Введите размерность латинского квадрата: ";
    T_elem_type  n = 0;
    std::cin >> n;
    if(n < 1) return 0;
    T_dvumern_arr  dvumern_arr(n);
    dvumern_arr.input();
    std::cout << "Заданная матрица "
              << (dvumern_arr.is_latin_kvadrat() ? "является " : "не является ")
              << "латинским квадратом."
              << std::endl;
    std::cout << "Начало асма" ;
    system("pause");
};
    bool is_latin_kvadrat(int **matrix, int n)
{
        bool result;
        int *vector = new int[n];
        for(int i=0; i<n; i++)
                vector[i] = i+1;
        int *temp = new int[n];
      [ASM]
_asm
         {
                 mov    ecx, n // кол-во элементов
                 xor    ebx, ebx //индекс
_loop0:
                 push   ecx             // сохраняем счетчик
                 push   ebx             // и индекс
                 mov    eax, [matrix]   // получим указатель на матрицу
                 mov    esi, [eax+ebx]  // разыменуем с масштабированием(т.е. получим в цикле указатели на строки матрицы)
                 mov    ecx, n                  // 
                 mov    edi, [temp]             // указатель на временный вектор(в нем будем хранить сортированные строки матрицы)
                 rep    movsd                   // копируем строку
_loop1:                                                 // далее - обычная сортировка массива пузырьком
                 mov    ecx, n
                 mov    esi, [temp]
                 xor    ebx, ebx
_loop2:
                 lodsd
                 cmp    eax, dword ptr [esi]
                 jbe    no_swap
                 xchg   eax, dword ptr [esi]
                 mov    dword ptr [esi-4], eax
                 inc    ebx
no_swap:
                 loop   _loop2
                 cmp    ebx, 0
                 jne    _loop1
                                                                // до сюда
                 mov    edi, [vector]   // а тут сравниваем сортированную строку с эталонным вектором
                 mov    ecx, n
                 repnz  cmpsd
                 jz     _noLatin                        // не похожа
                 pop    ebx                             // восстанавливаем регистры
                 add    ebx, 4                  // индекс массива (+sizeof(int))
                 pop    ecx
                 loop   _loop0                  // цикл по строкам матрицы
                 jmp    _Latin                  // прошли все строки удачно
_noLatin:
                 pop    eax                             // не удачно
                 pop    eax                             //  - выровняем стек
                 xor    eax, eax                // result = false;
                 mov    result, al
                 jmp    _end
_Latin:
                 mov    eax, 1                  // result = true;
                 mov    result, al
_end:
         }
[/ASM]  
 
        
        delete [] vector;               // освободим память
        delete [] temp;
        return result;
}
Добавлено через 53 секунды
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
 
typedef int  T_elem_type;
class T_dvumern_arr
{    
    typedef std::vector<T_elem_type>  T_row;
    typedef std::vector<T_row>        T_matrix;
    typedef std::set<T_elem_type>     T_stand_elems;
 
    T_elem_type                       n_;
    T_matrix                          matrix_;    
    T_stand_elems                     stand_elems_;
public:
    T_dvumern_arr(T_elem_type  n) : n_(n), matrix_(n_, T_row(n_))
    {}
    //-----------------------------------------------------------
    void  input()
    {
        std::cout << "Введите элементы матрицы "
                  << n_
                  <<" x "
                  << n_
                  << ": "
                  << std::endl;
        for(int i = 0; i < n_; ++i)
        {
            stand_elems_.insert(i + 1);
            for(int j = 0; j < n_; ++j)
            {
                std::cout << "A("    
                          << i + 1
                          << ", "
                          << j + 1
                          << ") = ";
                std::cin >> matrix_[i][j];
            }
            std::cout << std::endl;
        }//for(int i = 0; i < n_; ++i)    
    }//void  input()
    //-----------------------------------------------------------
    bool are_latin_rows(T_matrix  matrix)
    {
        for(int i = 0; i < n_; ++i)
        {
            T_row  cur_row = matrix[i];
            if(T_stand_elems(cur_row.begin(), cur_row.end()) != stand_elems_)
            {
                return false;
            }
        }
        return true;
    }
    //-----------------------------------------------------------
    T_matrix  get_transp_matrix()
    {        
        T_dvumern_arr  temp_dvumern_arr(n_);        
        for(int i = 0; i < n_; ++i)
        {
            for(int j = 0; j < n_; ++j)
            {                
                temp_dvumern_arr.matrix_[i][j] = matrix_[j][i];
            }
        }        
        return  temp_dvumern_arr.matrix_;
    }
    //-----------------------------------------------------------
    bool is_latin_kvadrat()
    {
        return are_latin_rows(matrix_)
               && are_latin_rows(get_transp_matrix());
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
 
    std::cout << "Введите размерность латинского квадрата: ";
    T_elem_type  n = 0;
    std::cin >> n;
    if(n < 1) return 0;
    T_dvumern_arr  dvumern_arr(n);
    dvumern_arr.input();
    std::cout << "Заданная матрица "
              << (dvumern_arr.is_latin_kvadrat() ? "является " : "не является ")
              << "латинским квадратом."
              << std::endl;
    std::cout << "Начало асма" ;
    system("pause");
};
    bool is_latin_kvadrat(int **matrix, int n)
{
        bool result;
        int *vector = new int[n];
        for(int i=0; i<n; i++)
                vector[i] = i+1;
        int *temp = new int[n];
        _asm
         {
                 mov    ecx, n // кол-во элементов
                 xor    ebx, ebx //индекс
_loop0:
                 push   ecx             // сохраняем счетчик
                 push   ebx             // и индекс
                 mov    eax, [matrix]   // получим указатель на матрицу
                 mov    esi, [eax+ebx]  // разыменуем с масштабированием(т.е. получим в цикле указатели на строки матрицы)
                 mov    ecx, n                  // 
                 mov    edi, [temp]             // указатель на временный вектор(в нем будем хранить сортированные строки матрицы)
                 rep    movsd                   // копируем строку
_loop1:                                                 // далее - обычная сортировка массива пузырьком
                 mov    ecx, n
                 mov    esi, [temp]
                 xor    ebx, ebx
_loop2:
                 lodsd
                 cmp    eax, dword ptr [esi]
                 jbe    no_swap
                 xchg   eax, dword ptr [esi]
                 mov    dword ptr [esi-4], eax
                 inc    ebx
no_swap:
                 loop   _loop2
                 cmp    ebx, 0
                 jne    _loop1
                                                                // до сюда
                 mov    edi, [vector]   // а тут сравниваем сортированную строку с эталонным вектором
                 mov    ecx, n
                 repnz  cmpsd
                 jz     _noLatin                        // не похожа
                 pop    ebx                             // восстанавливаем регистры
                 add    ebx, 4                  // индекс массива (+sizeof(int))
                 pop    ecx
                 loop   _loop0                  // цикл по строкам матрицы
                 jmp    _Latin                  // прошли все строки удачно
_noLatin:
                 pop    eax                             // не удачно
                 pop    eax                             //  - выровняем стек
                 xor    eax, eax                // result = false;
                 mov    result, al
                 jmp    _end
_Latin:
                 mov    eax, 1                  // result = true;
                 mov    result, al
_end:
         }
 
        
        delete [] vector;               // освободим память
        delete [] temp;
        return result;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru