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

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

Войти
Регистрация
Восстановить пароль
 
 
mat_for_c
 Аватар для mat_for_c
120 / 115 / 21
Регистрация: 26.04.2013
Сообщений: 597
Завершенные тесты: 2
#1

Обнулить элементы вектора через __asm - C++

06.04.2014, 15:06. Просмотров 773. Ответов 24
Метки нет (Все метки)

Хочу обнулить элементы вектора через __asm

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
#include <vector>
#include <iostream>
 
using namespace std;
 
void main() {
   vector<vector<int>> v(2, vector <int> (3, 1));
 
   __asm {
      mov ecx, 2
      mov edi, v
      mov eax, dword ptr [edi + 16]
      mov edi, [edi][1]
        
      //mov dword ptr [edi + 8], 0
   cycl:
      mov dword ptr [edi + ecx*4], 0
      //add eax, 4
      loop cycl
   }
     
   for (int i = 0; i < 2; ++i) {
      for (int j = 0; j < 3; ++j)
         cout << v[i][j] << " ";
      cout << endl;
   }
}
Сам вопрос: eax и edi имеют разные значения, причем в eax лежит правильный результат. Я же хочу получить доступ ко 2-й строке через индексацию [1]. Как это реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 15:06     Обнулить элементы вектора через __asm
Посмотрите здесь:

Обнулить элементы матрицы C++
Дан список, элементы которого являются координатами вектора. Найти длину вектора C++
Обнулить нечетные элементы матрицы C++
Обнулить четные элементы матрицы C++
Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора C++
C++ Обнулить все положительные элементы матрицы
C++ Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mat_for_c
 Аватар для mat_for_c
120 / 115 / 21
Регистрация: 26.04.2013
Сообщений: 597
Завершенные тесты: 2
10.04.2014, 21:54  [ТС]     Обнулить элементы вектора через __asm #21
Цитата Сообщение от DrOffset Посмотреть сообщение
VS делает свои оптимизации с заточкой на Intel платформу
чтобы в этом убедиться, надо построить проект на AMD, а потом запустить на Intel
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
10.04.2014, 22:19     Обнулить элементы вектора через __asm #22
Цитата Сообщение от mat_for_c Посмотреть сообщение
чтобы в этом убедиться, надо построить проект на AMD
Это не поможет. Не важно на какой платформе строить. Просто у Microsoft c Intel партнерство и их компилятор заточен под Intel лучше. Нужно найти компилятор, с оптимизациями для AMD и строить проект на нем.
mat_for_c
 Аватар для mat_for_c
120 / 115 / 21
Регистрация: 26.04.2013
Сообщений: 597
Завершенные тесты: 2
11.04.2014, 14:14  [ТС]     Обнулить элементы вектора через __asm #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Это не поможет
посмотрел что имеется в папке VC/lib, увидел, что там еще лежит папка AMD. может, если через нее собирать проект, то на AMD нормально по скорости получится?
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
11.04.2014, 14:50     Обнулить элементы вектора через __asm #24
Цитата Сообщение от mat_for_c Посмотреть сообщение
лежит папка AMD. может, если через нее собирать проект, то на AMD нормально по скорости получится?
Возможно, не могу точно сказать. Но попробовать стоит.
Может быть еще это поможет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 22:16     Обнулить элементы вектора через __asm
Еще ссылки по теме:

STL. Функция, которая будет искать элементы большее среднего арифметического вектора и удалять их из вектора C++
C++ Массивы. Обнулить элементы столбцов
C++ Обнулить элементы матрицы, равные максимальному и минимальному
Обнулить элементы матрицы A=176 C++
Обнулить элементы заданного столбца матрицы C++

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

Или воспользуйтесь поиском по форуму:
mat_for_c
 Аватар для mat_for_c
120 / 115 / 21
Регистрация: 26.04.2013
Сообщений: 597
Завершенные тесты: 2
11.04.2014, 22:16  [ТС]     Обнулить элементы вектора через __asm #25
Цитата Сообщение от DrOffset Посмотреть сообщение
. После работы обоих алгоритмов векторы не равны между собой (я сохранил результата работы первого алгоритма и сравнил с результатом второго, векторы не равны). Это значит, что асм делает заполнение как-то иначе. И это - проблема.
мой косяк. ошибся в расчетах итераций цикла. последние 3 строчки во вставке не нужно было писать.
Yandex
Объявления
11.04.2014, 22:16     Обнулить элементы вектора через __asm
Ответ Создать тему
Опции темы

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