eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: CSRMO (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

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

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

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

}
...

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


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

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

гугл не?

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

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


Ранг: 416.5 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 14 мая 2016 00:37 New!
Цитата · Личное сообщение · #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

Ранг: 394.1 (мудрец)
Статус: Участник

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

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

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

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

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


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

plutos пишет:
In English:


Там GCC..


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

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

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




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

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


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

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



Ранг: 416.5 (мудрец)
Статус: Участник
_Вечный_Студент_

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

Bы, dosprog, так уж не переживайтe. Никто ведь не умер и не заболел из-за пары ссылок.
Увидит человек, что это не совсем то, что ему нужно и читать не станет. А вдруг и пригодится. Знания ведь лишними не бывают.
 eXeL@B —› Программирование —› VS(cpp) _asm{} need help
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS