首页 > 解决方案 > 像 mov byte ptr [rax + rdx-1], 00 这样的指令是什么意思,其中 rax 不是指针

问题描述

坚持学习汇编程序

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

RAX=00000004
RDX=2295EA3B878

mov [r10+rsi],al

RAX=0000000000000065
RSI=000002295EA3B878
R10=0000000000000000

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

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

标签: assemblyx86-64offsetcpu-registersaddressing-mode

解决方案


您可能想阅读有关x86 寻址模式的信息。

[rax+rdx-01]指通过加和减 1 计算的地址rax。如果其中一个是指向数组的指针(“基地址”),而另一个是指向该数组的索引,rdx则通常使用此地址。rax, rdx所以这可能是由 C 代码生成的,例如

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

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

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

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

哪里r10=arrayrsi=i(反之亦然)和al=c


推荐阅读