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

Сделать ассемблерные вставки

20.11.2019, 18:22. Показов 4888. Ответов 14
Метки 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
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <iostream>
#include <windows.h>
#include <ctime>
#include <math.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
//Статистика за years = 30;
void Ages(float *var, int a, int b, int c, vector<float> &vec)
{
    for (int i = 0; i < *var; i++)
    {
        float perem = (float)(rand()) / RAND_MAX * (a - b) + c;
        float a = round(perem);
        vec.push_back(a);
    }
}
void Borning(float *var, float *var1, float *var2, float *var3, vector<float> &vec, float *var4, float *var5)
{
    float a = ((*var + *var1) / 100) * 2;
    float perem = round((float)(rand()) / RAND_MAX * (a - 2) + 2);  //0 - 2%
    for (int j = 0; j < perem; j++)
    {
        if (*var2 < *var3)
            break;
        vec.push_back(0);
        *var3 += 1;
        *var4 += 1;
        *var5 += 1;
    }
}
void Mortality(float *var, vector<float> &vec, float *var1, float *var2)
{
    float perem = round((float)(rand()) / RAND_MAX * (*var / 100) - 0); //0 - 1%
    for (int k = 0; k < perem; k++)
    {
        vec.erase(vec.begin() + 0);
        *var -= 1;
        *var1 -= 1;
        *var2 += 1;
    }
}
void One_year_older(vector<float> &vec)
{
    for (unsigned int i = 0; i < vec.size(); i++)
    {
        vec[i] += 1;
    }
}
void Transition(vector<float> &vec, float *var, vector<float> &vec1, float *var1, int n, const float m)
{
    vec.erase(vec.begin() + n);
    *var -= 1;
    vec1.push_back(m);
    *var1 += 1;
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int daysInYear = 365, years = 30, a = 0;
    float allPapuasi = 1000;    //Текущее кол-во Папуасов
    float babiesP = 100;        //Неработающие
    float workingBabiesP = 100; //Работающие
    float notHuntingP = 300;    //Неработающие
    float huntingP = 300;       //Работающие
    float oldP = 100;           //Неботающие
    float workingOldP = 100;    //Работающие
    float deaths = 0;           //Смертность
    float borned = 0;           //Рождаемость
    float allFood = 1000;       //Количество добываемой еды
    float perem = 0;
    vector<float> vectorBabiesP, vectorWorkingBabiesP, vectorNotHuntingP, vectorHuntingP, vectorOldP, vectorWorkingOldP;
    srand((unsigned int)time(NULL));
    Ages(&babiesP, 7, 0, 0, vectorBabiesP);
    Ages(&workingBabiesP, 16, 8, 8, vectorWorkingBabiesP);
    Ages(&notHuntingP, 40, 17, 17, vectorNotHuntingP);
    Ages(&huntingP, 40, 17, 17, vectorHuntingP);
    Ages(&oldP, 65, 41, 41, vectorOldP);
    Ages(&workingOldP, 65, 41, 41, vectorWorkingOldP);
    for (int i = 0; i < years; i++)
    {
        for (int j = 0; j < daysInYear; j++)
        {
            allFood = (workingBabiesP * 2.5f + huntingP * 7.5f + workingOldP * 4.0f) - allPapuasi;  //Добыча еды в день
            if (j % 120 == 0 && j != 0)
            {
                //Рождаемость
                Borning(&notHuntingP, &huntingP, &allFood, &allPapuasi, vectorBabiesP, &babiesP, &borned);
                //Смертность
                Mortality(&babiesP, vectorBabiesP, &allPapuasi, &deaths);
                Mortality(&workingBabiesP, vectorWorkingBabiesP, &allPapuasi, &deaths);
                Mortality(&notHuntingP, vectorNotHuntingP, &allPapuasi, &deaths);
                Mortality(&huntingP, vectorHuntingP, &allPapuasi, &deaths);
                Mortality(&oldP, vectorOldP, &allPapuasi, &deaths);
                Mortality(&workingOldP, vectorWorkingOldP, &allPapuasi, &deaths);
            }   
            //Прибавление одного года жизни
            else if (j == daysInYear - 1)
            {
                if (j == daysInYear - 1)
                {
                    One_year_older(vectorBabiesP);
                    One_year_older(vectorWorkingBabiesP);
                    One_year_older(vectorNotHuntingP);
                    One_year_older(vectorHuntingP);
                    One_year_older(vectorOldP);
                    One_year_older(vectorWorkingOldP);
                }
                //Переход из одного массива в другой
                for (unsigned int n = 0; n < vectorBabiesP.size(); n++)
                {
                    if (babiesP <= 0)
                        continue;
                    else if (vectorBabiesP[n] == 8)
                        Transition(vectorBabiesP, &babiesP, vectorWorkingBabiesP, &huntingP, n, 8);
                }
                for (unsigned int n = 0; n < vectorWorkingBabiesP.size(); n++)
                {
                    if (vectorWorkingBabiesP[n] == 17)
                        a++;
                }
                for (unsigned int n = 0; n < vectorWorkingBabiesP.size(); n++)
                {
                    if (workingBabiesP <= 0)
                        continue;
                    else if (a % 2 == 0 && a != 0)
                    {
                        a /= 2;
                        for (int n = 0; n < a; n++)
                        {
                            Transition(vectorWorkingBabiesP, &workingBabiesP, vectorHuntingP, &huntingP, n, 17);
                            Transition(vectorWorkingBabiesP, &workingBabiesP, vectorNotHuntingP, &notHuntingP, n, 17);
                        }
                    }
                    else if (a % 2 == 1 && a != 0)
                    {
                        a = (a - 1) / 2;
                        for (int n = 0; n < a; n++)
                        {
                            if (n + 1 == a)
                                Transition(vectorWorkingBabiesP, &workingBabiesP, vectorHuntingP, &huntingP, n, 17);
                            Transition(vectorWorkingBabiesP, &workingBabiesP, vectorHuntingP, &huntingP, n, 17);
                            Transition(vectorWorkingBabiesP, &workingBabiesP, vectorNotHuntingP, &notHuntingP, n, 17);
                        }
                    }
                }
                a = 0;
                for (unsigned int n = 0; n < vectorNotHuntingP.size(); n++)
                {
                    if (vectorNotHuntingP[n] == 7)
                        Transition(vectorNotHuntingP, &notHuntingP, vectorOldP, &oldP, n, 41);
                }
                for (unsigned int n = 0; n < vectorHuntingP.size(); n++)
                {
                    if (vectorHuntingP[n] == 7)
                        Transition(vectorHuntingP, &huntingP, vectorWorkingOldP, &workingOldP, n, 41);
                }
            }
            //Статистика
            if (j % 180 == 0 && j != 0)
            {
                cout << "Year: " << (i + 1) << "\tDay: " << j << "\n\tFood: " << allFood <<
                    "\n\tBabies: " << babiesP + workingBabiesP <<
                    "\tAdults: " << notHuntingP + huntingP <<
                    "\tOld: " << oldP + workingOldP <<
                    "\tAll: " << allPapuasi <<
                    "\n\tDeaths: " << deaths <<
                    "\tBorned: " << borned << endl << endl;
                borned = 0;
                deaths = 0;
            }
        }
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2019, 18:22
Ответы с готовыми решениями:

Ассемблерные вставки в C++
Собственно сабж ...: Имею следующий код : short Carry = 2; unsigned short Mas; Mas = 12; Mas = 13; Mas = 14; Пытаюсь , в...

Ассемблерные вставки
Будут ли у меня проблемы, если я, поработав с регистрами, не восстановлю их после выхода из вставки? Если проблем не будет, то их не будет...

Ассемблерные вставки C++
Подскажите, пожалуйста, что здесь может быть не так? int ResetMouse() { _asm { xor ax, ax int 0x33 }

14
Неэпический
 Аватар для Croessmah
18145 / 10729 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
20.11.2019, 19:13
Цитата Сообщение от Igor912 Посмотреть сообщение
Нужно сделать ассемблерные вставки(вставку), если такое возможно
Зачем?
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 19:30
внесу некоторую ясность:
1) ассемблер - не язык, это программа, транслирующая коды команд языка ассемблера в машинный код;
2) чего именно вы хотите достичь: произвести критическую оптимизацию определённого фрагмента кода или же получить низкоуровневый доступ, например, к регистрам или сегментам памяти?
3) встроенный диалект ассемблера, как и синтаксис ассемблерных вставок, зависит от компилятора, поэтому, будьте добры, укажите используемый вами компилятор.
0
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 81
20.11.2019, 19:47  [ТС]
Компилятор MinGW. А насчет цели, как я уже написал подойдет любая ассемблерная вставка, не важно какое будет у нее назначение.
0
20.11.2019, 19:48

Не по теме:

но я более чем уверен, что причина использовать ассемблерные вставки не вкладывается в концепцию здравого смысла.

0
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 81
20.11.2019, 19:48  [ТС]
я делаю этот код для учебной практики, и одно из заданий обязательно присутствие ассемблерных вставок.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 20:02
C++
1
2
3
asm("movl $0,%0\n"
    "movl $0,%1"
    : "=m"(borned), "=m"(deaths));
вместо
C++
1
2
borned = 0;
deaths = 0;
Добавлено через 7 минут
mingw - не компилятор, а интегрированная среда разработки, компилятор которой - gcc.
0
Неэпический
 Аватар для Croessmah
18145 / 10729 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
20.11.2019, 20:14
Цитата Сообщение от Mightsoul Посмотреть сообщение
а интегрированная среда разработки
Чего?
Цитата Сообщение от Mightsoul Посмотреть сообщение
компилятор которой - gcc.
gcc не работает под виндавсом.
mingw - это порт gcc под windows.
1
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 20:20
это не отменяет того, что mingw - не компилятор.
0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
20.11.2019, 20:32
Цитата Сообщение от Mightsoul Посмотреть сообщение
внесу некоторую ясность:
1) ассемблер - не язык, это программа, транслирующая коды команд языка ассемблера в машинный код;
Без обид, но данная фраза очень похожа на известное высказывание: "могут не только лишь все."

Assembler - это язык программирования низкого уровня, то есть максимально приближенный к «железу» — аппаратному
обеспечению компьютера. Для каждого процессора характерен свой уникальный набор действий, которые процессор способен выполнить, поэтому языки ассемблера разных процессоров отличаются друг от друга.
Собственно говоря, язык ассемблера — это всего лишь ориентированная на человека форма записи инструкций процессора (которые называются также машинным языком), а сам ассемблер — это программа, переводящая символические
имена команд в машинные коды. Отрывок из книги "Ассемблер на примерах Rudolf Marek"
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 21:16
Цитата Сообщение от Dimon0401 Посмотреть сообщение
а сам ассемблер — это программа, переводящая символические
имена команд в машинные коды.
*смех*

Добавлено через 11 минут
ты понимаешь, что противоречишь самому себе, приводя подобную аргументацию? ошибки перевода, нет, не слышал?
В русском языке может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в машинный код компьютера.
удачи в постижении дивергенции между этим и этим.

Добавлено через 11 минут
Assembly code is converted into executable machine code by a utility program referred to as an assembler.
...

Добавлено через 6 минут
всё с тобой понятно.
Мы начинаем знакомиться с языком ассемблера. Это язык программирования
низкого уровня, то есть максимально приближенный к «железу» — аппаратному обеспечению компьютера. Для каждого процессора характерен свой
уникальный набор действий, которые процессор способен выполнить, поэтому
языки ассемблера разных процессоров отличаются друг от друга. Например,
если процессор не умеет выполнять умножение, то в его языке ассемблера н
будет отдельной команды «умножить», а перемножать числа программисту
придется при помощи нескольких команд сложения.
Собственно говоря, язык ассемблера — это всего лишь ориентированная н
человека форма записи инструкций процессора (которые называются такж
машинным языком), а сам ассемблер — это программа, переводящая симво
лические имена команд в машинные коды.
Отрывок из книги "Ассемблер на примерах Rudolf Marek"
0
Неэпический
 Аватар для Croessmah
18145 / 10729 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
20.11.2019, 21:37
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Без обид, но данная фраза очень похожа на известное высказывание
ГОСТ 19781-90
Ассемблер - Программа или техническое средство, выполняющие ассемблирование

Ассемблирование - Компиляция программ с языка ассемблера

Язык ассемблера - Язык программирования, который представляет собой символьную форму машинного языка с рядом возможностей, характерных для языков высокого уровня.

Примечание. Язык ассемблера обычно включает в себя макрокоманды
Добавлено через 2 минуты
Цитата Сообщение от Mightsoul Посмотреть сообщение
это не отменяет того, что mingw - не компилятор.
Это как бы вообще не программа, если уж на то пошло.
1
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 21:39
я и не писал, что это программа)
0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
20.11.2019, 21:58

Не по теме:

Mightsoul
Ты прям как моя жена, услышать услышала, а что и зачем это уже не важно. Пока сходил покурить, оказалось уже поругались :D


Я не говорил то ты не прав, просто дал чуть более развернутое пояснение в твою ясность. А книга, это первое что под руку попалось. т.к. для непросвещенного, понять почему "ассемблер - не язык, это программа, транслирующая коды команд языка ассемблера в машинный код". Лет несколько назад меня бы такая ясность, просто в ступор загнало.

Croessmah
ГОСТ 19781-90
Спасибо, пригодится!
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
21.11.2019, 00:53
ну да, лучше придумывать упрощённые неверные формулировки, чтобы потом от них отказываться.

Добавлено через 2 минуты

Не по теме:

мы вроде и не ругались, конструктивная критика, дабы не вводить в заблуждение.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2019, 00:53
Помогаю со студенческими работами здесь

ассемблерные вставки
Здраствуйте Есть функция X^2+7*X-10 / x^2 - 8*X + 12 ее нужно реализовать в виде ассемблерной вставки #include...

С++ + Ассемблерные вставки
Помогите с задачей:&quot;Нахождение и отображение смежных групп цифр в числовой последовательности&quot;. Реализовано должно быть примерно так...

Ассемблерные вставки
почему в dev-c++ не работают ассемблерные вставки? сказали написать макрос, заменяющий функцию memset, используя только их, но как бы я не...

Ассемблерные вставки пример
помогите пожалуйста решить вот условие: y1 = 8 +|x|, если x&lt;1 иначе y1 = 3, если x&gt;=1 y2 = |a|*2, если x&gt;=1 иначе ...

Ассемблерные вставки, ошибка
Ошибка: 0xC0000095: Integer overflow. Код: mov eax,x sub eax,a mov ebx,x sub ebx,c div ebx - здесь ошибка mov f,ebx


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru