ASM вставки в С++

Форум для программистов

Сообщение x0r » Вт июл 15, 2003 6:14 pm

Всем доброе. Если не трудно, то расскажите, как делаются вставки асм кода в с++. Версия компилятора: Borland C++ 3.1, исходник с++ - любой, а вот исходник асма от Bart'a Simpsona:
Заранее благодарен.
[skiped]
Последний раз редактировалось x0r Вт июл 15, 2003 6:32 pm, всего редактировалось 1 раз.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение Scalder » Вт июл 15, 2003 6:31 pm

2x0r
Ну например как получить адрес переменной, но уже на асме...
Код: выделить все
_asm
{
lea eax, var_name
}

В результает имеем в eax адрес нашей переменной, пробовалось в MS VC++ 6.5. На счёт остальных не знаю.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение x0r » Ср июл 16, 2003 1:48 am

Похоже тут погоду делает версия компилятора. У меня не работает даже такая строка. Странно, хотя в справке ясно указывается, что операторы асма могут перечисляться в скобках {}. Может там надо иначе компилировать? Или он сам должен распознать директиву для Асма?
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение MAPA3bM » Ср июл 16, 2003 3:06 am

2x0r
Смотри доки к компилятору - зачастую у всех по-своему реализовано. И что значит "не работает даже такая строка" ? При компиляции вылетает, или как? Кстати, еси при компиляции - у борландовских компиляторов можно прям по ошибке help вызвать и там посмотреть.
MAPA3bM
Полковник
 
Сообщений: 1270
Зарегистрирован: Вт дек 31, 2002 12:54 am
Откуда: Приморье
Пункты репутации: 0

Сообщение Scalder » Ср июл 16, 2003 5:51 am

Из Borland C++ 3.1
<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
asm, _asm, __asm (keywords)
You use the asm statements to place assembly language statements in the
middle of your C++ source code.
Syntax:
Код: выделить все
 
asm <opcode> <operands> <; or newline>
  _asm <opcode> <operands> <; or newline>
  __asm <opcode> <operands> <; or newline>

Any C++ symbols are replaced by the appropriate assembly language
equivalents.
If you want to include a number of asm statements, surround them with
braces:
Код: выделить все
 asm {
   pop ax; pop ds
   iret}

Example
Код: выделить все
   Asm mov ax,_stklen
<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение x0r » Ср июл 16, 2003 2:07 pm

Он реагирует совершенно однозначно. Компилятор сообщает, что эта фраза не найдена, а все остальное не имеет прототипов. Складывается впечатление, что он даже внутри скобок асма пытается искать С++ синтаксис.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение Scalder » Ср июл 16, 2003 2:34 pm

2x0r
А а без скобок пробовал?
Asm mov ax,_stklen ?
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение x0r » Чт июл 17, 2003 2:44 am

Попробовал. Вообще ничего не понятно: если писать строкой asm mov ax,_stklen, то все нормально, если писать
asm {mov ax,_stklen}, то также, но если:
asm
{
mov ax,_stklen
}
То получается следующее:
Undefined symbol 'mov'
Statement missing ';'
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение Scalder » Чт июл 17, 2003 6:25 am

2x0r
Читай внимательно мою выдержку <!--emo&:)-->Изображение<!--endemo--> Там как раз про это написанно <!--emo&:)-->Изображение<!--endemo-->
asm <opcode> <operands> <; or newline>
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение x0r » Чт июл 17, 2003 9:03 pm

Тогда надо уточнить: я не знаю асм. Я не знаю, что такое opcode и operand. Я сообразил, что в конце строки можно ставить ; и продолжать писать, либо переходить на новую строку. Правильно?
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение MAPA3bM » Пт июл 18, 2003 7:38 am

2x0r
Либо ставь ; либо закрывай скобку на той же строке
opcode - код операции (MOV)
operand - участвующие регистры|переменные|непосредственные значения (ax,_stklen)
И с подчёркиваниями разберись - некоторые компиляторы|компоновщики их требуют, некоторые нет, а некоторые сами ставят. Из-за этого могут быть неувязки.
MAPA3bM
Полковник
 
Сообщений: 1270
Зарегистрирован: Вт дек 31, 2002 12:54 am
Откуда: Приморье
Пункты репутации: 0

Сообщение x0r » Сб июл 19, 2003 2:08 am

2MAPA3bM: Большое спасибо.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron