assembly - 像 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 是偏移量的情况,但我不知道寄存器存储某些值而不是指针时的含义
解决方案
您可能想阅读有关x86 寻址模式的信息。
[rax+rdx-01]
指通过加和减 1 计算的地址rax
。如果其中一个是指向数组的指针(“基地址”),而另一个是指向该数组的索引,rdx
则通常使用此地址。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
。
推荐阅读
- php - 单击它们时,jquery数据表中的下拉菜单链接不起作用
- python - 使用 Python 中的最小化时 Julia 中的函数和 Lambda 表达式
- python - 2 个变量应该会影响我的计算,但计算无法通过 if
- html - 为什么这个类“font-weight-bold”不起作用?[引导程序]
- reactjs - 为什么单击复选框时测试文本会短暂消失?
- gradle - CI 无法下载 gradle 分发快照
- r - 配方中的 SMOTE 与 trainControl 中的 SMOTE
- python - 文本没有出现 Pygame 没有错误
- c# - 如何使用 C# MailKit 解码 ContentEncoding.SevenBit 和 ContentEncoding.EightBit MimePart
- phpspec - 构造函数中的phpspec测试逻辑