Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Вставка на Асме в Builder


Автор: VVV 17.7.2006, 23:23
Помогите! Как сделать вставку на ассемблере в си++шный код в Buildere? 

Автор: dumb 18.7.2006, 00:23
F1:
Цитата

Category
C++Builder keyword extensions, C++-Specific Keywords

Syntax
asm <opcode> <operands> <; or newline>
_asm <opcode> <operands> <; or newline>
__asm <opcode> <operands> <; or newline>


Код

_asm mov eax, ebx

_asm {
  mov eax, ebx
  mov ebx, eax
}


smile 

Автор: apook 24.7.2006, 13:10
Что то asm вообще не вставляется  smile

user posted image

user posted image

  

Автор: dumb 24.7.2006, 13:30
apook, тебе уже по-моему не один раз говорили, что есть "небольшая" разница в режимах работы процессора. ЗАБУДЬ про прерывания. по крайней мере пока не поймешь, как они работают в защищенном режиме в целом и в винде в частности.

Добавлено @ 13:34 
даже так: забудь про асм... тебе нужно "основательно подучить теорию", как обычно говорят преподаватели... smile 

Автор: apook 24.7.2006, 15:15
 user posted image
 

Автор: Gordon 28.7.2006, 12:18
apook ассемблеровские вставки делаются так:
asm {
// код ассемблера
}

Можешь поискать вздесь: http://worldcpp.vingrad.ru/ smile

Добавлено @ 12:25 
 smile Прошу прощения, ошибся :
Цитата

Можешь поискать вздесь: http://worldcpp.vingrad.ru/
 

Автор: fish9370 12.6.2007, 19:38
Код

__asm
{
        call $+5
        pop    ebx
}


на команде call возникает ошибка E2188 Expression Syntax, другими словами TASM не понимает, что такое $.. кто-нибудь знает как правильно записать? 

p.s.  мне требуется получить текущий адрес в ebx..

Автор: 586 13.6.2007, 05:01
Код
  __asm {
    db 0e8h, 0, 0, 0, 0
    pop ebx
  }

Автор: jonie 13.6.2007, 09:39
а вариант 
Код

 point: call point+5

работать не будет? smile 

Автор: 586 13.6.2007, 12:49
Цитата(jonie @  13.6.2007,  10:39 Найти цитируемый пост)
а вариант 
 
Код
point: call point+5

работать не будет?

а смысл? создавать лишнюю метку? всё равно смещение цифрами указывается, где 5 - это размер команды call.

PS  А у меня билдер ругается: Undefined symbol 'point'. По идее код реальный.

Автор: jonie 13.6.2007, 15:39
Цитата

а смысл?
просто виды db блаблабла  в коде пугают до ужаса)
Цитата

№120091
<Amin_[work]> коммент из исходника : "Эту функцию писал не я, как она работает - без понятия. Трогать страшно." Далее идет 5 страниц ассемблера без единого разделителя и каммента.
(с) copyright bash.org.ru 


мдя... после нескольких экпериментов получил
Цитата

[C++ Fatal Error] Unit1.cpp(22): F1001 Internal code generator error
забил)....

PS: получить ассемблеровский листинг (поствив что надо в опциях) так и не получилось....

Автор: 586 13.6.2007, 16:43
Цитата(jonie @  13.6.2007,  16:39 Найти цитируемый пост)
просто виды db блаблабла  в коде пугают до ужаса

Без комментариев может и испугать.
Можно ещё так, а то вдруг кого-нибудь размер команды испугает:
Код
__asm {
     call loc
loc: pop ebx
}

Автор: jonie 14.6.2007, 00:03
Цитата

Можно ещё так, а то вдруг кого-нибудь размер команды испугает:
а еще есть всякие x64 и прочие... я бы не рекомендовал писать прямо опкодами -- они жестко привязывают программа к аппратуре... кроме того такой код сложно поддерживать....

Автор: dumb 14.6.2007, 12:46
Цитата(jonie @  14.6.2007,  00:03 Найти цитируемый пост)
я бы не рекомендовал писать прямо опкодами -- они жестко привязывают программа к аппратуре...

уже само использование ассемблера "жестко привязывает"... smile

Автор: fish9370 18.6.2007, 16:40
так все-таки почему компилятор ругается на метки? че ему надо?

Автор: 586 18.6.2007, 16:46
Цитата(fish9370 @  18.6.2007,  17:40 Найти цитируемый пост)
так все-таки почему компилятор ругается на метки? че ему надо? 

имхо это баг билдера. например, если вместо call написать jmp всё нормально компилируется.

Автор: fish9370 18.6.2007, 16:52
Цитата(586 @ 18.6.2007,  16:46)
Цитата(fish9370 @  18.6.2007,  17:40 Найти цитируемый пост)
так все-таки почему компилятор ругается на метки? че ему надо? 

имхо это баг билдера. например, если вместо call написать jmp всё нормально компилируется.

а как победить?

Автор: 586 18.6.2007, 17:10
Цитата(fish9370 @  18.6.2007,  17:52 Найти цитируемый пост)
а как победить? 

Цитата(586 @  13.6.2007,  06:01 Найти цитируемый пост)
Код
__asm {
  db 0e8h, 0, 0, 0, 0
  pop ebx
}

Автор: fish9370 18.6.2007, 18:02
дуристика какая-то.. )

Автор: W4FhLF 18.6.2007, 18:06
Цитата(fish9370 @  18.6.2007,  18:02 Найти цитируемый пост)
дуристика какая-то.. )


дзен. 

Автор: fish9370 18.6.2007, 19:27
Цитата(W4FhLF @ 18.6.2007,  18:06)
Цитата(fish9370 @  18.6.2007,  18:02 Найти цитируемый пост)
дуристика какая-то.. )


дзен.

а че такое дзен?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)