Привет форум!
Появилось желание некоторые функции в делфи переписать на ассемблере. Я не большой спец по ассемблеру, да собственно и не в нем вопрос. Есть такая вот функция, и сам код работает если взять асм блок в 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 оптимизация выключена
наверное какаято глупая ошибка, но не соображу никак.