Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

Функция 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
9-1062528946
Omar2002
2003-09-02 22:55
2004.03.28
Глюки в проге или в DelphiX


8-1068643415
Artur
2003-11-12 16:23
2004.03.28
Ггрфика. Image.


7-1073270354
Babay
2004-01-05 05:39
2004.03.28
Очередь печати принтера


14-1077777849
sea
2004-02-26 09:44
2004.03.28
Нужно откомпилять прогу под Unix


3-1077530992
Dimaz-z
2004-02-23 13:09
2004.03.28
Как в EhLib в гриде поставить нумерацию записей по порядку(1,2..)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский