x86_64汇编代码中"cyclic data "的问题
Problem of "cyclic data " in x86_64 assembly code
我正在尝试在汇编中编写 memmove:
问题是,在我的部分数据中,我有两行:源和目标,当我试图将 20 个字节从源传递到目标时,而源只有 15 个字节,从源到目标传递的第 16 个字节需要是目标的第一个字节,但源的第一个字节已通过,
- 第一张图我们可以看到
RAX
在21那么需要传递的数据就是source+21
= 43,
- 我们可以看到
source+21
的结果是 176(176 = source+0) 而不是应该的 43,
- 在最后一张图片中我们可以看到在
RCX
中有source + 22
= 122(122= source+1) 假设是161
看起来代码是循环的,
感谢您的帮助!
source 和 destination 数组在内存中相互跟随。 他们之间没有差距。
您的复制循环执行的第一个传输将从 source (176) 读取第一个字节并将其写入 destination (43)。 此后值 43 将永远消失!
当你查看 source+21
, 与 destination+0
相同时,只保留值 176。
您的复制循环所做的第二次传输将从 source (122) 读取第二个字节并将其写入 destination[=35] 的第二个字节=] (161)。 此后值 161 将永远消失!
当你查看 source+22
, 与 destination+1
相同时,只保留值 122。
我正在尝试在汇编中编写 memmove: 问题是,在我的部分数据中,我有两行:源和目标,当我试图将 20 个字节从源传递到目标时,而源只有 15 个字节,从源到目标传递的第 16 个字节需要是目标的第一个字节,但源的第一个字节已通过,
- 第一张图我们可以看到
RAX
在21那么需要传递的数据就是source+21
= 43, - 我们可以看到
source+21
的结果是 176(176 = source+0) 而不是应该的 43, - 在最后一张图片中我们可以看到在
RCX
中有source + 22
= 122(122= source+1) 假设是161
看起来代码是循环的, 感谢您的帮助!
source 和 destination 数组在内存中相互跟随。 他们之间没有差距。
您的复制循环执行的第一个传输将从 source (176) 读取第一个字节并将其写入 destination (43)。 此后值 43 将永远消失!
当你查看 source+21
, 与 destination+0
相同时,只保留值 176。
您的复制循环所做的第二次传输将从 source (122) 读取第二个字节并将其写入 destination[=35] 的第二个字节=] (161)。 此后值 161 将永远消失!
当你查看 source+22
, 与 destination+1
相同时,只保留值 122。