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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.03.2012, 18:53     Небольшая ассемблеровская вставка #1
Доброго вечера.
Данный код создает одномерный массив.
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 , то увеличиваем на единицу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 18:53     Небольшая ассемблеровская вставка
Посмотрите здесь:

C++ Небольшая помощь
небольшая функция на c++ C++
Небольшая праблемка C++
C++ Небольшая проблемка)
C++ Ассемблеровская вставка, указатель &
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
11.03.2012, 18:57     Небольшая ассемблеровская вставка #2
scofielcl, если условие верное, то ассемблер не нужен. И с++ тоже. Т.к. при уменьшении и потом увеличении одного и того же числа на одинаковое значение, ничего не меняется.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.03.2012, 19:17     Небольшая ассемблеровская вставка #4
Цитата Сообщение от gooseim Посмотреть сообщение
если условие верное
Условие, как в некогда популярном кинофильме: "... Одна живёт на Киевской, а другая на Киевской..."

scofielcl, определитесь, когда элементы должны увеличиваться, когда уменьшаться...
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
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.
На официальном сайте , найти не получается.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
11.03.2012, 20:02     Небольшая ассемблеровская вставка #6
Netbeans использует gcc
используй AT&T синтаксис для ассемблерных вставок + синтаксис gcc асм вставок
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
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
Благодарю за подсказки.
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
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:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 18:13     Небольшая ассемблеровская вставка
Еще ссылки по теме:

C++ Небольшая задачка
C++ Небольшая сложность

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.03.2012, 18:13     Небольшая ассемблеровская вставка #9
Там асм вставки должны быть оформлены в ковычках, примерно так
Assembler
1
2
"movl $3, %ecx\n
l0:\n"
Добавлено через 46 секунд

Не по теме:

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

Yandex
Объявления
29.03.2012, 18:13     Небольшая ассемблеровская вставка
Ответ Создать тему
Опции темы

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