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

Коды Assembler в C/C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
05.12.2013, 01:43     Коды Assembler в C/C++ #1
Здравствуйте!
Я столкнулся с проблемой при использовании кодов Assembler в C/C++. Я читал, что в C/C++ существует функция _asm, в которой пишутся команды Assembler:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
...
_asm
{
_msg db 'Hello$'
mov ah, 09h
mov dx, offset _msg
int 21h
}
...

Но, данный код у меня не заработал (где то пишут, что надо "_asm mov ah, 09h"(т.е. перед каждой командой Assembler писать _asm, где то _asm {/*начало*/ /*конец*/}... Но ни тот, ни другой вариант у меня не заработал...)...
В варианте с началом-концом мне выдавалась следующая ошибка:
Кликните здесь для просмотра всего текста

error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "db"
error C2015: слишком много знаков в константе
error C2443: конфликт размеров операндов

Подскажите пожалуйста, в чём может быть проблема?
P.S. Я использую Microsoft Visual Studio 2012... В Pascal (в ABC.NET, во всяком случае, как я читал), нету поддержки команд Assembler (она была только по Turbo Pascal)... Может быть, здесь такая же проблема? Или синтаксис команд Assembler не правильный(но, emu8086 так не считает)...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 01:43     Коды Assembler в C/C++
Посмотрите здесь:

Коды символов C++
Коды программ ... C++
getch и коды C++
C++ не разборчивые коды
C++ Коды исключений
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.12.2013, 02:01     Коды Assembler в C/C++ #2
Времена доса давно прошли. Если пишешь под виндой - Прерывания не нужны!
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
05.12.2013, 02:09  [ТС]     Коды Assembler в C/C++ #3
Kuzia domovenok, можете дать пример Assembler в C/C++?
Просто, как я не пишу-всё равно, на _asm mov ah, 09h - всё нормально, но как только я посылаю в dx параметр для вывода на экран, или объявляю переменную для хранения строки для вывода-всё...
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.12.2013, 02:17     Коды Assembler в C/C++ #4
Второе. А кто тебе вообще сказал, что ты можешь объявлять глобальные переменные в ассемблерной вставке?
Нужна глобальная переменная? Объяви её как обычную глобальную переменную в си.

И ещё раз:
не используй прерывания!

Добавлено через 6 минут
Jack Wade, ладно. Смотри. Что ты хочешь написать?
Hello world на асме? Под какую ос? Под винду?
Нужна именно вставка в код си или код, скажем для MASM?
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
05.12.2013, 02:24  [ТС]     Коды Assembler в C/C++ #5
Кликните здесь для просмотра всего текста

Всё таки, непревычен Assembler, после C/C++...

В общем-я не смог вывести сообщение на экран консоли, но смог сложить 2 числа(большое достижение однако...)...
Кликните здесь для просмотра всего текста

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
int res=0;
_asm
{
mov eax, 1;
mov ebx, 2;
add eax, ebx;
mov res, eax;
}
printf("%d\n", res);
_gettch();
return 0;
}

Подскажите пожалуйста, как тогда мне использовать функции 09h, 02h, и другие функции? Допустим, вот я хочу вывести текст на экран консоли при помощи команд Assebler, значит, как мне это реализовать в MSVS2012?

Добавлено через 1 минуту
Kuzia domovenok, пишу под Windows(ОС установлена 8-ка).
Мне бы хотелось, хотя бы для начала, узнать, как использовать функцию 09h для вывода текста на экран.

Добавлено через 1 минуту
В emu8086(которому нас и обучали(да и обучают)), вывод на экран происходил след. образом:
Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
.model tiny
.stack 100h
.data
_message_text db 0ah, 0dh, 'This_Is_Text$'
.code
main
mov ah, 09h
mov dx, offset _message_text
int 21h
end main
end
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
05.12.2013, 02:27     Коды Assembler в C/C++ #6
Цитата Сообщение от Jack Wade Посмотреть сообщение
Кликните здесь для просмотра всего текста

Всё таки, непревычен Assembler, после C/C++...

В общем-я не смог вывести сообщение на экран консоли, но смог сложить 2 числа(большое достижение однако...)...
Кликните здесь для просмотра всего текста

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
int res=0;
_asm
{
mov eax, 1;
mov ebx, 2;
add eax, ebx;
mov res, eax;
}
printf("%d\n", res);
_gettch();
return 0;
}

Подскажите пожалуйста, как тогда мне использовать функции 09h, 02h, и другие функции? Допустим, вот я хочу вывести текст на экран консоли при помощи команд Assebler, значит, как мне это реализовать в MSVS2012?

Добавлено через 1 минуту
Kuzia domovenok, пишу под Windows(ОС установлена 8-ка).
Мне бы хотелось, хотя бы для начала, узнать, как использовать функцию 09h для вывода текста на экран.

Добавлено через 1 минуту
В emu8086(которому нас и обучали(да и обучают)), вывод на экран происходил след. образом:
Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
.model tiny
.stack 100h
.data
_message_text db 0ah, 0dh, 'This_Is_Text$'
.code
main
mov ah, 09h
mov dx, offset _message_text
int 21h
end main
end
никак, для современных виндоувс

Добавлено через 1 минуту
Нужно искать старый компилятор и компилить 16-разрядный код
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.12.2013, 02:48     Коды Assembler в C/C++ #7
Jack Wade, Jack Wade, Jack Wade, изучаешь ассемблер для DOS так и пиши для доса, а не под виндой! Поставь dosbox, пиши под ним. Найди ассемблер для доса. (под вин ХР можно было обойтись без эмулятора)
А если вынужден делать ассемблерные вставки в Си, то и среду с компилятором си ищи для доса! Например пиши в borland C++ 3.1 for DOS.
Однако, под виндой, чтобы вывести хелоуворлд, ты обязан использовать WinApi, а не прерывания!
МаксимТ
 Аватар для МаксимТ
47 / 47 / 4
Регистрация: 17.08.2012
Сообщений: 225
05.12.2013, 02:52     Коды Assembler в C/C++ #8
зачем собственно нужно писать на ассемблере такие вещи как вывод сообщения?
как уже выше писали, поюзать прерывания не получится - но оно и нафик не нужно, в прикладном программировании.
(конкретно вывод текста будет выглядеть примерно так- пуш пуш пуш call вывод_на экран)
ассемблер нужно использовать там где он реально нужен.
(например враппер, которому передается управление после нестандартного инжекта/сплайсинга функции)
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.12.2013, 03:09     Коды Assembler в C/C++ #9
МаксимТ, не, ну если очень припёрло делать вывод сообщения асм вставкой, то можно написать, например
push...
push...
push...
call WriteConsoleA
или же
call printf
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 03:28     Коды Assembler в C/C++
Еще ссылки по теме:

Коды цифр C++
C++ короткие коды с ********
Коды символов C++

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

Или воспользуйтесь поиском по форуму:
aperechnev
 Аватар для aperechnev
0 / 0 / 0
Регистрация: 05.12.2013
Сообщений: 7
05.12.2013, 03:28     Коды Assembler в C/C++ #10
Писал давече статью на тему использования Assembler в C++: http://perechnev.com/2013/11/09/осно...й-оптимизации/

Для разного рода познавательных экспериментов я бы советовал использовать g++. Все таки изучать так глубого именно технологии Microsoft - неперспективно. Не ориентируйся на Visual Studio.
Yandex
Объявления
05.12.2013, 03:28     Коды Assembler в C/C++
Ответ Создать тему
Опции темы

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