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

Ассемблеровские вставки в C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ многовымерние масиви http://www.cyberforum.ru/cpp-beginners/thread276265.html
Элемент матрицы назовем седловой точки, если он является наименьшим в своей строке и одновременно крупнейшим в своем столбце или, наоборот, является крупнейшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы размером 10 × 15 напечатайте индексы всех ее седловых точек.
C++ Вычислить сумму ряда Вычислить сумму ряда: S=3/2!+(5+9)/4!+(7+13+19)/6!+... N=2,4,6,8,10...(число стоящее в знаменателе-задается с экрана)! Код реализовать в Си. Заранее благодарен откликнувшимся. Добавлено через 4 часа 36 минут !!!!!) http://www.cyberforum.ru/cpp-beginners/thread276261.html
C++ Раздробить слово
Дано слово: "write('a=c-b.vv" Как создать массивы: со словами {write,vv}, с переменными {a,b,c}, со знаками {(,',=,-,.},
Создать класс "участник" C++
Доброго времени суток, форумчане!!! Сейчас прохожу тему по С++ "Классы" и пока не очень догоняю. А тут препод сразу такое задание дал: 1. Класс “участник”: фамилия, телефон, адрес. 2. Потомки: “участник очереди на получение жилья” (дата постановки на учет, наличие льгот, порядковый номер, в очереди); “участник выездной конференции”(требует ли поселение, длительность доклада, время...
C++ Динамическое выдиление памяти http://www.cyberforum.ru/cpp-beginners/thread276245.html
Написать программу для обработки массивов. Все массивы создаются путем динамического выделения памяти. Доступ к их элементов производится с помощью исключительно указателей. Подсчитать количество отрезков, образующих непрерывные последовательности положительных чисел расположенных по возрастанию
C++ с++ Использование структур Даны сведения о кубиках: размер кубика, его цвет, материал.Найти количество кубиков каждого из перечисленных цветов и их суммарный объем. подробнее

Показать сообщение отдельно
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
06.05.2011, 19:05  [ТС]     Ассемблеровские вставки в C++
Скажите что за ошибка??

1>c:\users\админ\documents\visual studio 2008\projects\asm\asm1.cpp(86) : warning C4405: 'eax' : identifier is reserved word
1>c:\users\админ\documents\visual studio 2008\projects\asm\asm1.cpp(86) : error C2400: inline assembler syntax error in 'opcode'; found 'eax'

тыЩу раз сравнивал так элементы и все Ок было, а сейчас =/

Задание:
"Дана последовательность слов. Напечатать все слова, отличные от слова "hello" . "

На функции не смотрите, я ими не горжусь=)) но они работают

Не вводите ничего кроме английских букв и пробелов (двойные пробелы и т.д тоже нельзя), в конце строки пробелов быть не должно
Пример строки: "first second third";

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
#include <iostream>
#include <string>
using namespace std;
int prob(const string & str)
{
    int kol=0;
    int n= str.size();
    for(int i=0; i<n; i++)
            if(str[i]==32)
                ++kol;
    return kol;
}
char **arr(string str)
{
        int n=str.size();
        int kol_prob=prob(str);
        
        char **mas=new char *[kol_prob+2];//резервируем под количество слов
        
        for(int i=0, f=0; i<n; i++)
        {
            if(str[i]==' ')
            {
                string temp=str;
                temp.erase(temp.begin()+i, temp.end());//получаем слово
                str.erase(str.begin(), str.begin()+i+1);//удаляем включая пробел
                n-=i+1;//уменьшаем размер соразмерно удалению
                mas[f]=new char [i+1];//резервируем память под массив
                for(int j=0; j<(int)temp.size(); j++)
                    mas[f][j]=temp[j];
                //mas[f]=(char*)temp.c_str();
                mas[f][temp.size()]='\0';
                i=0;//на начало
                f++;
                continue;
            }
            if(f==kol_prob && i==n-1)
            {
                //последнего слова
                string temp=str;
                temp.erase(temp.begin()+i+1, temp.end());//получаем слово
                str.erase(str.begin(), str.begin()+i+1);//удаляем включая пробел
                n-=i+1;//уменьшаем размер соразмерно удалению
                mas[f]=new char [i+1];//резервируем память под массив
                for(int j=0; j<(int)temp.size(); j++)
                    mas[f][j]=temp[j];
                //mas[f]=(char*)temp.c_str();
                mas[f][temp.size()]='\0';
                //i=0;//на начало
                f++;
            }
        }
        mas[kol_prob+1]='\0';
        return mas;
}
int main()
{
        setlocale(0,"");
        char b[]={'h','e','l','l','o'};
        int b_size = sizeof b;
 
        string str;
  
        cout << "Введите строку: ";
        getline(cin,str);
    
        int N=0, M=0;
        char **a=arr(str);
 
        while(a[N]!='\0')//узнаю количество слов
            N++;
        for(int i=0; i<N; i++)
        {
            while(a[i][M]!='\0')//узнаю количество символов в слове
                M++;
            
            char *f=new char [M+1];
            for(int j=0; j<M; j++)
                f[j]=a[i][j];
            f[M]='\0';
 
            _asm 
            {
                mov eax, M
                mov ebx, b_size
                сmp eax, ebx //сравниваем размер слов
                jne print//если не равны то напечатать слово
                //иначе
                mov edx, eax    // edx - размер слова
                mov esi,f       //адрес таблицы в регистре esi
                lodsb       // загружаем в al испытуемый символ из слова
                lea ebx, b      //ebx - массив "hello"
l_next_char:// проверяем следующий символ
                test edx, edx // сначала убеждаемся, что слово ещё не кончилась
                jz next_word
 
                cmp al, byte ptr [ebx]// сравниваем символ из слова с текущим символом в массиве "hello"
                je l_found// если они совпадают, переходим по метке l_found
                // иначе печатаем это слово
                jmp print
l_found:// буквы совпали
            dec edx// уменьшаем счётчик оставшихся для проверки символов
            // и переходим к следующему символу
            jmp l_next_char
print:
            }
            for(int j=0;f[j]!='\0'; j++)
                cout<<f[j];
            cout<<" ";
next_word:
            M=0;//обнуляем размер слова, чтоб перейти к другому
        }       
        system("pause");
        return 0;
}
 
Текущее время: 20:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru