卡在汇编程序的学习中
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是偏移量,但是我不知道当寄存器存储一些值而不是指针时是什么意思
您可能想阅读有关x86 addressing modes的信息。
[rax+rdx-01]
指的是通过将rax
和rdx
相加并减去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=array
和rsi=i
(反之亦然)和al=c
。