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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Jettard
40 / 38 / 5
Регистрация: 27.05.2010
Сообщений: 253
#1

Inline Assembler & C++ - C++

31.12.2011, 17:39. Просмотров 1896. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char *argv[])
{
    perevod();
    cout<<"Type Esc to Escape \n";
     __asm
     {
           mov ah,01h
           int 21h
 
           cmp ax,01
 
 
     }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
компилер пишет
HTML5
1
2
3
4
5
6
7
/home/jet/MyProjects/Perevod/main.cpp|46|error: invalid suffix "h" on integer constant|
/home/jet/MyProjects/Perevod/main.cpp|47|error: invalid suffix "h" on integer constant|
/home/jet/MyProjects/Perevod/main.cpp||In function ‘int main(int, char**)’:|
/home/jet/MyProjects/Perevod/main.cpp|45|error: expected ‘(’ before ‘{’ token|
/home/jet/MyProjects/Perevod/main.cpp|46|error: ‘mov’ was not declared in this scope|
/home/jet/MyProjects/Perevod/main.cpp|46|error: expected ‘;’ before ‘ah’|
||=== Build finished: 5 errors, 0 warnings ===|
Делаю на линуксе. На винде тоже самое. В чем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2011, 17:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Inline Assembler & C++ (C++):

fastcall & inline - C++
Здравствуйте, я бы хотел спросить когда нужно использовать эти комманды. Когда использовать inline я примерно знаю: когда функция...

C++&Assembler. - C++
Здравствуйте уважаемые форумчани! Было задание, написать простейшую программу которая бы считала пример(с дробями) в С++ и в Ассемблере,...

Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline? - C++
Здравствуйте. Знаю теорию, но не понимаю, на сколько должна быть маленькая функция, чтоб она подошла под inline ? Как...

inline функции vs инструкции inline функций - C++
Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные, то их лучше делать inline функциями, т....

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

6
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.12.2011, 17:46 #2
смотри здесь
A.3.1. Ассемблерные вставки и низкоуровневое программирование
1
Jettard
40 / 38 / 5
Регистрация: 27.05.2010
Сообщений: 253
31.12.2011, 18:05  [ТС] #3
Неплохо. Упростил, чтобы понять как работает:
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    perevod();
    cout<<"Type Esc to Escape \n";
     asm("movl ah,01");
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
А теперь компилер пишет
HTML5
1
/home/jet/MyProjects/Perevod/main.cpp|44|Error: too many memory references for `mov'|
ВТФ

Добавлено через 6 минут
Все сделал. пашет. И это через невнимательность Вот так должно быть
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    perevod();
    cout<<"Type Esc to Escape \n";
     asm("movl $01,%eax");
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Это все через другие стандарты ...
0
Evg
Эксперт CАвтор FAQ
17943 / 6174 / 411
Регистрация: 30.03.2009
Сообщений: 16,946
Записей в блоге: 27
31.12.2011, 18:24 #4
Jettard, исходник из первого твоего сообщения использует ассемблерные вставки в том виде, в котором его понимают "традиционно" виндузовые компиляторы от микрософта или борланда. А пример из поста #3 - это формат вставки компилятора gcc/g++
0
Jettard
40 / 38 / 5
Регистрация: 27.05.2010
Сообщений: 253
31.12.2011, 21:13  [ТС] #5
Цитата Сообщение от Evg Посмотреть сообщение
Jettard, исходник из первого твоего сообщения использует ассемблерные вставки в том виде, в котором его понимают "традиционно" виндузовые компиляторы от микрософта или борланда. А пример из поста #3 - это формат вставки компилятора gcc/g++
та да традиционный эт Intelовский стандарт синтаксиса, а в посте №3 стандарт AT&T, который в *nixах
0
Evg
Эксперт CАвтор FAQ
17943 / 6174 / 411
Регистрация: 30.03.2009
Сообщений: 16,946
Записей в блоге: 27
01.01.2012, 12:42 #6
Я говорю не столько о синтаксисе ассемблерных инструкций, сколько о формате самой вставки (по части передачи аргументов и доставания результатов). А синтаксис - это мелочь. Поставить другой ассемблер (или научить текущий ассемблер понимать нужный синтаксис) и всё

Добавлено через 15 часов 24 минуты
Чтобы мысль не потерялась, продублирую здесь вопрос и ответ, заданный в личку:

Вопрос:
Неужели можно сделать чтобы Линукс понимал такой же АСМ, как и винда?

Ответ:
Нет "виндузового ассемблера" и "линуксового ассемблера". Процессор один и тот же, а потому исполняет одни и те же инструкции. А какими буквами их записать - это уже дело десятое и рулится синтаксисом языка ассемблера. Понятно, что в ассемблерных программах есть ещё и куча псевдоопераций (настройка секций, настройка модели памяти и т.п.), которые зависят от операционной системы, но здесь речь идёт об ассемблерной вставке, которая никаких псевдоопераций не соджержит. Далее эта вставка просто попадает на вход программе-ассемблеру, котрую никто не мешает сделать так, чтобы она понимала какой угодно синтаксис
1
LosAngeles
Заблокирован
01.01.2012, 20:26 #7
Цитата Сообщение от Jettard Посмотреть сообщение
int 21h
доступно только в реальном режиме процессора или virtual 8086 mode с IVT, линукс и виндус работают в protected или long режимах с IDT... Нужно пользоваться системными вызовами через sysenter
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2012, 20:26
Привет! Вот еще темы с ответами:

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& - C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Порядок вычисления: операторы «|» и «||», «&» и «&&» - C++
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга порядком вычеслений, а в C++ так же как и в Java или...

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
01.01.2012, 20:26
Ответ Создать тему
Опции темы

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