Как делать ассемблерные вставки в С?

программирование assembler

Я не про то как оформляется ассемблерная вставка в си, а про связь куска ассемблерного кода с перменными и прочими элементами из основной программы.
Ответы:
Зависит от используемого компилятора, но как правило имена переменных и прочих элементов можно просто указывать в командах ассемблера. Компилятор сам вычислит их адреса и подставит их в команды процессора. Пример:
Если в gcc то файлы с расширением .s, а если надо то к функциями и переменным из ассемблера обращаться по имени - компоновщик потом найдет.
т.е. что нибудь вроде
int blabla;
asm {
mov eax, blabla
}
нормально работать будет, так?
Да. Только если говорить про архитектуру x86, копирование данных из памяти в память не всегда поддерживается, т.е. такой код
Вот простой пример.
int _tmain(int argc, _TCHAR* argv[])
{
int i=2;
unsigned int *p;
p = new unsigned int[3];
p[0]=1;
p[1]=2;
p[2]=3;
_asm
{
mov eax,2
mov ecx,i
mul ecx
mov i,eax
;mov eax,[p+4]
;mov ecx,[p+8]
;mul ecx
lea ebx,p
mov ecx,[ebx]
mov eax,[ecx+4]
mov edx,[ecx+8]
mul edx
mov [ecx],eax
}
std::cout << i << "     " << p[0];
std::cin >> i;
return 0;
}
2 Dmitry
Это из ассемблера приблуда, я знаю.
Вопрос скорее даже в том, что нельзя из ассемблера применить во вставке?
> Вопрос скорее даже в том, что нельзя из ассемблера применить во вставке?
Ладно, всем спасибо :)


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.