Assembly 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

当我遇到以下过程时,我正在阅读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);

那么,到底复制了什么

源地址是:unpacket[WritePosition Backwards]的内存地址

目标地址是:unpacket[WritePosition]的内存地址


复制的内容(以字节为单位)是:length

movsb将一个字节从源指针移动到目标esi到edi,它们的内容指向哪个,并且每个字节递增。rep表示重复本指令movsb ecx多次。所有这些都记录在x86指令集手册中。因此,如果每个元素都是一个字节,则此过程将从WritePosition开始向后复制数组中元素的长度数,精确到offset WritePosition。元素大小为字节,因为正在使用movsb指令。源/目标地址是未打包的[xxx]数组成员的内存地址。我们不知道解包数组的类型。解包听起来更像是一个修饰符,表示地址xxx可能没有对齐