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

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

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

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

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

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

компиль ругается: error expected ';' before '{' token
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 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
Сообщений: 341
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++
612 / 456 / 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
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 00:27     Вставка на ассемблере #5
instagib, такое было во времена дос
если хотите такого асма - используйте старые компиляторы (Turbo C, TASM)
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
11.03.2011, 00:41  [ТС]     Вставка на ассемблере #6
alex_x_x,
Ma3a, исчерпывающий ответ спасибо.

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

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

C++ Сортировка вставками на встроенном в С++ Ассемблере
C++ массивы на ассемблере
C++ вставка кода на ассемблере

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

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

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