Показать сообщение отдельно
  #1  
Старый 17.11.2015, 21:24
Аватар для a.n.d.r.e.w
a.n.d.r.e.w a.n.d.r.e.w вне форума
Прохожий
 
Регистрация: 01.07.2015
Сообщения: 28
Версия Delphi: delphi xe7
Репутация: 10
По умолчанию E2171 Variable 'Pos' inaccessible here due to optimization

Привет форум!

Появилось желание некоторые функции в делфи переписать на ассемблере. Я не большой спец по ассемблеру, да собственно и не в нем вопрос. Есть такая вот функция, и сам код работает если взять асм блок в begin - end. Но в таком вот виде :

Код:
procedure TFGInt.Assign(aUnit: TFGInt; Pos: Word=0; Cnt: Word=0);
 label l1, l2;
//begin
    asm
     mov eax, [ebp-$04]  //положили в ebx  Self
     mov edi, [eax+$04]  //получилиSelf.fMemory
     add edi, $02        //сместились на Param
     mov ebx, [ebp-$08]  //положили в  ebx  aUnit
     mov esi, [ebx+$04]  //получили aUnit.fMemory
     add esi, $02        //сместились на Param
     movsw               //скопировали Param
     cmp Cnt, $00
     jne l1
     mov esi, [ebx+$04]   //получили aUnit.fMemory
     mov edx, [esi]        //если Cnt равен 0 то копируем в dx счетчик aUnit
     jmp l2
l1: mov dx, Cnt        //иначе положили в dx  Cnt
l2: call setCount      // в eax уже есть Self , в edx есть Cnt
     xor ecx, ecx
     mov cx, dx //установили счетчик цикла
     mov eax, [ebp-$04]  //положили в eax  Self
     mov edi, [eax+$4]   //получили Self.fMemory
     add edi, $04        //сместились на адрес начального блока Self
     mov ebx, [ebp-$08]  //положили в  ebx  aUnit
     mov esi, [ebx+$4]   //получили aUnit.fMemory
     mov eax, $04
     mul Pos
     add eax, $04
     add esi, eax //сместились на адрес начального блока aUnit
     rep movsd   //переписали блоки
   end;
//end

происходит ошибка.
я обнаружил что в параметре Pos передается мусор. В вотчлисте пишет: E2171 Variable 'Pos' inaccessible here due to optimization

какая оптимизация?? в проекте в CodeGeneration оптимизация выключена
наверное какаято глупая ошибка, но не соображу никак.
Ответить с цитированием