Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 31

Начало работы со встроенным ассемблером

04.05.2013, 16:28. Показов 5024. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, кто знает как с этим работать
Проходим в универе встроенные в с++ ассемблер, накидал простейшую программку(ввод строки символов с клавиатуры и её же вывод на экран)
Собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 #include <iostream>
 using namespace std;
 int main()
 {
 _asm
 {
.data
 string db 3, ?, 4 dup(?)
 .code
 Programm:
 mov ax, @data
 mov ds, ax
 lea dx, string
 mov ah, 10
 int 21h
 lea dx, string+2
 mov string+5, '$'
 mov ah, 4ch
 int 21h
 end Programm
 }
 system("pause");
 }
Компилится не хочет, пишет:
source.cpp(7): error C2400: inline assembler syntax error in 'opcode'; found 'data'
source.cpp(8): error C2400: inline assembler syntax error in 'opcode'; found 'db'
source.cpp(9): error C2400: inline assembler syntax error in 'opcode'; found 'code'
source.cpp(11): error C2018: unknown character '0x40'
source.cpp(11): error C2443: operand size conflict
source.cpp(20): error C2400: inline assembler syntax error in 'opcode'; found 'Programm'

Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2013, 16:28
Ответы с готовыми решениями:

Нужна помощь со встроенным ассемблером в с++
вот такая задачка Основная задача: По матрице целых чисел X размером 5x5 построить массив Z (zi=∑xij) Функция на встроенном...

Напишите программу на Pascal с встроенным Ассемблером
Вот пример задачи. Вычислить Х = 3А + ( В + 5 ) / 2 - С - 1, где А, В, С, Х- целые знаковые числа занимающие слово, написать программу...

Как пользоваться встроенным ассемблером Visual Studio?
как пользоваться встроенным ассемблером visual studio?я создал через project - add new item - addproc.asm а что дальше делать?

10
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
04.05.2013, 18:05
вы знаете, я могу заблуждаться (имел опыт только в паскале с inline assembler да и больше AT&T синтаксис, а не Intel)
но мне почему-то кажется, что нельзя определять в inline assembler блоки
.data
.code
и уже тем более данные типа string db 3, ?, 4 dup(?)

определите данные в С++ коде, а не макросе __asm а тут сразу код пишите, это по поводу первых трёх ошибок

дальше вы пишите в конце
Assembler
1
2
mov ah, 4ch
 int 21h
это гарантированно фигню пишите... это завершение программы, которое явно сюда писать не надо, С++ сам завершит программу, как ему надо

Assembler
1
end Programm
это я понимаю тоже не от большого ума, это тут не уместно вообще

Assembler
1
2
mov ax, @data
 mov ds, ax
и это тоже, разберитесь что делают эти две строчки на досуге и подумайте нафига это в inline assmbler?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2013, 18:09
а откуда взят этот код? Это точно не inline ассемблер.
abit прав. Все данные объявляь как обычные переменные Си. Не случайно тут есть слово inline. Ассемблерные вставки это именно фрагменты кода, которые компилятор вставит в основную программу. Это не самостоятельная программа на асме.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
04.05.2013, 18:12
Вроде все уже написали выше, еще вот это
Цитата Сообщение от 123Unknown Посмотреть сообщение
mov ah, 10
int 21h
будет работать только под DOS'ом.
1
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 31
04.05.2013, 18:58  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вроде все уже написали выше, еще вот это

будет работать только под DOS'ом.
Хм. Спасибо, т.е. ввод с клавиатуры никак нельзя реализовать через встроенный ассемблер ?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
04.05.2013, 19:01
Цитата Сообщение от 123Unknown Посмотреть сообщение
ввод с клавиатуры никак нельзя реализовать через встроенный ассемблер ?
почему, можно. Например через тот же scanf().
0
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 31
04.05.2013, 19:08  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
почему, можно. Например через тот же scanf().
Я имел в виду возможность организовать ввод/вывод данных внутри ассемблерной вставки _asm{}, т.е. через команды именно ассемблера, или
это тоже невозможно ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2013, 19:16
Цитата Сообщение от 123Unknown Посмотреть сообщение
Я имел в виду возможность организовать ввод/вывод данных внутри ассемблерной вставки _asm{}, т.е. через команды именно ассемблера, или
это тоже невозможно ?
попробуй посмотреть в какой ассемблерный код превращается вызов scanf в окошке disassembly и напиши аналогичный в ассемблерной вставке
0
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 31
04.05.2013, 19:27  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
попробуй посмотреть в какой ассемблерный код превращается вызов scanf в окошке disassembly и напиши аналогичный в ассемблерной вставке
Т.е. уже придуманного механизма для этого нету ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2013, 19:31
что там думать? Дело двух минут.
1я минута, смотрим в окне disassembly какой ассемблер соответствует вызову scanf и пишем аналогичную вставку.
2я минута исправляем ошибки.
в итоге
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(int argc, char * argv[])
{
  int m;
  char* form="%d";
  _asm{
    lea         eax,[m] 
    push        eax  
    push        form
    call        dword ptr [scanf] 
    add         esp,8 
  }
  return 0;
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
04.05.2013, 21:15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Assembler
1
call dword ptr [scanf]
можно просто писать
Assembler
1
call scanf
компилятор поймет.

Добавлено через 3 минуты
Цитата Сообщение от 123Unknown Посмотреть сообщение
т.е. через команды именно ассемблера
так это в принципе не возможно. Тот же int 21h - это средство DOS'а, можно еще по другому (вроде int 10h, не помню), но это уже средство BIOS'а. Т.е. в любом случае придется использовать что-то стороннее.
В данном случае (имею ввиду scanf()) - это средство языка С, которое внутри себя использует средства Windows.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2013, 21:15
Помогаю со студенческими работами здесь

Работа со встроенным ассемблером. Записать число 5050 во все регистры общего назначения
Ребят, нужна ваша помощь. Нифига не понял этот Ассемблер. Помогите мне написать программу, которая бы записывала во все РОН (регистра...

начало работы с c#
Посоветуйте литературу по c# на доступном языке и с чего лучше начать изучение c#?

Начало работы с Qt
Приветствую вас уважаемые юзеры. Хочу попробовать себя в работе с программой Qt, где можно скачать эту программу?Спасибо!

Начало Работы
Посоветуйте: 1)Хорошую инструкцию по установке, И вообще что мне устанавливать для создния настольного приложения, и как настроить? ...

Начало работы в С++
Какую среду для С++ использовать, чтоб был хороший компилятор? как установить и начать работать? Пожалуиста, сразу ссылки. Windows...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru