Главная страница
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.021 c
3-1077493659
HMT
2004-02-23 02:47
2004.03.28
TIBEvents..Что-то не работает :-(


3-1077629735
Desdechado
2004-02-24 16:35
2004.03.28
Странное поведение в TClientDataset


1-1078821828
Dima_________
2004-03-09 11:43
2004.03.28
Работа с Word


4-1073620726
SkyRanger
2004-01-09 06:58
2004.03.28
Проблема с GetTickCount


3-1077634767
overword
2004-02-24 17:59
2004.03.28
Непонятки с добавлением Interbase