Главная страница
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.027 c
3-1077182609
RavenD
2004-02-19 12:23
2004.03.28
утилиты?


4-1074584159
stkatch
2004-01-20 10:35
2004.03.28
Определить скрыто ли окно по Handle


1-1078420433
TSa
2004-03-04 20:13
2004.03.28
Спраятать TMainMenu


8-1069493158
Lukashin
2003-11-22 12:25
2004.03.28
Прозрачный цвет.


14-1077629077
raymond
2004-02-24 16:24
2004.03.28
Друзья, как мне скопировать копию рабочего стола в буфер?