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

use*_*588 0 assembly x86-64 cpu-registers offset addressing-mode

沉迷于汇编程序的学习

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

RAX=00000004
RDX=2295EA3B878
Run Code Online (Sandbox Code Playgroud)

mov [r10+rsi],al

RAX=0000000000000065
RSI=000002295EA3B878
R10=0000000000000000
Run Code Online (Sandbox Code Playgroud)

很清楚mov al byte ptr。但我不明白什么意思 [rax+rdx-01][r10+rsi] rax 和 r10 不是指针。

在大多数情况下,我面临[RAX+C1]rax 是指针而 C1 是偏移量的情况,但是我不知道寄存器存储某些值而不是指针时的含义

Nat*_*dge 5

You might like to read about x86 addressing modes.

[rax+rdx-01]是指通过将计算出的地址raxrdx并减去1。这是常用的,如果一个rax, rdx是一个指针阵列(“基地地址”),而另一个是一个索引到该阵列。所以这可能是由 C 代码生成的,例如

char *array = ...;
size_t i = ...;
// ...
array[i-1] = 0;
Run Code Online (Sandbox Code Playgroud)

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

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

char *array = ...;
size_t i = ...;
char c = ...;
// ...
array[i] = c;
Run Code Online (Sandbox Code Playgroud)

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