繁体   English   中英

x86_64汇编代码中的“循环数据”问题

[英]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

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

在第一张图片中我们可以看到 rax 在 21 那么需要传递的数据是 source+21 = 43 我们可以看到 source+21 的结果是 176 而不是它假设的 43 在最后一张图片中我们可以看到在 rcx 中有 source + 22= 122 并且假设为 161

目标arrays 在 memory 中相互跟随。它们之间没有间隙

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

您的复制循环执行的第二次传输将从(122) 读取第二个字节并将其写入目标的第二个字节 (161)。 此后,值161将永远消失
当您检查destination+1相同的source+22时,只保留值 122。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM