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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 92, средняя оценка - 4.97
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
#1

Вставка на ассемблере - C++

10.03.2011, 22:00. Просмотров 13011. Ответов 11
Метки нет (Все метки)

Добрый вечер.

Код пишу в CodeBlocks&MinGW, есть и студия.

вопрос:
нужны ли какие-нибудь инклюды чтоб осуществить вставку на ассемблере?.

и вообще. дайте пример простой с вставкой на ассемблере (ОТ и ДО).

компиль ругается: error expected ';' before '{' token
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2011, 22:00     Вставка на ассемблере
Посмотрите здесь:

вставка кода на ассемблере - C++
РЕБЯЯЯЯЯЯТ:(Может кто-нибудь помочь?:( Необходимо,написать программу на с++ с вставкой кода на ассемблере.. в одномерном массиве,...

массивы на ассемблере - C++
всем привет,помогите составить такую программу на ассемблере: в одномерном массиве,состоящем из n эл-ов,вычислить: минимальный по...

Вывод на ассемблере - C++
Хочу посмотреть как код выглядит на ассемблере. Загрузила в Olly debug но простая функция с одним return очень большая. Или это связано с...

Внешняя процедура на ассемблере - C++
Доброй ночи! Не хочет собираться C++ (в Dev-C++) и внешняя процедура ассемблера (компилируется в отдельном файле, т.е. имею _pSr.obj)....

Возведение в степень в ассемблере - C++
Доброго времени суток, подскажите пожалуйста как возвести в степень eps ^ 3 * x ???

Связь С++ с программой на ассемблере - C++
Помогите пожалуйста! Не удается создать связь Borland C++ v5.02 с программой на ассемблере через стек. при удалении строк с вызовом...

Сортировка вставками на встроенном в С++ Ассемблере - C++
Здравствуйте, очень долго не могу разобраться с программой, вроде сортировку правильно написал, но проблема в присвоении, например,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
10.03.2011, 23:30     Вставка на ассемблере #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я пользуюсь студией, так что пример под нее, если что(__asm ключевое слово). Ничего подключать специально, чтобы сделать ассемблерную вставку, не нужно, просто оформляете asm-код в __asm { } и __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
#include <iostream>
 
int main()
    {
    // измерения для времени(тиков процессора)
    long long t1,t2;
 
    __asm{
        CPUID // страхуемся от "out-of-order" исполнения инструкций
        RDTSC // делаем первый замер
        mov DWORD PTR[t1], eax // сохраняем 64-битный результат из EDX:EAX
        mov DWORD PTR[t1 + 4], edx // в t1
        }
 
    // что нужно тестить на время исполнения
    for(int i = 0; i < 100; ++i)
        std::cout << "hey\n";
    
    __asm{ // делаем аналогичное для второго замера
        CPUID
        RDTSC
        mov DWORD PTR[t2], eax
        mov DWORD PTR[t2 + 4], edx
        }
    // количество тиков процессора, сделанное за время выполнения теста
    long long delta_t = t2 - t1;
    std::cout << delta_t;
    }
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.03.2011, 00:13  [ТС]     Вставка на ассемблере #3
Ma3a, спасибо, ваш код в студии заработал. но вот напрашивается еще 1 вопрос.

я помимо с++ изучаю ассемблер и вот пример простой программы банальной Хелоу ворлд:

Assembler
1
2
3
4
5
6
7
8
9
10
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello world$'
CSEG ends
end Begin

компиль ужасно ругается(студия). п.с книга Олег Калашников - Ассемблер. Учимся программировать.
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
11.03.2011, 00:27     Вставка на ассемблере #4
Ну во-первых , эта программа расчитана на работу в реальном 16битном режиме, а у нас в windows работа идет в 32- 64- битном защищенном. Во-вторых, определенные директивы ассемблерная вставка просто не сможет переварить, то как например
Assembler
1
2
3
CSEG segment
...
CSEG ends
или
Assembler
1
org 100h
ибо, например, указывать смещение относительно сегмента для выполнения инструкций по меньшей мере лишено смысла во вставке, ибо вставки объявляются в функциях, ну а код вида
Assembler
1
2
3
4
5
6
7
some_func PROC
...
CSEG segment
...
CSEG ends
...
some_func ENDP
С точки зрения ассемблера тоже некорректен, ибо задать сегмент внутри функции никак не представляется возможным, а при вставке будет сгенерирован код именно такого вида, как я указал выше. Объявление данных во вставках тоже невозможно.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:27     Вставка на ассемблере #5
instagib, такое было во времена дос
если хотите такого асма - используйте старые компиляторы (Turbo C, TASM)
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.03.2011, 00:41  [ТС]     Вставка на ассемблере #6
alex_x_x,
Ma3a, исчерпывающий ответ спасибо.

подскажите тогда, литературу по которой я мог нормально учиться и практиковаться под виндовс.
компиль я уже нашел(flat assembler 1.69). Спасибо большое заранее

а книга то сцуко 2006 года.. под DOS оказывается. эх..
__________________________________________________
и еще.. какой код бы добавить чтоб программа не закрывалась сразу после выполнение..п.с. аналог getch();
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:46     Вставка на ассемблере #7
Юров Ассемблер, неплохая во всех отношения, по windows там в том числе есть
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
11.03.2011, 00:46     Вставка на ассемблере #8
Насчет книг подсказать не смогу, но как крайне полезный ресурс отмечу http://www.wasm.ru/ . Там можно найти абсолютно весь интересующий материал по тому, что вам будет нужно для win32 assembly и даже больше, есть много хороших статей написанных на доступном языке, самое оно для начала изучения.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:48     Вставка на ассемблере #9
хотя если хотите учится асму, думаю лучше начинать с доса, там все проще и с практической точки зрения не очень много поменялось
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.03.2011, 00:48  [ТС]     Вставка на ассемблере #10
alex_x_x, а вы как начинали? с доса?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 01:05     Вставка на ассемблере #11
с него родимого
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2012, 09:02     Вставка на ассемблере
Еще ссылки по теме:

Вызов функций на Ассемблере в программе на С++ - C++
Помогите,пожалуйста. Нужно написать программу, состоящую из ассемблерной функции в одном файле и вызове её в главном файле на С++. ...

Обращение к 32-разрядным числам в Ассемблере - C++
Пож-ста,помогите,как объявлять 32-разр. числа в асм и оперировать с ними с помощью регистров?

Как правильно вставить код на ассемблере? - C++
Есть такой код: struct { unsigned long first_sect; unsigned nsect; void *buf; } cb; /** * getboot

Как подключить свою библиотеку, написанную на ассемблере? - C++
Здравствуйте! Новичок я в с++, подскажите пожалуйста что нужна написать чтобы подключить свою библиотеку и вызвать от туда...

Подскажите что не так я делаю (решить систему на встроенном ассемблере) - C++
Помогите пожалуйста решить систему на встроенном ассемблере. В чем мои ошибки? Сильно не судите, только начинаю писать... ...


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

Или воспользуйтесь поиском по форуму:
Troll_Face
600 / 400 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
08.06.2012, 09:02     Вставка на ассемблере #12
хоть больше года прошло, но всеже:
Ma3a, дева не берет Ваш код, только по одной строке асма тянет, не заете в чем причина? мож настроить чо надо?
Yandex
Объявления
08.06.2012, 09:02     Вставка на ассемблере
Ответ Создать тему
Опции темы

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