Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/39: Рейтинг темы: голосов - 39, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 9

asm вставка в C++ часть 2

25.11.2010, 22:15. Показов 7683. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код. за его написание отдельное спасибо Kastaneda)

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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int slozh(int* pi1, int si1);
 
int main()
{int massiv[]={1,3,8,16,6,7,11,4,6};
int abc=sizeof(massiv)/4;
abc=slozh (massiv,abc/3);
 
cout<<abc<<endl;
cin.peek();
return 0;}
int slozh(int* pi1, int abc)
{
_asm{
   mov ebx,pi1
   mov ecx,abc
   xor eax,eax
L: add eax,[ebx]
   add ebx,12
   loop L
    }
}
нужно чтобы ассемблерная вставка не только сумировала каждый третий элемент массива
но перед этим в каждом из этих элементов устанавливала 4-й бит в 0 а 5-й бит в единицу
с помощью команд and и or
маски для установки Efh и 20h соответственно
помогите плиз
заранее спасибо)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2010, 22:15
Ответы с готовыми решениями:

asm вставка в C++
#include &lt;iostream&gt; int a = 10; void func( int&amp; aIn ) { __asm { mov aIn, 15 } }

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

asm вставка в C++
есть код #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; slozh(int* pi1, int...

7
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
26.11.2010, 01:16
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int slozh(int* pi1, int si1);
 
int main()
{int massiv[]={1,3,8,16,6,7,11,4,6};
int abc=sizeof(massiv)/4; int res;    //res - результат
res=slozh(massiv,abc/3);
 
cout << res << endl;
system("pause");
return 0;}
int slozh(int* pi1, int abc)
{
   int r;
_asm{
   mov ebx,pi1
   mov ecx,abc   //ecx - счётчик цикла
   xor eax,eax    //eax - сумма
   xor edx,edx   //edx - для операций and or
L: 
   mov edx,[ebx]
   and edx,11110111b
   or edx,00010000b
   add eax,edx
   add ebx,12
   loop L
   mov r,eax
    }
  return r;
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.11.2010, 08:11
+c+, 00010000b и 11110111b это не Efh и 20h.
И вот этого:
Assembler
1
2
3
4
5
int r;
..............
mov r,eax
............   
return r;
не надо. Достаточно в прототипе ф-ции указать, что она возвращает int, а в АСМ вставке просто результат оставить в EAX. По соглашеню stdcall (которое принято в C/C++) ф-ция возвращает результат в аккамуляторе, поэтому этих строк писать не надо. Посмотрите на мою АСМ вставку в посте ТС, там все работает как надо.
1
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
26.11.2010, 14:51
Рад поправке! Благодарю! Да, действительно, 00010000b и 11110111b здесь просто надо сделать << 1.
Просто почему-то считал с единицы, а не с нуля!
А подскажите плиз, у меня почему-то с этой строчкой неработает: using namespace std; я просто без неё делал тот код, а с ней выводит ошибку, что нужен возвращаемый обьект! У меня Visual C++ 6.0. В других кодах та строчка работает!

Добавлено через 3 часа 3 минуты
Подскажите плиз, почему в Visual C++ надо перед cout ставить std::cout, а допустим в dev-c++ не надо ставить! Я просто ещё не дочитал до этого! самоучка! но есть желание узнать! Хоть в двух словах
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.11.2010, 16:33
Цитата Сообщение от +c+ Посмотреть сообщение
А подскажите плиз, у меня почему-то с этой строчкой неработает: using namespace std; я просто без неё делал тот код, а с ней выводит ошибку, что нужен возвращаемый обьект! У меня Visual C++ 6.0. В других кодах та строчка работает!
using namespace std == использовать пространство имен std. Эта строка в принципе подобных ошибок вызывать не может, а вот отсутствие ее (без явного указания пространства имен, например std::cout) или присутствие на старых компиляторах (выпущенных до принятия стандарта с пространством имен) максимум приводит к ошибкам при компиляции.

Подскажите плиз, почему в Visual C++ надо перед cout ставить std::cout, а допустим в dev-c++ не надо ставить!
Как писалось выше можно просто написать using namespace std;, а можно явно указывать (std::cout; std::cin и т.д.), можно еще писать using std::cout и далее в коде писать просто cout. Лично у меня dev-c++ просит указывать пространство имен, если у вас это приводит к ошибке, значит у вас очень старая версия DEV_C++ (хотя я не уверен, что такая версия есть, но другого объяснения я не вижу)

П.С. Почитайте про "пространство имен". Эта тема должна быть в каждой книге по С++.
1
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
18.12.2010, 20:25
Что отладчик Visual C++ 6.0 от меня хочет? Тоесть без этой строки - using namespace std; не хочет выводить на экран cout!
C++
1
2
3
4
5
6
7
8
9
10
11
using namespace std;
 
int main()
{
    vector<int> i;
    i.push_back(3);
    std::cout << i[0] << endl;
 
    system("pause");
        return 0;
}
Тоесть я понял, что using namespace std; делает пространство имён std по умолчанию!
Если убрать std из строчки std::cout << i[0] << endl; то выдаёт ошибку! А ведь std уже назначено по умолчанию! в строчке using namespace std;
Или у вектора своё пространство имён? не std

И ещё: правильно? я вывожу на экран вектор i - std::cout << i[0] << endl;
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.12.2010, 20:26
C++
1
std::cout << i[0] << std::endl;
0
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
19.12.2010, 01:23
У меня и без std::endl показывает почему-то!
Тоесть std::cout << i[0] << endl; нормально показывает!

Так зачем вообще писать std перед cout ? std ведь уже назначено по умолчанию!

Добавлено через 4 часа 51 минуту
Извиняюсь конечно, что не в своей теме, но может всё-таки пару слов по вопросу?
И желательно своими словами, а не цитатами из книг. Нормальными программистскими семантиками!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2010, 01:23
Помогаю со студенческими работами здесь

Asm вставка и возвращаемое системе значение
Здравствуйте. Почему эта программа #include &lt;iostream&gt; using std::cout; using std::cin; int main() { int z = 0; _asm { ...

Asm вставка в С++ возвести число в степень
Возвести число А в степень n (на Assemblerе в С++)

Вставка asm, адрес члена локального объекта
TLongInteger &amp; TLongInteger:: operator + (const TLongInteger &amp;Additional) { TLongInteger Result; asm { } return...

Вставка переменной(хранящей часть пути) в путь до файла...
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main(int argc, char* argv) { TCHAR path; ...

GCC как часть библиотек линковать статически, а часть динамически?
Просто пока лень Qt пересобирать, чтобы возыметь статик-либы. Нужно Qt линковать динамически, а boost, gmp, ... статически. Возможно ли...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru