Сейчас на форуме: jinoweb, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› VS(cpp) _asm{} need help
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2016 22:21
· Личное сообщение · #1

Доброго времени суток! подскажите новичку, как ему (VS2012(x32)) объяснить что мне регистр нужен?

int main()
{
_asm
{
add eax,0 //всё ОК
add eip,0 //Ошибка 1 error C2094: метка "eip" не была определена

}
...

а так же прошу поделится информацией о популярных подводных камнях в этой (_asm in VS) теме.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 13 мая 2016 22:26
· Личное сообщение · #2

гугл не?

http://ccfit.nsu.ru/~kireev/lab2/lab2reg.htm

eip/ip (Instraction Pointer register) ≈ регистр-указатель команд.
Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.

-----
[nice coder and reverser]





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 14 мая 2016 00:37
· Личное сообщение · #3

alex_e_m пишет:
прошу поделится информацией о популярных подводных камнях в этой (_asm in VS) теме.


Какие уж там "подводные камни". Об этой теме написаны горы материалов.
Вот на русском:
http://microsin.net/programming/avr/mixing-c-and-asm-code.html

In English:
http://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C

-----
Give me a HANDLE and I will move the Earth.




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 14 мая 2016 03:06 · Поправил: dosprog
· Личное сообщение · #4

Короче, регистр EIP нельзя модифицировать командой MOV.
Нет такой инструкции у процессора.
Поэтому и не определено резервное слово "EIP", а значит, участвуя в инструкции, оно может быть только меткой имени. О чём и было сообщено.
Есть же список зарезервированных компилятором имён, это в HELP'e.

Ещё, например, нет и операций MOV [память],[память]. - Тоже обругают при попытке использования.

Какие претензии к ассемблеру?..

plutos пишет:
Вот на русском:


Так там же не инлайн, а линковка отдельно сассемблированного кода..

plutos пишет:
In English:


Там GCC..


------------------------------------------------------------------------
В общем, надо пробовать и смотреть на результаты.
То, что скомпилируется и будет работать, - то, значит, верно.
Вот и все подводные камни.

Как правило, кому реально необходима эта __asm{}, те написанием мануалов и факов не заморачиваются

Типичное применение - кодеки видео и звука, драйвера устройств.
- Это довольно специфические области программирования.
(И то норовят не выходить за пределы Cи.)




--Добавлено--

plutos пишет:
Ты, dosprog, так уж не переживай.


..Не аккуратненько..(с)

Это я к тому, что тема всёже не такая уж и обсуждаемая.






Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 14 мая 2016 05:28 · Поправил: plutos
· Личное сообщение · #5

Bы, dosprog, так уж не переживайтe. Никто ведь не умер и не заболел из-за пары ссылок.
Увидит человек, что это не совсем то, что ему нужно и читать не станет. А вдруг и пригодится. Знания ведь лишними не бывают.

-----
Give me a HANDLE and I will move the Earth.



 eXeL@B —› Программирование —› VS(cpp) _asm{} need help
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати