Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Assembler
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

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


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter