x86_64汇编代码中"cyclic data "的问题

Problem of "cyclic data " in x86_64 assembly code

我正在尝试在汇编中编写 memmove: 问题是,在我的部分数据中,我有两行:源和目标,当我试图将 20 个字节从源传递到目标时,而源只有 15 个字节,从源到目标传递的第 16 个字节需要是目标的第一个字节,但源的第一个字节已通过,

  1. 第一张图我们可以看到RAX在21那么需要传递的数据就是source+21 = 43,
  2. 我们可以看到 source+21 的结果是 176(176 = source+0) 而不是应该的 43,
  3. 在最后一张图片中我们可以看到在RCX中有source + 22 = 122(122= source+1) 假设是161

看起来代码是循环的, 感谢您的帮助!

sourcedestination 数组在内存中相互跟随。 他们之间没有差距

您的复制循环执行的第一个传输将从 source (176) 读取第一个字节并将其写入 destination (43)。 此后值 43 将永远消失!
当你查看 source+21, destination+0 相同时,只保留值 176。

您的复制循环所做的第二次传输将从 source (122) 读取第二个字节并将其写入 destination[=35] 的第二个字节=] (161)。 此后值 161 将永远消失!
当你查看 source+22, destination+1 相同时,只保留值 122。