0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 81
1

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

20.11.2019, 18:22. Показов 2618. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2019, 18:22
Ответы с готовыми решениями:

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

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

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

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

14
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
20.11.2019, 19:13 2
Цитата Сообщение от Igor912 Посмотреть сообщение
Нужно сделать ассемблерные вставки(вставку), если такое возможно
Зачем?
0
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 19:30 3
внесу некоторую ясность:
1) ассемблер - не язык, это программа, транслирующая коды команд языка ассемблера в машинный код;
2) чего именно вы хотите достичь: произвести критическую оптимизацию определённого фрагмента кода или же получить низкоуровневый доступ, например, к регистрам или сегментам памяти?
3) встроенный диалект ассемблера, как и синтаксис ассемблерных вставок, зависит от компилятора, поэтому, будьте добры, укажите используемый вами компилятор.
0
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 81
20.11.2019, 19:47  [ТС] 4
Компилятор MinGW. А насчет цели, как я уже написал подойдет любая ассемблерная вставка, не важно какое будет у нее назначение.
0
Mightsoul
20.11.2019, 19:48
  #5

Не по теме:

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

0
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 81
20.11.2019, 19:48  [ТС] 6
я делаю этот код для учебной практики, и одно из заданий обязательно присутствие ассемблерных вставок.
0
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 20:02 7
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
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
20.11.2019, 20:14 8
Цитата Сообщение от Mightsoul Посмотреть сообщение
а интегрированная среда разработки
Чего?
Цитата Сообщение от Mightsoul Посмотреть сообщение
компилятор которой - gcc.
gcc не работает под виндавсом.
mingw - это порт gcc под windows.
1
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
20.11.2019, 20:20 9
это не отменяет того, что mingw - не компилятор.
0
76 / 60 / 16
Регистрация: 11.11.2019
Сообщений: 279
Записей в блоге: 1
20.11.2019, 20:32 10
Цитата Сообщение от Mightsoul Посмотреть сообщение
внесу некоторую ясность:
1) ассемблер - не язык, это программа, транслирующая коды команд языка ассемблера в машинный код;
Без обид, но данная фраза очень похожа на известное высказывание: "могут не только лишь все."

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

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

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

Добавлено через 6 минут
всё с тобой понятно.
Мы начинаем знакомиться с языком ассемблера. Это язык программирования
низкого уровня, то есть максимально приближенный к «железу» — аппаратному обеспечению компьютера. Для каждого процессора характерен свой
уникальный набор действий, которые процессор способен выполнить, поэтому
языки ассемблера разных процессоров отличаются друг от друга. Например,
если процессор не умеет выполнять умножение, то в его языке ассемблера н
будет отдельной команды «умножить», а перемножать числа программисту
придется при помощи нескольких команд сложения.
Собственно говоря, язык ассемблера — это всего лишь ориентированная н
человека форма записи инструкций процессора (которые называются такж
машинным языком), а сам ассемблер — это программа, переводящая симво
лические имена команд в машинные коды.
Отрывок из книги "Ассемблер на примерах Rudolf Marek"
0
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
20.11.2019, 21:37 12
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Без обид, но данная фраза очень похожа на известное высказывание
ГОСТ 19781-90
Ассемблер - Программа или техническое средство, выполняющие ассемблирование

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

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

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

Не по теме:

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


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

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

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

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2019, 00:53
Помогаю со студенческими работами здесь

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

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

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

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

Ассемблерные вставки (Часть 3)
На 4 шаге ошибка -nan(ind). Не могу разобраться... #include&lt;iostream&gt; using namespace std; int...

Как делаются ассемблерные вставки?
Я слышал, что в С++ можно вставлять вставки на асм, как это делается? Спасибо.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru