Assembly pascal代码中的汇编程序?
当我遇到以下过程时,我正在阅读pascal源代码:Assembly pascal代码中的汇编程序?,assembly,pascal,Assembly,Pascal,当我遇到以下过程时,我正在阅读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
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);
那么,到底复制了什么 源地址是:unpacket[WritePosition Backwards]的内存地址 目标地址是:unpacket[WritePosition]的内存地址
复制的内容(以字节为单位)是:lengthmovsb将一个字节从源指针移动到目标esi到edi,它们的内容指向哪个,并且每个字节递增。rep表示重复本指令movsb ecx多次。所有这些都记录在x86指令集手册中。因此,如果每个元素都是一个字节,则此过程将从WritePosition开始向后复制数组中元素的长度数,精确到offset WritePosition。元素大小为字节,因为正在使用movsb指令。源/目标地址是未打包的[xxx]数组成员的内存地址。我们不知道解包数组的类型。解包听起来更像是一个修饰符,表示地址xxx可能没有对齐