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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
#1

Небольшая ассемблеровская вставка - C++

11.03.2012, 18:53. Просмотров 1451. Ответов 8
Метки нет (Все метки)

Доброго вечера.
Данный код создает одномерный массив.
C++
1
2
3
4
5
6
7
8
9
int main() {
    int n=4;
    int *a = new int [n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
 
    return 0;
}
Требуется написать вставку на ассемблере , которая изменяет массив по следующему условию:

1. Если элемент массива больше 10 , то уменьшаем на единицу.
2. Если элемент массива больше 10 , то увеличиваем на единицу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Небольшая ассемблеровская вставка (C++):

Ассемблеровская вставка, указатель & - C++
Всем привет. Возник вопрос. Чем в ассемблеровской вставке заменить сишный оператор &amp;? В контексте __asm &amp; cчитается оператором AND. ...

небольшая функция на c++ - C++
Необходимо создать функцию,которая меняет элементы массива по логике первый с последним,второй с предпоследним и т.д. начиная с середины...

Небольшая праблемка - C++
Здравствуйте. Есть такая задача: Дана матрица N строк, М столбцов. Вычислить сумму элементов каждой строки до первого отрицательного. ...

Небольшая проблемка) - C++
Всем доброго времени суток, у меня возникла проблема с напиванием одной программы задание следующее :&quot;Написать функцию нахождения MAX среди...

Небольшая задачка - C++
Доброго времени суток. Я не знал в каком разделе создавать эту тему, так что пишу сюда. Есть небольшая проблема не получается решить...

Небольшая сложность - C++
Я создал проект, сохранил, попытался открыть, но на месте отладки появилось &quot;присоединить&quot;, при нажатии которого выдаёт окошко с кучей...

8
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
11.03.2012, 18:57 #2
scofielcl, если условие верное, то ассемблер не нужен. И с++ тоже. Т.к. при уменьшении и потом увеличении одного и того же числа на одинаковое значение, ничего не меняется.
0
Kastaneda
Форумчанин
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,317
Записей в блоге: 2
Завершенные тесты: 1
11.03.2012, 19:16 #3
Цитата Сообщение от scofielcl Посмотреть сообщение
1. Если элемент массива больше 10 , то уменьшаем на единицу.
2. Если элемент массива больше 10 , то увеличиваем на единицу.
Да, похоже описался.
Сделал так - если больше 10 - увеличивает на 1, если меньше 10 - уменьшает на 1, если равно 10, то ни чего не делает.
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
#include <iostream>
 
int main() {
    int n=4;
    int *a = new int [n];
    for(int i = 0; i < n; i++) {
        std::cin>>a[i];
    }
 
    const size_t int_size = sizeof(int);
 
    _asm {
        pusha
        mov eax, a
        mov ecx, n
L0:
        cmp dword ptr [eax], 0xA
        ja L1
        jb L2
        jmp end_loop
L1:
        inc dword ptr [eax]
        jmp end_loop
L2:
        dec dword ptr [eax]
end_loop:
        add eax, int_size
        loop L0
        popa
    }
 
    for(int i = 0; i < n; i++) {
        std::cout << a[i] << " ";
    }
    std::cout << std::endl;
 
    return 0;
}
2
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,819
11.03.2012, 19:17 #4
Цитата Сообщение от gooseim Посмотреть сообщение
если условие верное
Условие, как в некогда популярном кинофильме: "... Одна живёт на Киевской, а другая на Киевской..."

scofielcl, определитесь, когда элементы должны увеличиваться, когда уменьшаться...
0
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.03.2012, 19:56  [ТС] #5
main.cpp:13: error: ‘_asm’ was not declared in this scope
main.cpp:13: error: expected ‘;’ before ‘{’ token

Хотя в диалоговом окне код не подчеркивается.

Следует как то "объявить" вставку ?
Или следует подключать некоторый плагин?

Среда NetBeans

Добавлено через 13 минут
Следует подключить некоторый плагин .
Netbeans/7.1/ubuntu-10.
На официальном сайте , найти не получается.
0
retmas
Жарю без масла
863 / 745 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
11.03.2012, 20:02 #6
Netbeans использует gcc
используй AT&T синтаксис для ассемблерных вставок + синтаксис gcc асм вставок
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.03.2012, 20:23  [ТС] #7
Следовательно синтаксис изменится.
К примеру.
C++
1
2
3
4
5
6
        mov eax, a
        mov ecx, n
заменим на
  
        mov %a , %eax
        mov %n , %ecx
Благодарю за подсказки.
0
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
29.03.2012, 18:02  [ТС] #8
Доброго вечера.
AT&T-ассемблера (gas)/NetBeans.
При компилировании появляется следующая ошибка :
C++
1
main.cpp:33: error: expected string-literal before ‘movl’
Сам код:
Assembler
1
2
33:  movl  $3 , %ecx 
34:  l0:
0
Kastaneda
Форумчанин
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,317
Записей в блоге: 2
Завершенные тесты: 1
29.03.2012, 18:13 #9
Там асм вставки должны быть оформлены в ковычках, примерно так
Assembler
1
2
"movl $3, %ecx\n
l0:\n"
Добавлено через 46 секунд

Не по теме:

по моему зря внешний вид кода сменили, хуже стало.

0
29.03.2012, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 18:13
Привет! Вот еще темы с ответами:

Небольшая помощь - C++
Ктото может написать небольшой модуль которий будет считивать какуюта інформацию с файла *тхт каждих 2 сек ?? спс

Небольшая мелочь по теории - C++
&quot;Какой максимальной длины может быть внешнее имя в программе на С++ в Вашей системе?&quot; - с локальными именами понятно-С++ не накладывает...

Небольшая программа на матрицу - C++
Небольшую прогу задали на практике яеё никак невдуплю! вот условие В представленной матрицы 3 на 5 получить матрицу 3 на 3 исключением...

Небольшая ошибка в программе - C++
Я полный новичок в c++, написал программу, которая проверяет, какое число больше, первое, или второе. #include &lt;iostream&gt; using...


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

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

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