【发布时间】:2014-02-16 17:05:34
【问题描述】:
当我遇到这个过程时,我正在阅读 pascal 源代码:
procedure Copier_Bytewise (const source, target; const Count: word);
(* $ IFDEF VirtualPascal *)
assembler; (* $ Uses ESI, EDI, ECX *) (* $ Frame-*)
asm
mov esi, source
mov edi, target
mov ecx, Count
cld
rep movsb
end;
(* $ ELSE *)
.
(* $ ENDIF *)
用这些参数调用这个过程:
Copier_Bytewise (Unpacked [WritePosition-Backwards], Unpacked [WritePosition], length);
那么,到底复制了什么?!
【问题讨论】:
-
movsb 将一个字节从源指针移动到目标(esi 到 edi,它们的内容指向什么)并递增每个字节。 rep 表示重复重复此指令 (movsb) ecx 的次数。这一切都记录在 x86 指令集手册中。