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

问题描述 投票:0回答:1

卡在汇编程序的学习中

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是偏移量,但是我不知道当寄存器存储一些值而不是指针时是什么意思

assembly offset cpu-registers
1个回答
0
投票

您可能想阅读有关x86 addressing modes的信息。

[rax+rdx-01]指的是通过将raxrdx相加并减去1而计算出的地址。如果rax, rdx中的一个是指向数组的指针(“基地址”),而另一个是指向数组的指针,则通常使用此地址。是该数组的索引。因此,这可能是由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

© www.soinside.com 2019 - 2024. All rights reserved.