像 mov byte ptr [rax + rdx-1], 00 这样的偏移量是什么意思,其中 rax 不是指针

what does mean instruction like mov byte ptr [rax + rdx-1], 00 with such offset where rax not pointer

一直在学习汇编

mov byte ptr [rax+rdx-01],00

RAX=00000004
RDX=2295EA3B878

mov [r10+rsi],al

RAX=0000000000000065
RSI=000002295EA3B878
R10=0000000000000000

清楚movalbyte ptr。但我不明白 [rax+rdx-01][r10+rsi] 是什么意思,其中 rax 和 r10 不是指针。

在大多数情况下,我遇到 [RAX+C1] 其中 rax 是指针,C1 是偏移量,但我不知道当寄存器存储一些值而不是指针时是什么意思

您可能想阅读有关 的内容。

[rax+rdx-01]指的是raxrdx相加减1得到的地址。如果rax, rdx其中之一是数组指针时常用这个("base address"),另一个是该数组的索引。所以这可能是由 C 代码生成的,例如

char *array = ...;
size_t i = ...;
// ...
array[i-1] = 0;

其中 array 的值存储在 rax 中,而 i 的值存储在 rdx 中,反之亦然。你在这里说 rax 不是指针,但也许 rdx 是。

同样,mov [r10+rsi], al可以对应于

char *array = ...;
size_t i = ...;
char c = ...;
// ...
array[i] = c;

其中 r10=arrayrsi=i(反之亦然)和 al=c.