|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
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 оптимизация выключена наверное какаято глупая ошибка, но не соображу никак. |