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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 21:10   #1
xinch
 
Регистрация: 10.03.2008
Сообщений: 9
По умолчанию builder не видит переменную внутри asm вставки

Есть код
Код:
....
#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
#  define  LES_	les
#  define  ES_	es:
#else
#  define  LES_	mov
#  define  ES_
#endif

int HashTable::getHashCode( char * str )
{
  asm	xor	ax,ax
  asm	LES_	bx,str
wLoop:
  asm	mov	dx,ES_ [bx]
  asm	add	bx,2
  asm	or	dl,dl
  asm	jz	Ex
  asm	add	ax,dx
  asm	or	dh,dh
  asm	jnz	wLoop
Ex:
  return ( _AX % hashSize );
}
при запуске получаю ошибку в строке "asm LES_ bx,str"
Цитата:
[BCC32 Error] HASH.CPP(132): E2451 Undefined symbol 'str'
Full parser context
HASH.CPP(130): parsing: int HashTable::getHashCode(char *)
запускал как в 3-м, так и в xe, результат один.
Код чужой и очень древний, комментриев в коде нет совсем.
Есть идеи?

Последний раз редактировалось xinch; 19.04.2012 в 21:29.
xinch вне форума Ответить с цитированием
Старый 19.04.2012, 21:13   #2
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

По-моему в builder'e есть функция GetHashCode(), так что ее переписывать не обязательно.
Drugnir вне форума Ответить с цитированием
Старый 19.04.2012, 23:34   #3
xinch
 
Регистрация: 10.03.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Drugnir Посмотреть сообщение
По-моему в builder'e есть функция GetHashCode(), так что ее переписывать не обязательно.
не нашел, хотя гуглил
xinch вне форума Ответить с цитированием
Старый 20.04.2012, 00:14   #4
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Здесь видел:
http://www.cyberforum.ru/cpp-builder/thread133943.html
Drugnir вне форума Ответить с цитированием
Старый 20.04.2012, 14:11   #5
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Судя по всему в тело функции не копируется указатель на передаваемый параметр. Создай его сам
Код:
int HashTable::getHashCode( char * str )
{
   char* inside = str;

  asm	xor	ax,ax
  asm	LES_	bx,inside

........
или, по соглашению Pascal, первый параметр заноситься в EAX
Код:
int HashTable::getHashCode( char * str )
{ 
  
  asm mov ECX, EAX // теперь указатель на str в ECX
 
  asm	xor	ax,ax
  asm	LES_	bx,cx // загружаем указатель es:bx
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 21.04.2012, 21:51   #6
xinch
 
Регистрация: 10.03.2008
Сообщений: 9
По умолчанию

Цитата:
Судя по всему в тело функции не копируется указатель на передаваемый параметр. Создай его сам
это первое, что попробовал сделать, получил ошибку
Цитата:
E2510 Operand size mismatch
Цитата:
asm mov ECX, EAX // теперь указатель на str в ECX
указатель не передается в ECX, там 0 после выполнения.

Еще заметил интересную особенность: если изначальный код никак не редактировать, эта функция отрабатывает нормально, но даже поставленный пробел все рушит.

Последний раз редактировалось xinch; 21.04.2012 в 21:59.
xinch вне форума Ответить с цитированием
Старый 24.04.2012, 11:45   #7
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
E2510 Operand size mismatch
переписывай под 32 разряда
int HashTable::getHashCode( char * str )
{
asm
{
char* inside = str;



xor eax,eax

mov ebx,inside
wLoop:
mov edx,es:[ebx]
add ebx,2
or dl,dl
jz Ex
add eax,edx
or dh,dh
jnz wLoop
Ex:
return ( _AX % hashSize );
}
}

Код:
mov ECX, EAX // теперь указатель на str в ECX
проверил работает
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 24.04.2012 в 11:49.
Krok27 вне форума Ответить с цитированием
Старый 24.04.2012, 18:28   #8
xinch
 
Регистрация: 10.03.2008
Сообщений: 9
По умолчанию

последний код заработал, большое спасибо.
xinch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asm-вставки. перевод в "чистый" c++ progcpp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 14.09.2011 20:52
builder c++ компонетны которые можно использовать при вставки рисунка tatysya Помощь студентам 3 12.08.2010 20:00
Класс не видит обЪект Borland C++ Builder firefox0013 C++ Builder 11 01.10.2009 17:30
asm-вставки в конс.пр С++Builder ZeBe Помощь студентам 1 23.03.2009 09:54
asm-вставки demon_sv Общие вопросы Delphi 1 14.02.2007 18:33