122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
1

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

10.03.2011, 22:00. Показов 26456. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер.

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

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

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

компиль ругается: error expected ';' before '{' token
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2011, 22:00
Ответы с готовыми решениями:

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

help; вставка на ассемблере в код паскаля
Плохо еще разбираюсь с низкоуровневым программированием, поэтому не очень то и получается,...

Вставка на ассемблере m. visual studio
Посоветуйте, пожалуйста, какую-нибуть литературу по этой теме. Ток полегче и потоньше) Заранее...

Копирование\вставка текста в\из буфер обмена DOS??? (На Ассемблере)
Прошу помощи!!! Вопрос таков: нужно поместить текстовую строку в буфер обмена DOS, а затем извлечь...

12
Эксперт С++
623 / 467 / 57
Регистрация: 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;
    }
5
122 / 85 / 16
Регистрация: 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

компиль ужасно ругается(студия). п.с книга Олег Калашников - Ассемблер. Учимся программировать.
0
Эксперт С++
623 / 467 / 57
Регистрация: 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
С точки зрения ассемблера тоже некорректен, ибо задать сегмент внутри функции никак не представляется возможным, а при вставке будет сгенерирован код именно такого вида, как я указал выше. Объявление данных во вставках тоже невозможно.
1
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:27 5
instagib, такое было во времена дос
если хотите такого асма - используйте старые компиляторы (Turbo C, TASM)
1
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
11.03.2011, 00:41  [ТС] 6
alex_x_x,
Ma3a, исчерпывающий ответ спасибо.

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

а книга то сцуко 2006 года.. под DOS оказывается. эх..
__________________________________________________
и еще.. какой код бы добавить чтоб программа не закрывалась сразу после выполнение..п.с. аналог getch();
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:46 7
Юров Ассемблер, неплохая во всех отношения, по windows там в том числе есть
1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
11.03.2011, 00:46 8
Насчет книг подсказать не смогу, но как крайне полезный ресурс отмечу http://www.wasm.ru/ . Там можно найти абсолютно весь интересующий материал по тому, что вам будет нужно для win32 assembly и даже больше, есть много хороших статей написанных на доступном языке, самое оно для начала изучения.
1
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 00:48 9
хотя если хотите учится асму, думаю лучше начинать с доса, там все проще и с практической точки зрения не очень много поменялось
2
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
11.03.2011, 00:48  [ТС] 10
alex_x_x, а вы как начинали? с доса?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 01:05 11
с него родимого
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
08.06.2012, 09:02 12
хоть больше года прошло, но всеже:
Ma3a, дева не берет Ваш код, только по одной строке асма тянет, не заете в чем причина? мож настроить чо надо?
0
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
06.06.2018, 17:53 13
Почему выдало 86 MHZ если у меня 3.6 GHz ,,,??
0
06.06.2018, 17:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2018, 17:53
Помогаю со студенческими работами здесь

Перевести код С++ в код на Ассемблере (Ассемблерная вставка для С++)
Приветствую знатоков! Трудоемко ли перевести код функции Func под ассемблерную вставку (в Visual...

Изменение почтового шаблона, вставка графики в письмо (типа логотипа) + вставка картинки в шаблоне
Здравствуйте) Возникло 2 вопроса. 1)Хочется сделать красивый почтовый шаблон с использованием...

Autocad 2013. При повторном открытии /dwg не отображаются файлы /pdf, вставка производилась "вставка .pdf"
Приветствую! Работа производилась в autocad 2013. При повторном открытии /dwg не отображаются...

lg(x) на ассемблере
Здравствуйте. Подскажите пожалуйста как реализовать функцию десятичного логарифма на ассемблере....


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

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

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