Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43

inline assembler в СИ

09.04.2010, 18:55. Показов 3203. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго!
каким образом можно связать внешную переменную и встроенный ассмблер в Си?
чтоб было примерно так:
C
1
2
int abc = 666;
asm("mov abc, 777"); // не знаю как на AT&T синтаксисе. но с интел можно скомпилировать (в gcc по карйней мере,если опцию -masm=intel задать :)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2010, 18:55
Ответы с готовыми решениями:

GCC Inline Assembly перевести в Visual Studio Inline Assembler
Здравствуйте. Есть код на GCC Inline Assembly и его нужно перевести в Visual Studio Inline Assembler. Не работал с GCC Inline Assembly...

Inline assembler mingw
Добрый вечер ув. пользователи форума. Возникла проблема с ассемблером, и его реализацией в mingw. Имеется функция void call_hook ( void...

Работа со строками. Удалить из строки символы в скобках inline assembler.
Удалить из строки символы в скобках inline assembler. Подскажите в какую сторону копать...

11
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.04.2010, 23:48
Зависит от компилятора
0
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
10.04.2010, 00:51
Да собственно вот так хотя бы:
C
1
2
3
4
5
6
7
8
9
int var=0,var2=0;
_asm
{
        mov var,1
    mov dword ptr[var2],15
}
WCHAR tSt[260];
swprintf(tSt,L"Var = %i Var2 = %i",var,var2);
MessageBoxW(0,tSt,0,0);
Вывод будет: Var = 1 Var2 = 15
Это равносильно для MSVS, т.к. в ней что [var] что var - одно и тоже, адрес переменной. За это я честно-говоря и не люблю MASM. Тут непонятно как тогда сделать косвенную адресацию...
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
10.04.2010, 15:57  [ТС]
пишет :
Bash
1
2
undefined reference to `abc'
collect2: ld returned 1 exit status
компилятор GCC, компилирую -masm=intel

Добавлено через 10 минут
ура!!
вопрос решен!
http://www.ibiblio.org/gferg/l... HOWTO.html помогло
C
1
2
3
4
5
6
asm(
  "mov %0, 777\n"
  : "=r" (abc)
  :
  :
);
--
Ivan__32, это вроде для виндусятского компилятора.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.04.2010, 16:50
vlitomsk, в твоём случае хвост можно не писать, т.е. ограничится

C
1
asm ("mov %0, 777" : "=r" (abc));
Однако я бы тебе рекомендовал использовать тот синтаксис ассемблерного написания, который принято использовать под linux'ом. Формат gnu'той ассемблерной вставки слишком сложен для неподготовленного человека и тебе так или иначе придётся смотреть чужие коды. А потому будешь постоянно путаться из-за того, что твой синтаксис - "не как у людей"

Добавлено через 1 минуту
Кстати, в том мануале не написано, но вместо цифрового описания операндов можно им задавать псевдоимена. Точный синтаксис не помню, но вроде бы так

C
1
asm ("mov %[dst], 777" : "=r" [dst] (abc));
1
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
10.04.2010, 19:01  [ТС]
нет,AT&T синтаксис-то мне понятен. только душа не лежит к нему,чтобы писать
-
а еще непонятно, почему "=r"?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.04.2010, 19:47
Знак "=" означает, что в этот аргумент идёт запись, а начальное значение этого аргумента нам неважно. Если "+" - значит аргумент и пишется, и читается (т.е. нам важно, как входое значение аргумента, так и выходное). Я в интеловской системе команд плохо разбираюсь, но операция "a += b" в ассемблерном виде запишется примерно так:

C
1
asm ("add %[dst], %[arg]" : "+r" [dst] (a) : "r" [arg] (b));
Добавлено через 30 секунд
С этими вставками я, например, понимаю, как они работают, но очень затрудняюсь внятно объяснить словами
1
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
10.04.2010, 19:57  [ТС]
спасибо!
0
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
20.04.2010, 11:51  [ТС]
а можно поинтересоваться, что такое "=t" и "0"?
C
1
 asm ("fcos" : "=t" (result) : "0" (angle));
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.04.2010, 11:59
0 - означает, что операнд использует тот же ресурс, что и операнд 0
что такое t - хз (я не знаю intel'овскую систему команд), но скорее всего плавающий регистр (или что там за тип регистра требуется для операции fcos)
1
 Аватар для vlitomsk
5 / 4 / 0
Регистрация: 23.03.2010
Сообщений: 43
20.04.2010, 12:05  [ТС]
ну вообще-то fcos - FPUшная команда) и пишется одинаково что в intel, что в at&t
а можно где-нибудь взять описания этих "=r", "=t" и все что в кавычках?ведь их же не из воздуха берут)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.04.2010, 13:30
Цитата Сообщение от vlitomsk Посмотреть сообщение
ну вообще-то fcos - FPUшная команда) и пишется одинаково что в intel, что в at&t
Я говорю не про синтаксис, а про систему команд. Я с intel'овским процессором мало знаком

Цитата Сообщение от vlitomsk Посмотреть сообщение
а можно где-нибудь взять описания этих "=r", "=t" и все что в кавычках?ведь их же не из воздуха берут)
В посте #4 уже дали ссылку. В конце раздела 6.1 описано в том числе и "t". А нормальной и внятной документации по ассемблерным вставкам я толком никогда и не видел. Как и у большинства opensource'ного софта нужно постоянно рыться в гугле
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2010, 13:30
Помогаю со студенческими работами здесь

Определение тактовой частоты. Еrror C2400: inline assembler syntax error in 'opcode'
в VS в _asm пишу определение тактовой чистоты,ругается: error C2400: inline assembler syntax error in 'opcode'; found 'constant' в C++...

Inline Assembler & C++
int main(int argc, char *argv) { perevod(); cout<<"Type Esc to Escape \n"; __asm { mov ah,01h ...

inline assembler VS чтение по указателю
Доброе время суток. Задача состоит в чтении 1 байта по адресу указателя. Проблема с пониманием, что не так с типами операндов. char...

Как исправить код? / Inline assembler
#include <stdio.h> int main(int argc, char** argv ) { int aa; int bb; aa = 42; bb = 10;

Компиляция Inline assembler (вставки ассемблера)
Доброго времени суток! Уважаемые кодеры! Помогите с компиляцией С++ со вставками ассемблера. g++ или gcc выдает ошибку: ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru