Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Функция Move из system.pas   Найти похожие ветки 

 
hexone ©   (2004-03-09 15:46) [0]

Подскажите, почему изменяется порядок копирования байт памяти в зависимости от адреса.
procedure       Move( const Source; var Dest; count : Integer );
{$IFDEF PUREPASCAL}
var
 S, D: PChar;
 I: Integer;
begin
 S := PChar(@Source);
 D := PChar(@Dest);
 if S = D then Exit;
 if Cardinal(D) > Cardinal(S) then
   for I := count-1 downto 0 do
     D[I] := S[I]
 else
   for I := 0 to count-1 do
     D[I] := S[I];
end;


 
ZrenBy ©   (2004-03-09 15:49) [1]

The source and destination blocks may overlap


 
hexone ©   (2004-03-09 15:51) [2]

!!!!! Ясно


 
jack128 ©   (2004-03-09 15:52) [3]

А что это за среда? Явно не делфи.. может FreePascal?
Вот код из пятерки

procedure       Move( const Source; var Dest; count : Integer );
asm
{     ->EAX     Pointer to source       }
{       EDX     Pointer to destination  }
{       ECX     Count                   }

       PUSH    ESI
       PUSH    EDI

       MOV     ESI,EAX
       MOV     EDI,EDX

       MOV     EAX,ECX

       CMP     EDI,ESI
       JA      @@down
       JE      @@exit

       SAR     ECX,2           { copy count DIV 4 dwords       }
       JS      @@exit

       REP     MOVSD

       MOV     ECX,EAX
       AND     ECX,03H
       REP     MOVSB           { copy count MOD 4 bytes        }
       JMP     @@exit

@@down:
       LEA     ESI,[ESI+ECX-4] { point ESI to last dword of source     }
       LEA     EDI,[EDI+ECX-4] { point EDI to last dword of dest       }

       SAR     ECX,2           { copy count DIV 4 dwords       }
       JS      @@exit
       STD
       REP     MOVSD

       MOV     ECX,EAX
       AND     ECX,03H         { copy count MOD 4 bytes        }
       ADD     ESI,4-1         { point to last byte of rest    }
       ADD     EDI,4-1
       REP     MOVSB
       CLD
@@exit:
       POP     EDI
       POP     ESI
end;


 
hexone ©   (2004-03-09 15:53) [4]

Тоже самое, но на АСМЕ, Сначала копируется все, что можно по 4 байта, потом по байтам остаток.


 
hexone ©   (2004-03-09 15:55) [5]

Там два кода, один на паскале, другой на АСМЕ. Одинаковые



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.09 c
1-1079013910
sherminator
2004-03-11 17:05
2004.03.28
ComboBox и исходное состояние...


9-1062232999
IvoozZ
2003-08-30 12:43
2004.03.28
Сбор предметов и помещение их в инвентарь (2D квест)


1-1078467939
TUser
2004-03-05 09:25
2004.03.28
TrackBar


14-1074853447
Дон Хуан
2004-01-23 13:24
2004.03.28
НЕТ личному автотранспорту!


11-1057344067
mox
2003-07-04 22:41
2004.03.28
Почему не работает таймер